xturtle 0.1.12 → 0.1.13
raw patch · 5 files changed
+21/−7 lines, 5 files
Files
- src/Graphics/X11/Turtle.hs +4/−0
- src/Graphics/X11/Turtle/Input.hs +6/−2
- src/Graphics/X11/Turtle/Move.hs +8/−4
- src/Graphics/X11/Turtle/State.hs +2/−0
- xturtle.cabal +1/−1
src/Graphics/X11/Turtle.hs view
@@ -47,6 +47,7 @@ circle, home, undo,+ silentundo, sleep, flush, @@ -210,6 +211,9 @@ undo :: Turtle -> IO () undo t = info t undonum >>= flip replicateM_ (input t Undo)++silentundo :: Turtle -> Int -> IO ()+silentundo t n = input t $ SilentUndo n sleep :: Turtle -> Int -> IO () sleep t = input t . Sleep
src/Graphics/X11/Turtle/Input.hs view
@@ -17,6 +17,7 @@ | PutImage FilePath Double Double | Undo | Undonum Int+ | SilentUndo Int | Clear | Sleep Int | Flush@@ -42,6 +43,9 @@ turtles [] ts0 (Undo : tis) = ts0 : turtles [] ts0 tis turtles (tsb : tsbs) _ (Undo : tis) = let ts1 = tsb{undo = True} in ts1 : turtles tsbs ts1 tis+turtles tsbs _ (SilentUndo n : tis) = let+ ts1_ : tsbs' = drop (n - 1) tsbs+ ts1 = ts1_{ silentundo = Just n } in ts1 : turtles tsbs' ts1 tis turtles tsbs ts0 (Forward len : tis) = case position ts0 of Center x0 y0 -> let x = x0 + len * cos (direction ts0)@@ -60,8 +64,8 @@ turtles _ _ [] = error "no more input" reset :: TurtleState -> TurtleState-reset t = t{draw = Nothing, clear = False, undo = False, undonum = 1,- sleep = Nothing, flush = False}+reset t = t{draw = Nothing, clear = False, undo = False, silentundo = Nothing,+ undonum = 1, sleep = Nothing, flush = False} set :: TurtleState -> Maybe SVG -> TurtleState set t drw = t{draw = drw, drawed = maybe id (:) drw $ drawed t}
src/Graphics/X11/Turtle/Move.hs view
@@ -43,9 +43,9 @@ import qualified Text.XML.YJSVG as S(topleft) import Control.Concurrent(threadDelay)-import Control.Monad(when, unless, forM_)+import Control.Monad(when, unless, forM_, replicateM_) import Control.Monad.Tools(unlessM)-import Data.Maybe(isJust)+import Data.Maybe(isJust, isNothing) -------------------------------------------------------------------------------- @@ -59,7 +59,10 @@ when (isJust $ draw t0) $ do unlessM (undoLayer l) $ clearLayer l >> redraw when (visible t1) $ drawTtl (direction t0) $ position t0- when (visible t1) $ do+ case silentundo t1 of+ Just n -> replicateM_ n (undoLayer l) >> clearLayer l >> redraw+ _ -> return ()+ when (visible t1 && isNothing (silentundo t1)) $ do forM_ (directions t0 t1) $ \dir -> fl $ drawTtl dir (position t0) >> threadDelay (interval t0) forM_ (positions w h t0 t1) $ \p -> fl $@@ -67,7 +70,8 @@ fl $ drawTtl (direction t1) $ position t1 when (visible t0 && not (visible t1)) $ fl $ clearCharacter c when (clear t1) $ fl $ clearLayer l- unless (undo t1) $ fl $ maybe (return ()) (drawSVG f l) (draw t1)+ unless (undo t1 || isJust (silentundo t1)) $+ fl $ maybe (return ()) (drawSVG f l) (draw t1) where fl = flushField f $ stepbystep t0 redraw = mapM_ (drawSVG f l) $ reverse $ drawed t1
src/Graphics/X11/Turtle/State.hs view
@@ -22,6 +22,7 @@ clear :: Bool, undo :: Bool, undonum :: Int,+ silentundo :: Maybe Int, sleep :: Maybe Int, flush :: Bool, fill :: Bool,@@ -51,6 +52,7 @@ clear = False, undo = False, undonum = 0,+ silentundo = Nothing, sleep = Nothing, flush = False, fill = False,
xturtle.cabal view
@@ -2,7 +2,7 @@ cabal-version: >= 1.6 name: xturtle-version: 0.1.12+version: 0.1.13 stability: experimental author: Yoshikuni Jujo <PAF01143@nifty.ne.jp> maintainer: Yoshikuni Jujo <PAF01143@nifty.ne.jp>