xturtle 0.1.23 → 0.1.24
raw patch · 5 files changed
+26/−6 lines, 5 files
Files
- src/Graphics/X11/Turtle.hs +9/−1
- src/Graphics/X11/Turtle/Input.hs +4/−2
- src/Graphics/X11/Turtle/Move.hs +3/−0
- src/Graphics/X11/Turtle/State.hs +9/−2
- xturtle.cabal +1/−1
src/Graphics/X11/Turtle.hs view
@@ -35,6 +35,7 @@ runInputs, getSVG, field,+ waitTurtle, -- ** move turtle forward,@@ -107,7 +108,8 @@ import Text.XML.YJSVG(SVG(..), Position(..), Color(..)) import qualified Text.XML.YJSVG as S(center, topleft) -import Control.Concurrent(killThread, newChan, writeChan, getChanContents)+import Control.Concurrent(+ killThread, newChan, writeChan, readChan, getChanContents) import Control.Monad(replicateM_, zipWithM_) import Control.Arrow((&&&)) import Data.IORef(IORef, newIORef, readIORef)@@ -221,6 +223,12 @@ flush :: Turtle -> IO () flush = (`input` Flush)++waitTurtle :: Turtle -> IO ()+waitTurtle t = do+ c <- newChan+ input t $ FinishSign c+ readChan c --------------------------------------------------------------------------------
src/Graphics/X11/Turtle/Input.hs view
@@ -2,6 +2,7 @@ import Graphics.X11.Turtle.State(TurtleState(..), initTurtleState, makeShape) import Text.XML.YJSVG(SVG(..), Color(..), Position(..))+import Control.Concurrent.Chan (Chan) -------------------------------------------------------------------------------- @@ -34,7 +35,7 @@ | PositionStep (Maybe Double) | DirectionStep (Maybe Double) | Degrees Double- deriving (Show, Read)+ | FinishSign (Chan ()) turtleSeries :: [TurtleInput] -> [TurtleState] turtleSeries tis = let ts0 = initTurtleState in ts0 : ts0 : turtles [] ts0 tis@@ -65,7 +66,7 @@ reset :: TurtleState -> TurtleState reset t = t{draw = Nothing, clear = False, undo = False, silentundo = Nothing,- undonum = 1, sleep = Nothing, flush = False}+ undonum = 1, sleep = Nothing, flush = False, finishSign = Nothing} set :: TurtleState -> Maybe SVG -> TurtleState set t drw = t{draw = drw, drawed = maybe id (:) drw $ drawed t}@@ -105,4 +106,5 @@ nextTurtle t (PositionStep ps) = (reset t){positionStep = ps} nextTurtle t (DirectionStep ds) = (reset t){directionStep = ds} nextTurtle t (Degrees ds) = (reset t){degrees = ds}+nextTurtle t (FinishSign c) = (reset t){finishSign = Just c} nextTurtle _ _ = error "not defined"
src/Graphics/X11/Turtle/Move.hs view
@@ -47,9 +47,12 @@ import Control.Monad.Tools(unlessM) import Data.Maybe(isJust, isNothing) +import Control.Concurrent.Chan(writeChan)+ -------------------------------------------------------------------------------- moveTurtle :: Field -> Character -> Layer -> TurtleState -> TurtleState -> IO ()+moveTurtle _ _ _ _ TurtleState{finishSign = Just c} = writeChan c () moveTurtle _ _ _ _ TurtleState{sleep = Just t} = threadDelay $ 1000 * t moveTurtle f _ _ _ TurtleState{flush = True} = flushField f True $ return () moveTurtle f c l t0 t1 = do
src/Graphics/X11/Turtle/State.hs view
@@ -4,6 +4,7 @@ import Text.XML.YJSVG(Position(..), SVG(Fill), Color(RGB)) import Data.Tuple.Tools(rotate) import Control.Arrow((***))+import Control.Concurrent.Chan (Chan) data TurtleState = TurtleState { position :: Position,@@ -32,8 +33,11 @@ positionStep :: Maybe Double, directionStep :: Maybe Double,- interval :: Int}+ interval :: Int, + finishSign :: Maybe (Chan ())+ }+ initTurtleState :: TurtleState initTurtleState = TurtleState { position = Center 0 0,@@ -62,7 +66,10 @@ positionStep = Just 10, directionStep = Just $ pi / 18,- interval = 10000}+ interval = 10000,++ finishSign = Nothing+ } makeShape :: TurtleState -> Double -> Position -> [Position] makeShape ts dir_ pos = (mkPos . move . rotate dir . resize) `map` shape ts
xturtle.cabal view
@@ -2,7 +2,7 @@ cabal-version: >= 1.6 name: xturtle-version: 0.1.23+version: 0.1.24 stability: experimental author: Yoshikuni Jujo <PAF01143@nifty.ne.jp> maintainer: Yoshikuni Jujo <PAF01143@nifty.ne.jp>