Cómo cambiar las propiedades de DrawingArea en Gtk2Hs
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?
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