packages feed

xournal-render-0.2.0.0: src/Graphics/Xournal/Type/Map.hs

{-# LANGUAGE TypeFamilies #-}

module Graphics.Xournal.Type.Map where

import qualified Data.IntMap as M
import Text.Xournal.Type
import Graphics.Xournal.Type 

data XournalBBoxMap = XournalBBoxMap { xbm_pages :: M.IntMap PageBBoxMap } 

data PageBBoxMap = PageBBoxMap { pbm_dim :: Dimension
                               , pbm_bkg :: Background
                               , pbm_layers :: M.IntMap LayerBBox }


instance IPage PageBBoxMap where
  type TLayer PageBBoxMap = LayerBBox
  pageDim = pbm_dim 
  pageBkg = pbm_bkg
  pageLayers = M.elems . pbm_layers
  
instance IXournal XournalBBoxMap where
  type TPage XournalBBoxMap = PageBBoxMap 
  xournalPages = M.elems . xbm_pages 
  

mkXournalBBoxMapFromXournalBBox :: XournalBBox -> XournalBBoxMap 
mkXournalBBoxMapFromXournalBBox xoj = 
  XournalBBoxMap { xbm_pages = M.map mkPageBBoxMapFromPageBBox 
                             . M.fromList 
                             $ zip [0..] (xojbbox_pages xoj) }  

mkPageBBoxMapFromPageBBox :: PageBBox -> PageBBoxMap
mkPageBBoxMapFromPageBBox page = 
  PageBBoxMap { pbm_dim = pagebbox_dim page
              , pbm_bkg = pagebbox_bkg page
              , pbm_layers = M.fromList $ zip [0..] (pagebbox_layers page) }

mkXournalBBoxMapFromXournal :: Xournal -> XournalBBoxMap 
mkXournalBBoxMapFromXournal = mkXournalBBoxMapFromXournalBBox . mkXournalBBoxFromXournal 

xournalFromXournalBBoxMap :: XournalBBoxMap -> Xournal 
xournalFromXournalBBoxMap xoj = 
  emptyXournal { xoj_pages = map pageFromPageBBoxMap (xournalPages xoj) } 
  
pageFromPageBBoxMap :: PageBBoxMap -> Page 
pageFromPageBBoxMap page = 
  let pbox  = PageBBox { pagebbox_dim = pbm_dim page
                       , pagebbox_bkg = pbm_bkg page
                       , pagebbox_layers = pageLayers page }
  in pageFromPageBBox pbox