Domanda

Qualcuno può per favore mi punto nella giusta direzione, quando si tratta di cambiare le proprietà di un elemento in Gtk2Hs.

Per esempio, come faccio a cambiare il colore di sfondo di un DrawingArea?

È stato utile?

Soluzione

Ci sono vari metodi per modificare lo stile di un widget. Ad esempio, per modificare lo stile dello sfondo è possibile utilizzare widgetModifyBg (corrispondente alla funzione C gtk_widget_modify_bg() ). In linea di principio, se si modifica lo stile di uno stato (ad esempio StateNormal) allora si dovrebbe anche cambiare per gli altri.

Y suggerisco di descrivere gli stili che si desidera in un file RC, e poi caricare il file dall'applicazione, ma sembra che funzioni come noreferrer gtk_rc_parse() non sono vincolati a gtk2hs.

Ecco un esempio:

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

Se avete bisogno di fare il disegno personalizzato sulla base di stili di un widget, è possibile farlo utilizzando widgetGetState , la proprietà e la famiglia widgetStyle styleGet* di funzioni (ad esempio, styleGetText ). Ecco un esempio di che:

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top