在Haskell的GTK的DrawingArea上绘制文本

时间:2011-03-14 06:25:22

标签: haskell gtk pango gtk2hs

我可以使用DrawingAreadrawRectangle之类的基元绘制drawLine。如何在该区域上绘制文字?我最感兴趣的是能够快速输出单行文本的东西。

Graphics.UI.Gtk.Gdk.Drawable.layoutLine似乎是我想要的,但它需要Graphics.Rendering.Pango.Layout.LayoutLine作为输入。如何构建LayoutLine

有没有比这样做更好的选择?

谢谢!

2 个答案:

答案 0 :(得分:3)

我不知道你是否会考虑使用开罗。如果是这样,我认为函数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 :(得分:1)

我找到了用Pango做到这一点的方法。

layout <- widgetCreateLayout drawAreaWidget stringToDraw

然后,您可以将此新创建的布局与drawLayoutdrawLayoutWithColors等功能结合使用。