Pregunta

Por favor alguien puede apuntar en la dirección correcta cuando se trata de cambiar las propiedades de un elemento en Gtk2Hs.

Por ejemplo, ¿cómo puedo cambiar el color de fondo de un DrawingArea?

¿Fue útil?

Solución

Existen varios métodos para modificar el estilo de un widget. Por ejemplo, para modificar el estilo de fondo se puede utilizar widgetModifyBg (correspondiente a la función C gtk_widget_modify_bg() ). En principio, si cambia el estilo de un estado (por ejemplo, StateNormal), entonces también debería cambiarlo por los otros.

Y sugeriría que usted describe los estilos que desea en un archivo RC, y luego cargar el archivo desde la aplicación, pero parece que funciona como gtk_rc_parse() no están obligados en Gtk2Hs.

Este es un ejemplo:

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 tiene que hacer por encargo dibujo basado en estilos de un widget, puede hacer que el uso de widgetGetState , la propiedad y la familia widgetStyle styleGet* de funciones (por ejemplo, styleGetText ). Aquí está un ejemplo de ello:

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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top