Может кто-нибудь указать мне правильное направление, когда дело доходит до изменения свойств элемента в Gtk2Hs.
Например, как изменить цвет фона DrawingArea?
Может кто-нибудь указать мне правильное направление, когда дело доходит до изменения свойств элемента в 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
widgetQueueDraw
.
- person daf; 08.02.2015