سؤال

يمكن لشخص ما يرجى توجيهي في الاتجاه الصحيح عندما يتعلق الأمر بتغيير خصائص عنصر في 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top