如何改变性质的DrawingArea在Gtk2Hs
题
有人可以请我在正确的方向,当它涉及到改变性质的元素在Gtk2Hs.
例如,如何变化的背景色的一个DrawingArea?
解决方案
有各种不同的方法修改的一个小部件的风格。例如修改背景,可以使用的风格 widgetModifyBg
(对应的C功能 gtk_widget_modify_bg()
).原则上,如果你改变风格,用于一个国家(例如StateNormal)然后你也应该改变它的其他人。
Y会建议你描述一下你想要的样式在一个RC文件,然后加载的文件自己的应用,但似乎职能喜欢 gtk_rc_parse()
不能在gtk2hs.
这里有一个例子:
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
如果你需要定制的绘图基础上的一个小部件的风格,您可以使用 widgetGetState
, , widgetStyle
酒店和本 styleGet*
家庭的功能(例如: styleGetText
).这里有一个例子:
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
不隶属于 StackOverflow