GTK2HS에서 DrawEREA의 특성을 변경하는 방법
문제
GTK2HS에서 요소의 속성을 변경하는 데있어 누군가가 올바른 방향으로 나를 가리킬 수 있습니까?
예를 들어, 도로 영역의 배경색을 어떻게 변경합니까?
해결책
위젯의 스타일을 수정하는 다양한 방법이 있습니다. 예를 들어 사용할 수있는 배경 스타일을 수정하려면 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