Comment modifier les propriétés de DrawingArea en gtk2hs
Question
Quelqu'un peut-il s'il vous plaît me diriger dans la bonne direction en ce qui concerne la modification des propriétés d'un élément dans gtk2hs.
Par exemple, comment puis-je changer la couleur de fond d'un DrawingArea?
La solution
Il existe différentes méthodes pour modifier le style d'un widget. Par exemple, pour modifier le style d'arrière-plan, vous pouvez utiliser widgetModifyBg
(correspondant à la fonction C gtk_widget_modify_bg()
). En principe, si vous changez le style pour un état (par exemple StateNormal) alors vous devriez également changer pour les autres.
Y suggérez-vous décrire les styles que vous voulez dans un fichier RC, puis chargez ce fichier depuis votre application, mais il semble que des fonctions comme noreferrer de gtk_rc_parse()
ne sont pas liés à gtk2hs.
Voici un exemple:
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
Si vous devez faire le dessin personnalisé en fonction des styles d'un widget, vous pouvez le faire en utilisant widgetGetState
, la propriété widgetStyle
et la famille styleGet*
des fonctions (par exemple styleGetText
). Voici un exemple de cela:
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