Gtk2Hs の要素のプロパティを変更することになると、誰かが私を正しい方向に向けることができますか?
たとえば、DrawingArea の背景色を変更するにはどうすればよいですか?
ウィジェットのスタイルを変更するには、さまざまな方法があります。たとえば、使用できる背景スタイルを変更する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