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?

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top