如何在Gtk2Hs中更改DrawingArea的属性

时间:2009-12-13 18:01:47

标签: haskell gtk gtk2hs

在改变Gtk2Hs中元素的属性时,有人可以指出我正确的方向。

例如,如何更改DrawingArea的背景颜色?

1 个答案:

答案 0 :(得分:3)

修改窗口小部件的样式有多种方法。例如,要修改背景样式,可以使用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

如果您需要根据窗口小部件的样式进行自定义绘图,则可以使用widgetGetStatewidgetStyle属性和styleGet*函数族(例如{{3})来执行此操作})。这是一个例子:

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