packages feed

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 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