xdot 0.2.4.9 → 0.3
raw patch · 2 files changed
+37/−35 lines, 2 filesdep +gtk3dep +transformersdep −gtkPVP ok
version bump matches the API change (PVP)
Dependencies added: gtk3, transformers
Dependencies removed: gtk
API changes (from Hackage documentation)
Files
- Demo.hs +32/−31
- xdot.cabal +5/−4
Demo.hs view
@@ -2,6 +2,7 @@ import System.Environment import Control.Monad+import Control.Monad.Trans.Class import Data.IORef import qualified Data.Text.Lazy.IO as L@@ -56,22 +57,26 @@ , containerChild := canvas ] - onExpose canvas $ const $ do+ on canvas draw $ do redraw canvas state- return True - onMotionNotify canvas False $ \e -> do- modifyIORef state (\s -> s {mousePos = (E.eventX e, E.eventY e)})- tick canvas state- return True+ on canvas motionNotifyEvent $ do+ (x,y) <- eventCoordinates+ lift $ do+ modifyIORef state (\s -> s {mousePos = (x,y)})+ tick canvas state+ return True - onButtonPress canvas $ \e -> do- when (E.eventButton e == LeftButton && E.eventClick e == SingleClick) $- click state dg- return True+ on canvas buttonPressEvent $ do+ button <- eventButton+ eClick <- eventClick+ lift $ do+ when (button == LeftButton && eClick == SingleClick) $+ click state dg+ return True widgetShowAll window- onDestroy window mainQuit+ on window destroyEvent $ lift $ mainQuit >> return True mainGUI click :: IORef State -> R.DotGraph String -> IO ()@@ -104,31 +109,27 @@ s <- readIORef state unless (oldHover == hover s) $ widgetQueueDraw canvas -redraw :: WidgetClass w => w -> IORef State -> IO ()+redraw :: WidgetClass w => w -> IORef State -> Render () redraw canvas state = do- s <- readIORef state- E.Rectangle _ _ rw rh <- widgetGetAllocation canvas+ s <- liftIO $ readIORef state+ rw <- liftIO $ widgetGetAllocatedWidth canvas+ rh <- liftIO $ widgetGetAllocatedHeight canvas let (ops, size'@(_,_,sw,sh)) = objects s - boundingBoxes <- render canvas $ do- -- Proportional scaling- let scalex = min (fromIntegral rw / sw) (fromIntegral rh / sh)- scaley = scalex- offsetx = 0.5 * fromIntegral rw- offsety = 0.5 * fromIntegral rh- save- translate offsetx offsety- scale scalex scaley+ -- Proportional scaling+ let scalex = min (fromIntegral rw / sw) (fromIntegral rh / sh)+ scaley = scalex+ offsetx = 0.5 * fromIntegral rw+ offsety = 0.5 * fromIntegral rh+ save+ translate offsetx offsety+ scale scalex scaley - result <- drawAll (hover s) size' ops+ result <- drawAll (hover s) size' ops - restore- return $ map (\(o, (x,y,w,h)) -> (o, (x*scalex+offsetx,y*scaley+offsety,w*scalex,h*scaley))) result+ restore - modifyIORef state (\s' -> s' {bounds = boundingBoxes})+ let boundingBoxes = map (\(o, (x,y,w,h)) -> (o, (x*scalex+offsetx,y*scaley+offsety,w*scalex,h*scaley))) result -render :: WidgetClass w => w -> Render b -> IO b-render canvas r = do- win <- widgetGetDrawWindow canvas- renderWithDrawable win r+ liftIO $ modifyIORef state (\s' -> s' {bounds = boundingBoxes})
xdot.cabal view
@@ -1,5 +1,5 @@ name: xdot-version: 0.2.4.9+version: 0.3 license: BSD3 license-file: LICENSE category: Graphs, Graphics@@ -7,7 +7,7 @@ build-type: Simple author: Dennis Felsing <dennis@felsin9.de> maintainer: Dennis Felsing <dennis@felsin9.de>-copyright: Dennis Felsing 2012-2013+copyright: Dennis Felsing 2012-2016 synopsis: Parse Graphviz xdot files and interactively view them using GTK and Cairo description: Parse Graphviz xdot files and interactively view them using GTK and Cairo.@@ -30,7 +30,7 @@ Build-depends: base == 4.*, mtl >= 2.0 && < 2.3, cairo >= 0.12 && < 0.14,- gtk >= 0.12 && < 0.15,+ gtk3 >= 0.12 && < 0.15, graphviz >= 2999.16 && < 2999.19, text >= 0.11 && < 1.3, polyparse >= 1.8 && < 1.12@@ -43,8 +43,9 @@ Build-depends: base, cairo, graphviz,- gtk,+ gtk3, text,+ transformers, -- ourselves xdot