كيفية تغيير خصائص DrawingArea في GTK2HS
سؤال
يمكن لشخص ما يرجى توجيهي في الاتجاه الصحيح عندما يتعلق الأمر بتغيير خصائص عنصر في GTK2HS.
على سبيل المثال، كيف يمكنني تغيير لون الخلفية لرسم الرسمي؟
المحلول
هناك طرق مختلفة لتعديل نمط القطعة. على سبيل المثال لتعديل نمط الخلفية، يمكنك استخدامها widgetModifyBg
(المقابلة وظيفة C gtk_widget_modify_bg()
). من حيث المبدأ، إذا قمت بتغيير النمط لحالة واحدة (مثل statenormal)، فعليك أيضا تغييرها للآخرين.
سوف أقترح عليك وصف الأنماط التي تريدها في ملف 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