Como alterar as propriedades de DrawingArea em Gtk2Hs
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?
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