Рисование текста на Зоне рисования GTK в Хаскеле - PullRequest
1 голос
/ 14 марта 2011

У меня есть DrawingArea, на котором я могу рисовать, используя такие примитивы, как drawRectangle и drawLine.Как мне нарисовать текст в этой области?Меня больше всего интересует что-то, что быстро выводит одну строку текста.

Graphics.UI.Gtk.Gdk.Drawable.layoutLine, кажется, то, что я хочу, но оно хочет Graphics.Rendering.Pango.Layout.LayoutLine в качестве ввода.Как мне построить это LayoutLine?

Есть ли лучшие альтернативы, чем сделать это таким образом?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 18 марта 2011

Не знаю, подумаете ли вы об использовании Каира.Если это так, я думаю, что функция showText может быть то, что вы ищете.Используйте функцию cairo moveTo для перемещения в определенное место перед написанием текста.Это один из простейших рабочих примеров, которые я могу привести:

import Graphics.UI.Gtk
import Graphics.Rendering.Cairo

main :: IO ()
main = do
    initGUI
    window      <- windowNew
    drawingArea <- drawingAreaNew
    containerAdd window drawingArea

    drawingArea `onExpose` (\_ -> renderScene drawingArea)
    window `onDestroy` mainQuit

    windowSetDefaultSize window 640 480
    widgetShowAll window
    mainGUI

renderScene :: DrawingArea -> IO Bool
renderScene da = do
    dw <- widgetGetDrawWindow da
    renderWithDrawable dw $ do setSourceRGBA 0.5 0.5 0.5 1.0
                               moveTo 100.0 100.0
                               showText "HelloWorld"
    return True

Я считаю, что следующее руководство является отличным руководством, хотя это было не для Haskell: http://zetcode.com/tutorials/cairographicstutorial/cairotext/

1 голос
/ 20 марта 2011

Я нашел способ сделать это с Панго.

layout <- widgetCreateLayout drawAreaWidget stringToDraw

Затем вы можете использовать этот вновь созданный макет с такими функциями, как drawLayout и drawLayoutWithColors.

...