1

我有一个可以使用和DrawingArea等基元在其上绘制的。如何在该区域上绘制文本?我对快速输出单行文本的东西最感兴趣。drawRectangledrawLine

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

有比这种方式更好的选择吗?

谢谢!

4

2 回答 2

4

我不知道你是否会考虑使用开罗。如果是这样,我认为该功能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/

于 2011-03-18T10:00:19.317 回答
1

我已经找到了使用 Pango 执行此操作的方法。

layout <- widgetCreateLayout drawAreaWidget stringToDraw

然后,您可以将这个新创建的布局与 和 等功能一起drawLayout使用drawLayoutWithColors

于 2011-03-20T20:47:49.220 回答