hoodle-render 0.1.0 → 0.2
raw patch · 6 files changed
+204/−248 lines, 6 filesdep ~hoodle-typesdep ~lensdep ~popplerPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: hoodle-types, lens, poppler
API changes (from Hackage documentation)
- Graphics.Hoodle.Render: renderImgBBx_BBoxOnly :: ImageBBox -> Render ()
- Graphics.Hoodle.Render: renderRBkg_Dummy :: (RBackground, Dimension) -> Render ()
- Graphics.Hoodle.Render: renderRBkg_NoPDF :: (RBackground, Dimension) -> Render ()
- Graphics.Hoodle.Render: renderRItem_BBoxOnly :: RItem -> Render ()
- Graphics.Hoodle.Render: renderRLayer_BBoxOnly :: RLayer -> Render ()
- Graphics.Hoodle.Render: renderRPage_BBoxOnly :: RPage -> Render ()
- Graphics.Hoodle.Render: renderStrkBBx_BBoxOnly :: StrokeBBox -> Render ()
+ Graphics.Hoodle.Render.Debug: renderBkg_InBBox :: Maybe BBox -> Dimension -> Background -> Render ()
+ Graphics.Hoodle.Render.Debug: renderImgBBx_BBoxOnly :: ImageBBox -> Render ()
+ Graphics.Hoodle.Render.Debug: renderRBkg_Buf :: (RBackground, Dimension) -> Render (RBackground, Dimension)
+ Graphics.Hoodle.Render.Debug: renderRBkg_Dummy :: (RBackground, Dimension) -> Render ()
+ Graphics.Hoodle.Render.Debug: renderRBkg_NoPDF :: (RBackground, Dimension) -> Render ()
+ Graphics.Hoodle.Render.Debug: renderRItem_BBoxOnly :: RItem -> Render ()
+ Graphics.Hoodle.Render.Debug: renderRLayer_BBoxOnly :: RLayer -> Render ()
+ Graphics.Hoodle.Render.Debug: renderRLayer_InBBoxBuf :: Maybe BBox -> RLayer -> Render RLayer
+ Graphics.Hoodle.Render.Debug: renderRPage_BBoxOnly :: RPage -> Render ()
+ Graphics.Hoodle.Render.Debug: renderStrkBBx_BBoxOnly :: StrokeBBox -> Render ()
+ Graphics.Hoodle.Render.Generic: passarg :: Monad m => (a -> m ()) -> a -> m a
- Graphics.Hoodle.Render: renderRBkg :: (RBackground, Dimension) -> Render ()
+ Graphics.Hoodle.Render: renderRBkg :: (RBackground, Dimension) -> Render (RBackground, Dimension)
- Graphics.Hoodle.Render: renderRBkg_Buf :: (RBackground, Dimension) -> Render ()
+ Graphics.Hoodle.Render: renderRBkg_Buf :: (RBackground, Dimension) -> Render (RBackground, Dimension)
- Graphics.Hoodle.Render: renderRBkg_InBBox :: Maybe BBox -> (RBackground, Dimension) -> Render ()
+ Graphics.Hoodle.Render: renderRBkg_InBBox :: Maybe BBox -> (RBackground, Dimension) -> Render (RBackground, Dimension)
- Graphics.Hoodle.Render: renderRItem :: RItem -> Render ()
+ Graphics.Hoodle.Render: renderRItem :: RItem -> Render RItem
- Graphics.Hoodle.Render: renderRLayer_InBBox :: Maybe BBox -> RLayer -> Render ()
+ Graphics.Hoodle.Render: renderRLayer_InBBox :: Maybe BBox -> RLayer -> Render RLayer
- Graphics.Hoodle.Render: renderRLayer_InBBoxBuf :: Maybe BBox -> RLayer -> Render ()
+ Graphics.Hoodle.Render: renderRLayer_InBBoxBuf :: Maybe BBox -> RLayer -> Render RLayer
- Graphics.Hoodle.Render.Generic: cairoOptionPage :: (RenderOptionable (b, Dimension), RenderOptionable a, Foldable s) => (RenderOption (b, Dimension), RenderOption a) -> GPage b s a -> Render ()
+ Graphics.Hoodle.Render.Generic: cairoOptionPage :: (RenderOptionable (b, Dimension), RenderOptionable a, Foldable s) => (RenderOption (b, Dimension), RenderOption a) -> GPage b s a -> Render (GPage b s a)
- Graphics.Hoodle.Render.Generic: cairoRender :: Renderable a => a -> Render ()
+ Graphics.Hoodle.Render.Generic: cairoRender :: Renderable a => a -> Render a
- Graphics.Hoodle.Render.Generic: cairoRenderOption :: RenderOptionable a => RenderOption a -> a -> Render ()
+ Graphics.Hoodle.Render.Generic: cairoRenderOption :: RenderOptionable a => RenderOption a -> a -> Render a
Files
- hoodle-render.cabal +15/−38
- src/Graphics/Hoodle/Render.hs +30/−135
- src/Graphics/Hoodle/Render/Background.hs +0/−3
- src/Graphics/Hoodle/Render/Debug.hs +124/−0
- src/Graphics/Hoodle/Render/Generic.hs +20/−69
- src/Graphics/Hoodle/Render/Util/HitTest.hs +15/−3
hoodle-render.cabal view
@@ -1,5 +1,5 @@ Name: hoodle-render-Version: 0.1.0+Version: 0.2 Synopsis: Hoodle file renderer Description: Rendering library using cairo for hoodle file format License: BSD3@@ -23,32 +23,25 @@ ghc-options: -Wall -fno-warn-orphans -funbox-strict-fields -fno-warn-unused-do-bind ghc-prof-options: -caf-all -auto-all - if flag(poppler)- Build-Depends: base == 4.*, - mtl == 2.*, - containers == 0.4.*, - cairo == 0.12.*, - strict == 0.3.*, - bytestring == 0.9.*,- poppler == 0.12.*, - lens >= 2.4 && < 2.7, - hoodle-types >= 0.0.999 && < 0.2,- TypeCompose == 0.9.*- else- Build-Depends: base == 4.*, - mtl == 2.*, - containers == 0.4.*, - cairo == 0.12.*, - strict == 0.3.*, - bytestring == 0.9.*,- lens >= 2.4 && < 2.7, - hoodle-types >= 0.0.999 && < 0.2,- TypeCompose == 0.9.*+ Build-Depends: base == 4.*, + mtl == 2.*, + containers == 0.4.*, + cairo == 0.12.*, + strict == 0.3.*, + bytestring == 0.9.*,+ lens >= 2.4, + hoodle-types >= 0.1 && < 0.2,+ TypeCompose == 0.9.* + if flag(poppler)+ Build-Depends: poppler >= 0.12.2.1+ else + Build-Depends: Exposed-Modules: Graphics.Hoodle.Render Graphics.Hoodle.Render.Background+ Graphics.Hoodle.Render.Debug Graphics.Hoodle.Render.Generic Graphics.Hoodle.Render.Highlight Graphics.Hoodle.Render.Item @@ -61,21 +54,5 @@ Graphics.Hoodle.Render.Type.Select Graphics.Hoodle.Render.Util Graphics.Hoodle.Render.Util.HitTest-- if flag(poppler) cpp-options: -DPOPPLER- -- -- Graphics.Hoodle.Render.SimpleNew - -- Graphics.Hoodle.Render.BBox- -- Graphics.Hoodle.Render.PDFBackground- -- Graphics.Hoodle.Render.BBoxMapPDF- -- Graphics.Hoodle.Render.BBoxMapPDFImg- -- Graphics.Hoodle.Render.Type- -- Graphics.Hoodle.Render.Type.BBoxMapPDFImg- -- Graphics.Hoodle.Render.Type.Select- -- Graphics.Hoodle.Render.BBoxOnly- -- Graphics.Hoodle.Render.InBBox- -- Graphics.Hoodle.Render.Item- -- Graphics.Hoodle.Render.Simple
src/Graphics/Hoodle/Render.hs view
@@ -18,38 +18,23 @@ module Graphics.Hoodle.Render ( --- * dummy rendering - renderRBkg_Dummy -- * simple rendering using non-R-structure -, renderStrk+ renderStrk , renderImg , renderBkg , renderItem , renderPage -- * render in bbox using non R-structure , renderBkg_InBBox- -- * simple rendering using R-structure , renderRBkg , renderRItem --- * nopdf-, renderRBkg_NoPDF- -- * render in bbox , renderRLayer_InBBox , renderRBkg_InBBox ---- * render only bbox (for debug purpose)-, renderStrkBBx_BBoxOnly-, renderImgBBx_BBoxOnly-, renderRItem_BBoxOnly-, renderRLayer_BBoxOnly-, renderRPage_BBoxOnly- -- * render using buf , renderRBkg_Buf , renderRLayer_InBBoxBuf- -- * buffer update , updateLayerBuf , updatePageBuf @@ -59,7 +44,6 @@ , cnstrctRBkg_StateT , cnstrctRPage_StateT , cnstrctRHoodle - ) where import Control.Lens @@ -90,16 +74,7 @@ import Prelude hiding (curry,uncurry,mapM,mapM_,concatMap) ------ --- Dummy (for testing) ------ -renderRBkg_Dummy :: (RBackground,Dimension) -> Render () -renderRBkg_Dummy (_,Dim w h) = do - setSourceRGBA 1 1 1 1- rectangle 0 0 w h - fill - ----- -- simple --- @@ -194,9 +169,9 @@ ---- -- | -renderRBkg :: (RBackground,Dimension) -> Render ()-renderRBkg r@(RBkgSmpl _ _ _,dim) = renderBkg (rbkg2Bkg (fst r),dim)-renderRBkg (RBkgPDF _ _ _ p _,dim) = do+renderRBkg :: (RBackground,Dimension) -> Render (RBackground,Dimension)+renderRBkg (r@(RBkgSmpl _ _ _),dim) = renderBkg (rbkg2Bkg r,dim) >> return (r,dim)+renderRBkg (r@(RBkgPDF _ _ _ p _),dim) = do case p of Nothing -> return () Just pg -> do @@ -207,11 +182,12 @@ #ifdef POPPLER PopplerPage.pageRender pg #endif + return (r,dim) -- |-renderRItem :: RItem -> Render () -renderRItem (RItemStroke strk) = renderStrk (strkbbx_strk strk)-renderRItem (RItemImage img msfc) = do +renderRItem :: RItem -> Render RItem +renderRItem itm@(RItemStroke strk) = renderStrk (strkbbx_strk strk) >> return itm+renderRItem itm@(RItemImage img msfc) = do case msfc of Nothing -> renderImg (imgbbx_img img) Just sfc -> do @@ -227,79 +203,18 @@ paint restore resetClip - - -- renderImg (imgbbx_img img) ------------------- BBoxOnly --------------------- | render only bounding box of a StrokeBBox -renderStrkBBx_BBoxOnly :: StrokeBBox -> Render () -renderStrkBBx_BBoxOnly sbbox = do - let s = strkbbx_strk sbbox- case M.lookup (stroke_color s) predefined_pencolor of - Just (r,g,b,a) -> setSourceRGBA r g b a- Nothing -> setSourceRGBA 0 0 0 1 - setSourceRGBA 0 0 0 1- setLineWidth (stroke_width s) - let BBox (x1,y1) (x2,y2) = strkbbx_bbx sbbox- rectangle x1 y1 (x2-x1) (y2-y1)- stroke- --- | -renderImgBBx_BBoxOnly :: ImageBBox -> Render () -renderImgBBx_BBoxOnly ibbox = do - setSourceRGBA 0 0 0 1- setLineWidth 10- let BBox (x1,y1) (x2,y2) = imgbbx_bbx ibbox- rectangle x1 y1 (x2-x1) (y2-y1)- stroke- ---- | -renderRItem_BBoxOnly :: RItem -> Render () -renderRItem_BBoxOnly (RItemStroke sbbox) = renderStrkBBx_BBoxOnly sbbox-renderRItem_BBoxOnly (RItemImage ibbox _) = renderImgBBx_BBoxOnly ibbox----- | -renderRLayer_BBoxOnly :: RLayer -> Render ()-renderRLayer_BBoxOnly = mapM_ renderRItem_BBoxOnly . view gitems-- - -- mapM_ renderStrkBBx_BBoxOnly . view gstrokes -+ return itm - --- | render only bounding box of a StrokeBBox -renderRPage_BBoxOnly :: RPage -> Render () -renderRPage_BBoxOnly page = do- let dim = view gdimension page- bkg = view gbackground page - lyrs = view glayers page- -- cairoDrawBackground (toPage id page)- renderRBkg_NoPDF (bkg,dim)- mapM_ renderRLayer_BBoxOnly lyrs---------------- NoPDF -- ---------------- | render background without pdf -renderRBkg_NoPDF :: (RBackground,Dimension) -> Render ()-renderRBkg_NoPDF r@(RBkgSmpl _ _ _,_) = renderRBkg r-renderRBkg_NoPDF (RBkgPDF _ _ _ _ _,_) = return ()-- ------------ -- InBBox -- ------------ -- | background drawing in bbox -renderRBkg_InBBox :: Maybe BBox -> (RBackground,Dimension) -> Render ()+renderRBkg_InBBox :: Maybe BBox + -> (RBackground,Dimension) + -> Render (RBackground,Dimension) renderRBkg_InBBox mbbox (b,dim) = do case b of RBkgSmpl _ _ _ -> do @@ -310,10 +225,11 @@ clipBBox mbbox renderRBkg_Buf (b,dim) resetClip+ return (b,dim) -- | render RLayer within BBox after hittest items-renderRLayer_InBBox :: Maybe BBox -> RLayer -> Render () +renderRLayer_InBBox :: Maybe BBox -> RLayer -> Render RLayer renderRLayer_InBBox mbbox layer = do clipBBox mbbox let hittestbbox = case mbbox of @@ -323,6 +239,7 @@ Just bbox -> (hltHittedByBBox bbox . view gitems) layer (mapM_ renderRItem . concatMap unHitted . getB) hittestbbox resetClip+ return layer -----------------------@@ -330,38 +247,34 @@ ----------------------- -- | Background rendering using buffer-renderRBkg_Buf :: (RBackground,Dimension) -> Render ()+renderRBkg_Buf :: (RBackground,Dimension) + -> Render (RBackground,Dimension) renderRBkg_Buf (b,dim) = do case b of RBkgSmpl _ _ msfc -> do case msfc of - Nothing -> renderRBkg (b,dim)+ Nothing -> renderRBkg (b,dim) >> return () Just sfc -> do setSourceSurface sfc 0 0 - -- setOperator OperatorSource- -- setAntialias AntialiasNone paint RBkgPDF _ _ _ _ msfc -> do case msfc of - Nothing -> renderRBkg (b,dim)+ Nothing -> renderRBkg (b,dim) >> return () Just sfc -> do setSourceSurface sfc 0 0 - -- setOperator OperatorSource- -- setAntialias AntialiasNone paint + return (b,dim) -- | -renderRLayer_InBBoxBuf :: Maybe BBox -> RLayer -> Render ()+renderRLayer_InBBoxBuf :: Maybe BBox -> RLayer -> Render RLayer renderRLayer_InBBoxBuf mbbox lyr = do- case view gbuffer lyr of - LyBuf (Just sfc) -> do clipBBox mbbox- setSourceSurface sfc 0 0 - -- setOperator OperatorSource- -- setAntialias AntialiasNone- paint - resetClip - _ -> renderRLayer_InBBox mbbox lyr -+ case view gbuffer lyr of + LyBuf (Just sfc) -> do clipBBox mbbox+ setSourceSurface sfc 0 0 + paint + resetClip + _ -> renderRLayer_InBBox mbbox lyr >> return () + return lyr ------------------- -- update buffer@@ -407,11 +320,6 @@ npgs <- evalStateT (mapM cnstrctRPage_StateT pgs) Nothing return . set gtitle ttl . set gpages (fromList npgs) $ emptyGHoodle -{- --- |-mkAllTPageBBoxMapPDF :: [Page] -> IO [TPageBBoxMapPDF]-mkAllTPageBBoxMapPDF pgs = evalStateT (mapM mkPagePDF pgs) Nothing --} -- | cnstrctRPage_StateT :: Page -> StateT (Maybe Context) IO RPage@@ -429,18 +337,7 @@ nitms <- (mapM cnstrctRItem . view items) lyr return (set gitems nitms emptyRLayer) --{- -- | -mkRLayer :: Layer -> RLayer -mkRLayer lyr = let nitms = map mkRItem . view items $ lyr - in set gitems nitms emptyRLayer- --- | -mkRItem :: Item -> RItem -mkRItem (ItemStroke strk) = RItemStroke (mkStrokeBBox strk)-mkRItem (ItemImage img) = RItemImage (mkImageBBox img) Nothing --} - + -- | cnstrctRBkg_StateT :: Dimension -> Background -> StateT (Maybe Context) IO RBackground@@ -452,9 +349,7 @@ Just _ -> return rbkg Nothing -> do sfc <- liftIO $ createImageSurface FormatARGB32 (floor w) (floor h)- renderWith sfc $ do - -- cairoDrawBkg dim bkg- renderBkg (bkg,dim) + renderWith sfc $ renderBkg (bkg,dim) return rbkg { rbkg_cairosurface = Just sfc} RBkgPDF md mf pn _ _ -> do #ifdef POPPLER
src/Graphics/Hoodle/Render/Background.hs view
@@ -156,8 +156,5 @@ _ -> return () ----- instance RenderOptionable (BackgroundPDFDrawable,Dimension) where
+ src/Graphics/Hoodle/Render/Debug.hs view
@@ -0,0 +1,124 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE OverloadedStrings #-}++-----------------------------------------------------------------------------+-- |+-- Module : Graphics.Hoodle.Render.Debug+-- Copyright : (c) 2011, 2012 Ian-Woo Kim+--+-- License : BSD3+-- Maintainer : Ian-Woo Kim <ianwookim@gmail.com>+-- Stability : experimental+-- Portability : GHC+--+-- collection of rendering routine +--+-----------------------------------------------------------------------------+++module Graphics.Hoodle.Render.Debug+( +-- * dummy rendering + renderRBkg_Dummy +-- * render in bbox using non R-structure +, renderBkg_InBBox+-- * nopdf+, renderRBkg_NoPDF+-- * render only bbox (for debug purpose)+, renderStrkBBx_BBoxOnly+, renderImgBBx_BBoxOnly+, renderRItem_BBoxOnly+, renderRLayer_BBoxOnly+, renderRPage_BBoxOnly+-- * render using buf +, renderRBkg_Buf+, renderRLayer_InBBoxBuf+) where++import Control.Lens +import Control.Monad.State hiding (mapM,mapM_)+import Data.Foldable+import qualified Data.Map as M+import Graphics.Rendering.Cairo+-- from hoodle-platform +import Data.Hoodle.Generic+import Data.Hoodle.Simple+import Data.Hoodle.BBox+import Data.Hoodle.Predefined +#ifdef POPPLER+import qualified Graphics.UI.Gtk.Poppler.Page as PopplerPage+#endif+-- from this package+import Graphics.Hoodle.Render+import Graphics.Hoodle.Render.Type +-- +import Prelude hiding (curry,uncurry,mapM,mapM_,concatMap)++----- +-- Dummy (for testing) +-----++renderRBkg_Dummy :: (RBackground,Dimension) -> Render () +renderRBkg_Dummy (_,Dim w h) = do + setSourceRGBA 1 1 1 1+ rectangle 0 0 w h + fill ++-----------+-- NoPDF -- +-----------++-- | render background without pdf +renderRBkg_NoPDF :: (RBackground,Dimension) -> Render ()+renderRBkg_NoPDF r@(RBkgSmpl _ _ _,_) = renderRBkg r >> return ()+renderRBkg_NoPDF (RBkgPDF _ _ _ _ _,_) = return ()++--------------+-- BBoxOnly --+--------------++-- | render only bounding box of a StrokeBBox +renderStrkBBx_BBoxOnly :: StrokeBBox -> Render () +renderStrkBBx_BBoxOnly sbbox = do + let s = strkbbx_strk sbbox+ case M.lookup (stroke_color s) predefined_pencolor of + Just (r,g,b,a) -> setSourceRGBA r g b a+ Nothing -> setSourceRGBA 0 0 0 1 + setSourceRGBA 0 0 0 1+ setLineWidth (stroke_width s) + let BBox (x1,y1) (x2,y2) = strkbbx_bbx sbbox+ rectangle x1 y1 (x2-x1) (y2-y1)+ stroke+ +-- | +renderImgBBx_BBoxOnly :: ImageBBox -> Render () +renderImgBBx_BBoxOnly ibbox = do + setSourceRGBA 0 0 0 1+ setLineWidth 10+ let BBox (x1,y1) (x2,y2) = imgbbx_bbx ibbox+ rectangle x1 y1 (x2-x1) (y2-y1)+ stroke+ ++-- | +renderRItem_BBoxOnly :: RItem -> Render () +renderRItem_BBoxOnly (RItemStroke sbbox) = renderStrkBBx_BBoxOnly sbbox+renderRItem_BBoxOnly (RItemImage ibbox _) = renderImgBBx_BBoxOnly ibbox+++-- | +renderRLayer_BBoxOnly :: RLayer -> Render ()+renderRLayer_BBoxOnly = mapM_ renderRItem_BBoxOnly . view gitems+++ +-- | render only bounding box of a StrokeBBox +renderRPage_BBoxOnly :: RPage -> Render () +renderRPage_BBoxOnly page = do+ let dim = view gdimension page+ bkg = view gbackground page + lyrs = view glayers page+ renderRBkg_NoPDF (bkg,dim)+ mapM_ renderRLayer_BBoxOnly lyrs++
src/Graphics/Hoodle/Render/Generic.hs view
@@ -14,6 +14,7 @@ module Graphics.Hoodle.Render.Generic where +import Control.Applicative import Control.Lens import Data.Foldable import Graphics.Rendering.Cairo@@ -23,42 +24,39 @@ import Data.Hoodle.Simple -- from this package import Graphics.Hoodle.Render+import Graphics.Hoodle.Render.Debug import Graphics.Hoodle.Render.Type --- import Graphics.Hoodle.Render.Simple--- import Graphics.Hoodle.Render.BBox -- import Prelude hiding (mapM_) +-- | temporary util+passarg :: (Monad m) => (a -> m ()) -> a -> m a+passarg f a = f a >> return a+ -- | class Renderable a where - cairoRender :: a -> Render ()+ cairoRender :: a -> Render a -- | instance Renderable (Background,Dimension) where- cairoRender = renderBkg + cairoRender = passarg renderBkg -- | instance Renderable Stroke where - cairoRender = renderStrk + cairoRender = passarg renderStrk -- | instance Renderable StrokeBBox where- cairoRender = renderStrk . strkbbx_strk+ cairoRender = passarg (renderStrk . strkbbx_strk) -- | instance Renderable RLayer where cairoRender = renderRLayer_InBBox Nothing -{- -- | -instance Renderable RPage where- cairoRender = renderRPage --}---- | class RenderOptionable a where type RenderOption a :: *- cairoRenderOption :: RenderOption a -> a -> Render ()+ cairoRenderOption :: RenderOption a -> a -> Render a -- | instance RenderOptionable (Background,Dimension) where@@ -77,14 +75,14 @@ instance RenderOptionable StrokeBBox where type RenderOption StrokeBBox = StrokeBBoxOption cairoRenderOption DrawFull = cairoRender - cairoRenderOption DrawBoxOnly = renderStrkBBx_BBoxOnly+ cairoRenderOption DrawBoxOnly = passarg renderStrkBBx_BBoxOnly -- | instance RenderOptionable (RBackground,Dimension) where type RenderOption (RBackground,Dimension) = RBkgOpt -- cairoRenderOption :: RBkgOpt -> (RBackground,Dimension) -> Render () cairoRenderOption RBkgDrawPDF = renderRBkg- cairoRenderOption RBkgDrawWhite = renderRBkg_Dummy+ cairoRenderOption RBkgDrawWhite = passarg renderRBkg_Dummy cairoRenderOption RBkgDrawBuffer = renderRBkg_Buf cairoRenderOption (RBkgDrawPDFInBBox mbbox) = renderRBkg_InBBox mbbox @@ -92,14 +90,13 @@ instance RenderOptionable RLayer where type RenderOption RLayer = StrokeBBoxOption cairoRenderOption DrawFull = cairoRender- cairoRenderOption DrawBoxOnly = renderRLayer_BBoxOnly + cairoRenderOption DrawBoxOnly = passarg renderRLayer_BBoxOnly -- | instance RenderOptionable (InBBox RLayer) where type RenderOption (InBBox RLayer) = InBBoxOption- -- cairoRenderOption :: RLyrOpt -> RLayer -> Render () cairoRenderOption (InBBoxOption mbbox) (InBBox lyr) = - renderRLayer_InBBoxBuf mbbox lyr+ InBBox <$> renderRLayer_InBBoxBuf mbbox lyr -- | cairoOptionPage :: ( RenderOptionable (b,Dimension)@@ -107,10 +104,11 @@ , Foldable s) => (RenderOption (b,Dimension), RenderOption a) -> GPage b s a - -> Render ()+ -> Render (GPage b s a) cairoOptionPage (optb,opta) p = do cairoRenderOption optb (view gbackground p, view gdimension p) mapM_ (cairoRenderOption opta) (view glayers p)+ return p -- | instance ( RenderOptionable (b,Dimension)@@ -120,62 +118,15 @@ type RenderOption (GPage b s a) = (RenderOption (b,Dimension), RenderOption a) cairoRenderOption = cairoOptionPage -{- -- | -instance RenderOptionable (InBBox RLayer) where- type RenderOption (InBBox RLayer) = InBBoxOption - cairoRenderOption (InBBoxOption mbbox) (InBBox layer) - = renderRLayer_InBBox mbbox layer --}---- | instance RenderOptionable (InBBox RPage) where type RenderOption (InBBox RPage) = InBBoxOption cairoRenderOption (InBBoxOption mbbox) (InBBox page) = do - cairoRenderOption (RBkgDrawPDFInBBox mbbox) (view gbackground page, view gdimension page) + let mbboxtemp = mbbox >>= \bbox -> return (inflate bbox 2.0) -- this is due to a thin unexpected grey margin. + cairoRenderOption (RBkgDrawPDFInBBox mbboxtemp) (view gbackground page, view gdimension page) mapM_ (renderRLayer_InBBox mbbox) . view glayers $ page ----{--instance Renderable (BackgroundPDFDrawable,Dimension) where- cairoRender = cairoRenderBackgroundPDFDrawable--}--{---- | -cairoLayer :: (Renderable a, Foldable s) => GLayer buf s a -> Render ()-cairoLayer = mapM_ cairoRender . gstrokes ---- | -instance (Renderable a, Foldable s) => Renderable (GLayer s a) where- cairoRender = cairoLayer ---- | -cairoPage :: (Renderable (b,Dimension), Renderable a, Foldable s) => - GPage b s a -> Render ()-cairoPage p = do - cairoRender (gbackground p,gdimension p)- mapM_ cairoRender (glayers p)---- | -instance (Renderable (b,Dimension), Renderable a, Foldable s) - => Renderable (GPage b s a) where- cairoRender = cairoPage --}+ return (InBBox page) -{---- | -cairoOptionLayer :: (RenderOptionable a, Foldable s) => - RenderOption a -> GLayer s a -> Render () -cairoOptionLayer opt = mapM_ (cairoRenderOption opt) . gstrokes ---- | -instance (RenderOptionable a, Foldable s) => - RenderOptionable (GLayer s a) where- type RenderOption (GLayer s a) = RenderOption a- cairoRenderOption = cairoOptionLayer --}
src/Graphics/Hoodle/Render/Util/HitTest.hs view
@@ -70,13 +70,25 @@ -- | Do two bounding boxes intersect with each other? -- previously, hitTestBBoxBBox do2BBoxIntersect :: BBox -> BBox -> Bool -do2BBoxIntersect b1@(BBox (ulx1,uly1) (lrx1,lry1)) b2@(BBox (ulx2,uly2) (lrx2,lry2))- = isPointInBBox b2 (ulx1,uly1)+do2BBoxIntersect b1@(BBox (ulx1,uly1) (lrx1,lry1)) b2@(BBox (ulx2,uly2) (lrx2,lry2)) = p1 && p2+ where p1 = ulx1 <= ulx2 && ulx2 <= lrx1 + || ulx1 <= lrx2 && lrx2 <= lrx1+ || ulx2 <= ulx1 && ulx1 <= lrx2+ || ulx2 <= lrx1 && lrx1 <= lrx2+ p2 = uly1 <= uly2 && uly2 <= lry1 + || uly1 <= lry2 && lry2 <= lry1 + || uly2 <= uly1 && uly1 <= lry2 + || uly2 <= lry1 && lry1 <= lry2+ + + {- isPointInBBox b2 (ulx1,uly1) || isPointInBBox b2 (lrx1,lry1) || isPointInBBox b2 (lrx1,uly1) || isPointInBBox b2 (ulx1,lry1)- || isPointInBBox b1 (lrx2,lry2) || isPointInBBox b1 (ulx2,uly2)+ || isPointInBBox b1 (lrx2,lry2)+ || isPointInBBox b1 (lrx2,uly2)+ || isPointInBBox b1 (ulx2,lry2) -} -- | is the second bbox inside the first bbox? -- previously, hitTestInsideBBox