packages feed

hoodle-render 0.3.1 → 0.3.2

raw patch · 4 files changed

+124/−53 lines, 4 filesdep ~hoodle-typesdep ~strictPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: hoodle-types, strict

API changes (from Hackage documentation)

Files

hoodle-render.cabal view
@@ -1,5 +1,5 @@ Name:		hoodle-render-Version:	0.3.1+Version:	0.3.2 Synopsis:       Hoodle file renderer Description: 	Rendering library using cairo for hoodle file format License: 	BSD3@@ -26,11 +26,11 @@                  containers >= 0.4,                   cairo == 0.12.*,                   svgcairo == 0.12.*,-                 strict == 0.3.*, +                 strict >= 0.3,                   bytestring >= 0.9,                  base64-bytestring >= 0.1,                   lens >= 2.5, -                 hoodle-types >= 0.2,+                 hoodle-types >= 0.2.1,                  gd >= 3000.7,                   unix >= 2.5,                  uuid >= 1.2, 
src/Graphics/Hoodle/Render.hs view
@@ -60,7 +60,7 @@ import           Data.Hoodle.Simple import           Data.Hoodle.BBox import           Data.Hoodle.Predefined -import           Data.Hoodle.Zipper +import           Data.Hoodle.Zipper hiding (moveTo)  import qualified Graphics.UI.Gtk.Poppler.Page as PopplerPage import qualified Graphics.Rendering.Cairo.SVG as RSVG -- from this package@@ -125,13 +125,13 @@           (ix',iy') = RSVG.svgGetSize rsvg           ix = fromIntegral ix'            iy = fromIntegral iy'-      clipBBox (Just (getBBox svgbbx))+      -- clipBBox (Just (getBBox svgbbx))       save        translate x y        scale ((x2-x1)/ix) ((y2-y1)/iy)       RSVG.svgRender rsvg        restore-      resetClip +      -- resetClip        return ()   -- | render svg  @@ -177,6 +177,21 @@ -- R-structure  ---- +drawFallBackBkg :: Dimension -> Render () +drawFallBackBkg (Dim w h) = do +  setSourceRGBA 1 1 1 1 +  rectangle 0 0 w h +  fill +  setSourceRGBA 0 0 0 1 +  setLineWidth 5+  moveTo 0 0+  lineTo w h +  stroke +  moveTo w 0 +  lineTo 0 h+  stroke+  + -- |  renderRBkg :: (RBackground,Dimension) -> Render (RBackground,Dimension) renderRBkg (r,dim) = @@ -185,10 +200,10 @@         drawBkgAndRecord (renderBkg (rbkg2Bkg r,dim))         -- renderBkg (rbkg2Bkg r,dim) >> return (r,dim)       (RBkgPDF _ _ _ p _) -> -        maybe (return (r,dim)) +        maybe (drawFallBackBkg dim >> return (r,dim))                (\pg -> drawBkgAndRecord (bkgPdfRender pg)) p       (RBkgEmbedPDF _ p _) -> -        maybe (return (r,dim)) +        maybe (drawFallBackBkg dim >> return (r,dim))                (\pg -> drawBkgAndRecord (bkgPdfRender pg)) p    where      drawBkgAndRecord rdr = do @@ -218,6 +233,7 @@       ix <- liftM fromIntegral (imageSurfaceGetWidth sfc)       iy <- liftM fromIntegral (imageSurfaceGetHeight sfc)       save +      -- setAntialias AntialiasNone             translate x y        scale ((x2-x1)/ix) ((y2-y1)/iy)       setSourceSurface sfc 0 0 @@ -233,13 +249,14 @@           (ix',iy') = RSVG.svgGetSize rsvg           ix = fromIntegral ix'            iy = fromIntegral iy'-      clipBBox (Just (getBBox svgbbx))+      --  clipBBox (Just (getBBox svgbbx))       save +      -- setAntialias AntialiasNone       translate x y        scale ((x2-x1)/ix) ((y2-y1)/iy)       RSVG.svgRender rsvg        restore-      resetClip +      -- resetClip        return ()    return itm  renderRItem itm@(RItemLink lnkbbx mrsvg) = do @@ -251,13 +268,14 @@           (ix',iy') = RSVG.svgGetSize rsvg           ix = fromIntegral ix'            iy = fromIntegral iy'-      clipBBox (Just (getBBox lnkbbx))+      -- clipBBox (Just (getBBox lnkbbx))       save +      -- setAntialias AntialiasNone       translate x y        scale ((x2-x1)/ix) ((y2-y1)/iy)       RSVG.svgRender rsvg        restore-      resetClip +      -- resetClip        return ()    return itm  @@ -267,49 +285,96 @@ -- InBBox -- ------------ +{-+renderRItem_InBBox :: Maybe BBox -> RItem -> Render RItem  +renderRItem_InBBox _ itm@(RItemStroke strk) = renderStrk (bbxed_content strk) >> return itm+renderRItem_InBBox mbbox itm@(RItemImage img msfc) = do  +  case msfc of+    Nothing -> renderImg (bbxed_content img)+    Just sfc -> do +      let (x,y) = (img_pos . bbxed_content) img+          BBox (x1,y1) (x2,y2) = getBBox img+      ix <- liftM fromIntegral (imageSurfaceGetWidth sfc)+      iy <- liftM fromIntegral (imageSurfaceGetHeight sfc)+      save +      clipBBox (fmap (flip inflate 1) mbbox) +      translate x y +      scale ((x2-x1)/ix) ((y2-y1)/iy)+      setSourceSurface sfc 0 0 +      paint +      resetClip +      restore+  return itm +renderRItem_InBBox mbbox itm@(RItemSVG svgbbx mrsvg) = do +  case mrsvg of+    Nothing -> renderSVG (bbxed_content svgbbx)+    Just rsvg -> do +      let (x,y) = (svg_pos . bbxed_content) svgbbx+          BBox (x1,y1) (x2,y2) = getBBox svgbbx+          (ix',iy') = RSVG.svgGetSize rsvg+          ix = fromIntegral ix' +          iy = fromIntegral iy'+      clipBBox (fmap (flip inflate 0.5) mbbox)+      save +      translate x y +      scale ((x2-x1)/ix) ((y2-y1)/iy)+      RSVG.svgRender rsvg +      resetClip +      restore+      return () +  return itm +renderRItem_InBBox mbbox itm@(RItemLink lnkbbx mrsvg) = do +  case mrsvg of+    Nothing -> renderLink (bbxed_content lnkbbx)+    Just rsvg -> do +      let (x,y) = (link_pos . bbxed_content) lnkbbx+          BBox (x1,y1) (x2,y2) = getBBox lnkbbx+          (ix',iy') = RSVG.svgGetSize rsvg+          ix = fromIntegral ix' +          iy = fromIntegral iy'+      save +      clipBBox (fmap (flip inflate 0.5) mbbox)+      translate x y +      scale ((x2-x1)/ix) ((y2-y1)/iy)+      RSVG.svgRender rsvg +      resetClip +      restore+      return () +  return itm +-}++ -- | background drawing in bbox  renderRBkg_InBBox :: Maybe BBox                    -> (RBackground,Dimension)                    -> Render (RBackground,Dimension) renderRBkg_InBBox mbbox (b,dim) = do -    clipBBox mbbox+    clipBBox (fmap (flip inflate 1) mbbox)+    -- clipBBox mbbox     renderRBkg_Buf (b,dim)     resetClip     return (b,dim) -{-    case b of -      RBkgSmpl _ _ _ -> do -        clipBBox mbbox-        renderRBkg_Buf (b,dim)-        resetClip-      RBkgPDF _ _ _ _ _ -> do -        clipBBox mbbox-        renderRBkg_Buf (b,dim)-        resetClip-      RBkgEmbedPDF _ _ _ -> do -        clipBBox mbbox-        renderRBkg_Buf (b,dim)-        resetClip -} - -- | render RLayer within BBox after hittest items renderRLayer_InBBox :: Maybe BBox -> RLayer -> Render RLayer renderRLayer_InBBox mbbox layer = do  -  clipBBox (fmap (flip inflate 1) mbbox) +  clipBBox (fmap (flip inflate 2) mbbox)  -- temporary+  -- clipBBox mbbox    let hittestbbox = case mbbox of          Nothing -> NotHitted []                     :- Hitted (view gitems layer)                     :- Empty          Just bbox -> (hltHittedByBBox bbox . view gitems) layer   (mapM_ renderRItem . concatMap unHitted  . getB) hittestbbox-  resetClip-  -- return layer +  resetClip     -- simply twice rendering if whole redraw happening    case view gbuffer layer of      LyBuf (Just sfc) -> do        liftIO $ renderWith sfc $ do -        -- renderRLayer_InBBox mbbox lyr -        clipBBox (fmap (flip inflate 1) mbbox )+        clipBBox (fmap (flip inflate 2) mbbox ) -- temporary+        -- clipBBox mbbox +        -- setAntialias AntialiasNone         setSourceRGBA 0 0 0 0          setOperator OperatorSource         paint@@ -318,6 +383,7 @@         resetClip          return layer      _ -> return layer +     @@ -335,21 +401,29 @@         case msfc of            Nothing -> renderRBkg (b,dim) >> return ()           Just sfc -> do +            save+            -- setAntialias AntialiasNone             setSourceSurface sfc 0 0              paint +            restore       RBkgPDF _ _ _n _ msfc -> do          case msfc of            Nothing -> renderRBkg (b,dim) >> return ()           Just sfc -> do +            save+            -- setAntialias AntialiasNone                         setSourceSurface sfc 0 0              paint +            restore       RBkgEmbedPDF _ _ msfc -> do          case msfc of            Nothing -> renderRBkg (b,dim) >> return ()           Just sfc -> do +            save+            -- setAntialias AntialiasNone                         setSourceSurface sfc 0 0              paint -+            restore     return (b,dim)  -- | @@ -410,12 +484,13 @@ cnstrctRHoodle hdl = do    let hid = view hoodleID hdl        ttl = view title hdl +      revs = view revisions hdl        pgs = view pages hdl       embeddedsrc = view embeddedPdf hdl    mdoc <- maybe (return Nothing) (\src -> liftIO $ popplerGetDocFromDataURI src)             embeddedsrc   npgs <- evalStateT (mapM cnstrctRPage_StateT pgs) (Just (Context "" "" Nothing mdoc)) -  return $ GHoodle hid ttl embeddedsrc (fromList npgs)          +  return $ GHoodle hid ttl revs embeddedsrc (fromList npgs)                -- |
src/Graphics/Hoodle/Render/Background.hs view
@@ -38,15 +38,6 @@ --  import Prelude hiding (mapM_) -{--isPopplerEnabled :: Bool  -#ifdef POPPLER-isPopplerEnabled = True -#else-isPopplerEnabled = False-#endif--} - -- | popplerGetDocFromFile :: ByteString -> IO (Maybe Poppler.Document) popplerGetDocFromFile fp = @@ -76,21 +67,24 @@       removeFile tmpfile        return mdoc  - -- | popplerGetPageFromDoc :: Poppler.Document                        -> Int -- ^ page number                        -> IO (Maybe Poppler.Page, Maybe Surface) popplerGetPageFromDoc doc pn = do   -  pg <- Poppler.documentGetPage doc (pn-1) -  (w,h) <- PopplerPage.pageGetSize pg-  sfc <- createImageSurface FormatARGB32 (floor w) (floor h)-  renderWith sfc $ do   -    setSourceRGBA 1 1 1 1-    rectangle 0 0 w h -    fill-    PopplerPage.pageRender pg-  return (Just pg, Just sfc)+  n <- Poppler.documentGetNPages doc +  if pn > n +    then return (Nothing, Nothing)+    else do +      pg <- Poppler.documentGetPage doc (pn-1) +      (w,h) <- PopplerPage.pageGetSize pg+      sfc <- createImageSurface FormatARGB32 (floor w) (floor h)+      renderWith sfc $ do   +        setSourceRGBA 1 1 1 1+        rectangle 0 0 w h +        fill+        PopplerPage.pageRender pg+      return (Just pg, Just sfc)  -- | draw ruling all  drawRuling :: Double -> Double -> ByteString -> Render () @@ -233,6 +227,7 @@                 Just doc -> do                    liftIO $ popplerGetPageFromDoc doc pn                 Nothing -> error "error2 in cnstrctRBkg_StateT" +              maybe (liftIO $ putStrLn ( "pn = " ++ show pn )) (const (return ())) mpage                return (RBkgPDF (Just oldd) oldf pn mpage msfc)             Nothing -> error "error3 in cnstrctRBkg_StateT"      BackgroundEmbedPdf _ pn -> do 
src/Graphics/Hoodle/Render/Type/Hoodle.hs view
@@ -75,6 +75,7 @@ rHoodle2Hoodle :: RHoodle -> Hoodle  rHoodle2Hoodle = Hoodle <$> view ghoodleID                         <*> view gtitle +                        <*> view grevisions                         <*> view gembeddedpdf                         <*> IM.elems . fmap rPage2Page . view gpages