module Graphics.Xournal.Render.BBoxMapPDF where
import Graphics.Xournal.Render.Type
import Data.Xournal.Simple
import Data.Xournal.Generic
import Data.Xournal.Map
import Data.Xournal.BBox
import Data.IntMap
import Data.ByteString hiding (putStrLn, empty)
import qualified Data.ByteString.Char8 as C hiding (empty)
#ifdef POPPLER
import qualified Graphics.UI.Gtk.Poppler.Document as Poppler
#endif
import Graphics.Rendering.Cairo
data BackgroundPDFDrawable =
BkgPDFSolid { bkgpdf_color :: ByteString
, bkgpdf_style :: ByteString
}
| BkgPDFPDF { bkgpdf_domain :: Maybe ByteString
, bkgpdf_filename :: Maybe ByteString
, bkgpdf_pageno :: Int
#ifdef POPPLER
, bkgpdf_popplerpage :: Maybe Poppler.Page
#else
, bkgpdf_popplerpage :: Maybe ()
#endif
, bkgpdf_cairosurface :: Maybe Surface
}
data BkgPDFOption = DrawBkgPDF | DrawWhite | DrawBuffer
type TPageBBoxMapPDF = TPageBBoxMapBkg BackgroundPDFDrawable
type TXournalBBoxMapPDF = TXournalBBoxMapBkg BackgroundPDFDrawable
type TTempPageSelectPDF = GPage BackgroundPDFDrawable (TLayerSelectInPage []) TLayerBBox
type TTempXournalSelectPDF = GSelect (IntMap TPageBBoxMapPDF) (Maybe (Int, TTempPageSelectPDF))
instance GBackgroundable BackgroundPDFDrawable where
gFromBackground = bkgPDFFromBkg
gToBackground = bkgFromBkgPDF
bkgFromBkgPDF :: BackgroundPDFDrawable -> Background
bkgFromBkgPDF (BkgPDFSolid c s) = Background "solid" c s
bkgFromBkgPDF (BkgPDFPDF d f n _ _ ) = BackgroundPdf "pdf" d f n
bkgPDFFromBkg :: Background -> BackgroundPDFDrawable
bkgPDFFromBkg (Background _t c s) = BkgPDFSolid c s
bkgPDFFromBkg (BackgroundPdf _t md mf pn) = BkgPDFPDF md mf pn Nothing Nothing
emptyTXournalBBoxMapPDF :: TXournalBBoxMapPDF
emptyTXournalBBoxMapPDF = GXournal "" empty
tlayerBBoxFromTLayerSelect :: TLayerSelect TLayerBBox -> TLayerBBox
tlayerBBoxFromTLayerSelect l =
case unTEitherAlterHitted (gstrokes l) of
Left strs -> GLayer strs
Right alist -> GLayer . Prelude.concat $ interleave id unHitted alist
tpageBBoxMapPDFFromTTempPageSelectPDF :: TTempPageSelectPDF -> TPageBBoxMapPDF
tpageBBoxMapPDFFromTTempPageSelectPDF p =
let TLayerSelectInPage s others = glayers p
s' = tlayerBBoxFromTLayerSelect s
in GPage (gdimension p) (gbackground p) (gFromList (s':others))
ttempPageSelectPDFFromTPageBBoxMapPDF :: TPageBBoxMapPDF -> TTempPageSelectPDF
ttempPageSelectPDFFromTPageBBoxMapPDF p =
let (x:xs) = gToList (glayers p)
l = GLayer . TEitherAlterHitted . Left . gToList . gstrokes $ x
in GPage (gdimension p) (gbackground p) (TLayerSelectInPage l xs)