[Haskell-cafe] Problem with PDF/PS backend in GTK2HS
Peter Verswyvelen
bf3 at telenet.be
Sun Oct 28 10:07:34 EDT 2007
I have a strange problem, which is so elementary that I think I must be
missing something...
In GTK2HS, when I draw text using using textPath, the text is located at
different locations depending on which backend is used. I'm not talking
about a difference of a couple of pixels , but in my case it's half a
page off. The PNG and Win32 backend work fine, but the PDF/PS backends
get it wrong.
For example, I modified the Text.hs demo in the demos/Cairo subdirectory
so it also outputs PDF. Here the text is also at different locations, so
I guess it's not just my code. Code is pasted below.
I'm using Windows, and GTK2HS version 0.9.12 from
http://www.haskell.org/gtk2hs
Maybe someone could give this a quick test on Linux?
I guess this is most likely a Cairo problem, and has nothing to do with
the Haskell wrapper? Still this is hard to believe, since these kinds of
bugs would be quickly found.
Thanks,
Peter
----------------------------------------
import Graphics.Rendering.Cairo
import qualified Graphics.Rendering.Cairo.Matrix as M
boxText :: String -> Double -> Double -> Render ()
boxText text x y = do
save
lineWidth <- getLineWidth
(TextExtents xb yb w h _ _) <- textExtents text
rectangle (x + xb - lineWidth)
(y + yb - lineWidth)
(w + 2 * lineWidth)
(h + 2 * lineWidth)
stroke
moveTo x y
textPath text
fillPreserve
setSourceRGBA 0 0 1 0.5
setLineWidth 3.0
stroke
restore
transpSurface :: Double -> Double -> Render ()
transpSurface w h = do
save
rectangle 0 0 w h
setSourceRGBA 0 0 0 0
setOperator OperatorSource
fill
restore
width = 400
height = 300
main :: IO ()
main = withImageSurface FormatARGB32 width height $ \surface -> do
let render = do
setSourceRGB 0.0 0.0 0.0
setLineWidth 2.0
transpSurface (fromIntegral width) (fromIntegral height)
selectFontFace "sans" FontSlantNormal FontWeightNormal
setFontSize 40
extents <- fontExtents
let fontHeight = fontExtentsHeight extents
boxText "Howdy, world!" 10 fontHeight
translate 0 fontHeight
save
translate 10 fontHeight
rotate (10.0 * pi / 180.0)
boxText "Yay for Haskell!" 0 0
restore
translate 0 (3 * fontHeight)
save
setFontMatrix $ M.rotate ((-10.0) * pi / 180.0) $ M.scale 40.0
40.0 M.identity
boxText "...and Cairo!" 10 fontHeight
restore
renderWith surface render
surfaceWriteToPNG surface "Text.png"
withPDFSurface "Text.pdf" (realToFrac width) (realToFrac height) (flip
renderWith $ render >> showPage)
return ()
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20071028/22ae6395/attachment.htm
More information about the Haskell-Cafe
mailing list