packages feed

hxournal-0.5: lib/Application/HXournal/ModelAction/Pen.hs

{-# LANGUAGE OverloadedStrings #-}

module Application.HXournal.ModelAction.Pen where

import Application.HXournal.ModelAction.Page
import Graphics.Xournal.Type
import Graphics.Xournal.Type.Map
import Application.HXournal.Type.Canvas
import Application.HXournal.Type.Enum
import Data.Foldable
import Data.Maybe
import qualified Data.Map as M
import qualified Data.IntMap as IM
import Control.Category
import Data.Sequence hiding (take, drop)
import Data.Label
import Prelude hiding ((.), id)
import Data.Strict.Tuple hiding (uncurry)
import Text.Xournal.Type

addPDraw :: PenInfo -> XournalBBoxMap -> Int -> Seq (Double,Double) 
            -> (XournalBBoxMap,BBox)
addPDraw pinfo xoj pgnum pdraw = 
  let pcolor = get penColor pinfo
      pcolname = fromJust (M.lookup pcolor penColorNameMap)
      pwidth = get penWidth pinfo
      currpage = getPageFromXojBBoxMap  pgnum xoj
      currlayer = case IM.lookup 0 (pbm_layers currpage) of
                    Nothing -> error "something wrong in addPDraw"
                    Just l -> l
      newstroke = Stroke { stroke_tool = "pen" 
                         , stroke_color = pcolname 
                         , stroke_width = pwidth
                         , stroke_data = map (uncurry (:!:)) . toList $ pdraw
                         } 
      newstrokebbox = mkStrokeBBoxFromStroke newstroke
      newlayerbbox =  currlayer {layerbbox_strokes = layerStrokes currlayer 
                                                    ++ [newstrokebbox] }
      newpagebbox = currpage { 
        pbm_layers = IM.adjust (const newlayerbbox) 0 (pbm_layers currpage) 
      }

      newxojbbox = xoj { 
        xbm_pages = IM.adjust (const newpagebbox) pgnum (xbm_pages xoj) 
      }
  in  (newxojbbox,strokebbox_bbox newstrokebbox)