module Graphics.Hoodle.Render.Debug
(
renderRBkg_Dummy
, renderRBkg_NoPDF
, renderStrkBBx_BBoxOnly
, renderImgBBx_BBoxOnly
, renderRItem_BBoxOnly
, renderRLayer_BBoxOnly
, renderRPage_BBoxOnly
, 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 qualified Graphics.Rendering.Cairo as Cairo
import Data.Hoodle.Generic
import Data.Hoodle.Simple
import Data.Hoodle.BBox
import Data.Hoodle.Predefined
import Graphics.Hoodle.Render
import Graphics.Hoodle.Render.Highlight
import Graphics.Hoodle.Render.Type
import Prelude hiding (curry,uncurry,mapM,mapM_,concatMap)
renderRBkg_Dummy :: RenderCache -> (RBackground,Dimension,Maybe Xform4Page) -> Cairo.Render ()
renderRBkg_Dummy _ (_,Dim w h,_) = do
Cairo.setSourceRGBA 1 1 1 1
Cairo.rectangle 0 0 w h
Cairo.fill
renderRBkg_NoPDF :: RenderCache -> (RBackground,Dimension,Maybe Xform4Page) -> Cairo.Render ()
renderRBkg_NoPDF cache r@(RBkgSmpl _ _ _,_,_) = renderRBkg cache r >> return ()
renderRBkg_NoPDF _ (RBkgPDF _ _ _ _ _,_,_) = return ()
renderRBkg_NoPDF _ (RBkgEmbedPDF _ _ _,_,_) = return ()
renderStrkBBx_BBoxOnly :: BBoxed Stroke -> Cairo.Render ()
renderStrkBBx_BBoxOnly sbbox = do
let s = bbxed_content sbbox
case M.lookup (stroke_color s) predefined_pencolor of
Just (r,g,b,a) -> Cairo.setSourceRGBA r g b a
Nothing -> Cairo.setSourceRGBA 0 0 0 1
Cairo.setSourceRGBA 0 0 0 1
Cairo.setLineWidth (stroke_width s)
let BBox (x1,y1) (x2,y2) = getBBox sbbox
Cairo.rectangle x1 y1 (x2x1) (y2y1)
Cairo.stroke
renderImgBBx_BBoxOnly :: BBoxed Image -> Cairo.Render ()
renderImgBBx_BBoxOnly ibbox = do
Cairo.setSourceRGBA 0 0 0 1
Cairo.setLineWidth 10
let BBox (x1,y1) (x2,y2) = getBBox ibbox
Cairo.rectangle x1 y1 (x2x1) (y2y1)
Cairo.stroke
renderSVGBBx_BBoxOnly :: BBoxed SVG -> Cairo.Render ()
renderSVGBBx_BBoxOnly svg = do
Cairo.setSourceRGBA 0 0 0 1
Cairo.setLineWidth 10
let BBox (x1,y1) (x2,y2) = getBBox svg
Cairo.rectangle x1 y1 (x2x1) (y2y1)
Cairo.stroke
renderLnkBBx_BBoxOnly :: BBoxed Link -> Cairo.Render ()
renderLnkBBx_BBoxOnly lnk = do
Cairo.setSourceRGBA 0 0 0 1
Cairo.setLineWidth 10
let BBox (x1,y1) (x2,y2) = getBBox lnk
Cairo.rectangle x1 y1 (x2x1) (y2y1)
Cairo.stroke
renderRItem_BBoxOnly :: RenderCache -> RItem -> Cairo.Render ()
renderRItem_BBoxOnly _ (RItemStroke sbbox) = renderStrkBBx_BBoxOnly sbbox
renderRItem_BBoxOnly _ (RItemImage ibbox _) = renderImgBBx_BBoxOnly ibbox
renderRItem_BBoxOnly _ (RItemSVG svg _) = renderSVGBBx_BBoxOnly svg
renderRItem_BBoxOnly _ (RItemLink lnk _) = renderLnkBBx_BBoxOnly lnk
renderRItem_BBoxOnly _ itm@(RItemAnchor anc _) = (renderHltBBox . getBBox) anc
renderRLayer_BBoxOnly :: RenderCache -> RLayer -> Cairo.Render ()
renderRLayer_BBoxOnly cache = mapM_ (renderRItem_BBoxOnly cache) . view gitems
renderRPage_BBoxOnly :: RenderCache -> RPage -> Cairo.Render ()
renderRPage_BBoxOnly cache page = do
let dim = view gdimension page
bkg = view gbackground page
lyrs = view glayers page
renderRBkg_NoPDF cache (bkg,dim,Nothing)
mapM_ (renderRLayer_BBoxOnly cache) lyrs