packages feed

threadscope-0.1: SaveAsPDF.hs

module SaveAsPDF
where

-- Imports from Haskell library
import Control.Monad
import Data.IORef

-- Imports for GTK/Glade
import Graphics.UI.Gtk
import Graphics.Rendering.Cairo 
import qualified Graphics.Rendering.Cairo as C

-- Imports for ThreadScope
import EventsWindow
import Timeline.Render
import State
import Timeline
import Traces

-------------------------------------------------------------------------------

saveAsPDF :: ViewerState -> IO ()
saveAsPDF state@ViewerState{..} 
  = liftIO $ do
    scaleValue <- readIORef scaleIORef  
    hadj_value0 <- adjustmentGetValue timelineAdj
    let hadj_value = toWholePixels scaleValue hadj_value0
    mb_hecs <- readIORef hecsIORef
    Just fn <- readIORef filenameIORef
    case mb_hecs of
      Nothing   -> return ()
      Just hecs -> do
        (w, h) <- widgetGetSize timelineDrawingArea
        traces    <- getViewTraces state
        cursorpos <- getCursorLine state
        let params = ViewParameters w h traces hadj_value scaleValue 1 False
                                    False
        let r = renderTraces state params traces hecs (Rectangle 0 0 w h)
        withPDFSurface (fn++".pdf") (fromIntegral w) (fromIntegral h) (flip renderWith $ r)
        return ()
    
-------------------------------------------------------------------------------