Drawing text on GTK's DrawingArea in Haskell

被刻印的时光 ゝ 提交于 2020-01-06 02:41:15

问题


I have a DrawingArea onto which I can draw using primitives such as drawRectangle and drawLine. How do I draw text onto that area? I'm most interested in something that quickly outputs a single line of text.

Graphics.UI.Gtk.Gdk.Drawable.layoutLine seems to be what I want, but it wants a Graphics.Rendering.Pango.Layout.LayoutLine as input. How do I construct that LayoutLine?

Are there better alternatives than doing it this way?

Thanks!


回答1:


I don't know if you would consider using Cairo. If so, I think the function showText may be what you are looking for. Use the cairo function moveTo to move to a specific location before writing the text. This is one of the simplest working examples I can produce:

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

I found the following to be an excellent guide, even though it was not for Haskell: http://zetcode.com/tutorials/cairographicstutorial/cairotext/




回答2:


I've found the way to do this with Pango.

layout <- widgetCreateLayout drawAreaWidget stringToDraw

Then you can use this newly-created layout with functions such as drawLayout and drawLayoutWithColors.



来源:https://stackoverflow.com/questions/5295423/drawing-text-on-gtks-drawingarea-in-haskell

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!