packages feed

threadscope-0.1: SaveAsPNG.hs

module SaveAsPNG
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

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

saveAsPNG :: ViewerState -> IO ()
saveAsPNG 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)
        withImageSurface C.FormatARGB32 (fromIntegral w) (fromIntegral h) 
         $ \ surface ->
              do renderWith surface r
                 surfaceWriteToPNG surface (fn++".png")
        return ()
    
-------------------------------------------------------------------------------