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?

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top