1

Gtk2Hs の要素のプロパティを変更することになると、誰かが私を正しい方向に向けることができますか?

たとえば、DrawingArea の背景色を変更するにはどうすればよいですか?

4

1 に答える 1

3

ウィジェットのスタイルを変更するには、さまざまな方法があります。たとえば、使用できる背景スタイルを変更するwidgetModifyBgには (C 関数に対応gtk_widget_modify_bg())。原則として、1 つの状態 (StateNormal など) のスタイルを変更した場合は、他の状態のスタイルも変更する必要があります。

gtk_rc_parse()Y さんは、必要なスタイルを RC ファイルに記述し、そのファイルをアプリケーションからロードすることをお勧めしますが、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
于 2009-12-13T23:31:01.737 に答える