Pergunta

Alguém por favor pode me apontar na direção certa quando se trata de alterar as propriedades de um elemento em Gtk2Hs.

Por exemplo, como faço para mudar a cor de fundo de um DrawingArea?

Foi útil?

Solução

Existem vários métodos para modificar o estilo de um widget. Por exemplo, para modificar o estilo de fundo você pode usar widgetModifyBg (correspondente à função C gtk_widget_modify_bg() ). Em princípio, se você alterar o estilo para um estado (por exemplo StateNormal), então você também deve alterá-lo para os outros.

Y sugiro que você descrever os estilos que você quer em um arquivo RC, e, em seguida, carregar esse arquivo de sua aplicação, mas parece que funciona como gtk_rc_parse() não estão vinculados em gtk2hs.

Aqui está um exemplo:

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 você precisa fazer desenho personalizado com base em estilos de um widget, você pode fazer isso usando widgetGetState , a propriedade widgetStyle ea família styleGet* de funções (por exemplo, styleGetText ). Aqui está um exemplo de que:

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top