Wie Eigenschaften von DrawingArea in Gtk2Hs ändern
Frage
Kann mir bitte jemand in die richtige Richtung, wenn es um Ändern von Eigenschaften eines Elements in Gtk2Hs kommt.
Zum Beispiel, wie kann ich die Hintergrundfarbe eines DrawingArea?
Lösung
Es gibt verschiedene Methoden für ein Widget Stil zu ändern. Zum Beispiel des Hintergrundstil zu ändern können Sie widgetModifyBg
(entsprechend der Funktion C gtk_widget_modify_bg()
). Grundsätzlich, wenn Sie den Stil für einen Zustand (z StateNormal) ändern, dann sollten Sie es auch für die anderen ändern.
Y würde vorschlagen, dass Sie die Stile beschreiben Sie in einer RC-Datei möchten, und laden Sie dann die Datei aus Ihrer Anwendung, aber es scheint, dass Funktionen wie gtk_rc_parse()
sind in gtk2hs nicht gebunden.
Hier ist ein Beispiel:
import Graphics.UI.Gtk
main = do
initGUI
window <- windowNew
window `onDestroy` mainQuit
drawingArea <- drawingAreaNew
window `containerAdd` drawingArea
widgetModifyBg drawingArea StateNormal (Color 0xffff 0 0)
widgetShowAll window
mainGUI
Wenn Sie benutzerdefinierte auf einem Widget Styles Zeichnung brauchen basiert, können Sie tun, dass mit widgetGetState
, die widgetStyle
Eigenschaft und die styleGet*
Familie von Funktionen (zB styleGetText
). Hier ist ein Beispiel dafür:
import Graphics.Rendering.Cairo
import Graphics.UI.Gtk hiding (fill)
import Graphics.UI.Gtk.Gdk.Events (Event(Expose))
expose widget rect = do
state <- widgetGetState widget
style <- widget `get` widgetStyle
(Color red green blue) <- styleGetText style state
drawWindow <- widgetGetDrawWindow widget
renderWithDrawable drawWindow $ do
moveTo 50 50
setFontSize 20
setSourceRGB (fromIntegral red / 0xffff)
(fromIntegral green / 0xffff)
(fromIntegral blue / 0xffff)
showText "O HAI"
fill
return False
main = do
initGUI
window <- windowNew
window `onDestroy` mainQuit
drawingArea <- drawingAreaNew
drawingArea `onExpose` \(Expose sent area region count) ->
expose drawingArea area
window `containerAdd` drawingArea
widgetShowAll window
mainGUI