Можно ли рисовать контейнер и видеть компоненты в gtk2hs? - PullRequest
1 голос
/ 26 февраля 2011

Я хочу нарисовать на фоне (например, прямоугольник или что-то в этом роде), а затем сделать так, чтобы компоненты поверх него.Компоненты были бы поверх того, что я нарисовал.Есть ли способ сделать это?

Вот пример концепции.Это только отображает прямоугольник.Так что ... просто нужен какой-то способ сказать ему, чтобы он тоже делал компоненты.

{-# LANGUAGE PackageImports #-}

import Graphics.UI.Gtk
import Graphics.UI.Gtk.Gdk.EventM
import Graphics.UI.Gtk.Gdk.GC
import "mtl" Control.Monad.Trans(liftIO)

main = do
  initGUI
  window <- windowNew
  window `onDestroy` mainQuit
  windowSetDefaultSize window 800 600
  windowSetPosition window WinPosCenter

  table <- tableNew 3 3 False
  button <- buttonNewWithLabel "Test Button"
  tableAttachDefaults table button 1 2 1 2
  containerAdd window table
  table `on` exposeEvent $ update
  widgetShowAll table

  widgetShowAll window
  mainGUI

update = do
  win <- eventWindow
  liftIO $ do
    gc <- gcNew win
    drawRectangle win gc False 10 10 90 90
  return True

1 Ответ

1 голос
/ 27 сентября 2011

Это не относится к gtk2hs. Согласно http://developer.gnome.org/gtk/2.24/GtkWidget.html#GtkWidget-expose-event вам нужно return False в вашем обработчике обновлений, чтобы впоследствии вызывались и другие обработчики.

Когда вы измените это в своем примере, кнопка покроет все окно, поэтому прямоугольник будет скрыт. Но, например, с tableSetHomogeneous table True вы получите желаемый эффект.

...