packages feed

xturtle 0.1.0 → 0.1.2

raw patch · 6 files changed

+52/−21 lines, 6 files

Files

src/Graphics/X11/Turtle.hs view
@@ -32,6 +32,10 @@ 	home, 	clear, 	undo,+	sleep,+	flushoff,+	flushon,+	flush,  	-- * change turtle state 	shape,@@ -93,7 +97,7 @@ --------------------------------------------------------------------------------  xturtleVersion :: (Int, String)-xturtleVersion = (46, "0.1.0")+xturtleVersion = (48, "0.1.2")  -------------------------------------------------------------------------------- @@ -138,7 +142,7 @@ 	return t  killTurtle :: Turtle -> IO ()-killTurtle t = flushField (field t) $ do+killTurtle t = flushField (field t) True $ do 	clearLayer $ layer t 	clearCharacter $ character t 	killThread $ thread t@@ -193,6 +197,16 @@ undo :: Turtle -> IO () undo t = readIORef (stateIndex t) 	>>= flip replicateM_ (input t Undo) . undonum . (states t !!)++sleep :: Turtle -> Int -> IO ()+sleep t = input t . Sleep++flushoff, flushon :: Turtle -> IO ()+flushoff = (`input` SetFlush False)+flushon = (`input` SetFlush True)++flush :: Turtle -> IO ()+flush = (`input` Flush)  -------------------------------------------------------------------------------- 
src/Graphics/X11/Turtle/Field.hs view
@@ -52,7 +52,7 @@ 	makeCharacter, setCharacter) import Text.XML.YJSVG(Color(..)) -import Control.Monad(forever, replicateM)+import Control.Monad(forever, replicateM, when) import Control.Monad.Tools(doWhile_, doWhile, whenM) import Control.Arrow((***)) import Control.Concurrent(@@ -154,7 +154,7 @@  processEvent :: Field -> XEventPtr -> Event -> IO Bool processEvent f e ev = case ev of-	ExposeEvent{} -> flushField f $ do+	ExposeEvent{} -> flushField f True $ do 		windowSize (fDisplay f) (fWindow f) >>= writeIORef (fSize f) 		redrawLayers $ fLayers f 		return True@@ -205,14 +205,15 @@ 	modifyIORef (fRunning f) (tid :) 	return tid -flushField :: Field -> IO a -> IO a-flushField f act = do+flushField :: Field -> Bool -> IO a -> IO a+flushField f real act = do 	readChan $ fLock f 	ret <- act-	(w, h) <- readIORef $ fSize f-	copyArea (fDisplay f) (topBuf $ fBufs f) (fWindow f)-		(gcForeground $ fGCs f) 0 0 w h 0 0-	flush $ fDisplay f+	when real $ do+		(w, h) <- readIORef $ fSize f+		copyArea (fDisplay f) (topBuf $ fBufs f) (fWindow f)+			(gcForeground $ fGCs f) 0 0 w h 0 0+		flush $ fDisplay f 	writeChan (fLock f) () 	return ret 
src/Graphics/X11/Turtle/Input.hs view
@@ -43,6 +43,9 @@ 	| Clear 	| Forward Double 	| TurnLeft Double+	| Sleep Int+	| SetFlush Bool+	| Flush 	deriving (Show, Read)  turtleSeries :: IO (Chan TurtleInput, [TurtleInput], [TurtleState])@@ -101,8 +104,12 @@ 	where txt = Text (uncurry Center $ position t) sz (pencolor t) fnt str nextTurtle t (Bgcolor c) = (clearState t){ 	bgcolor = c, drawed = init (drawed t) ++ [Fill c]}-nextTurtle t (Clear) = (clearState t){clear = True, drawed = [last $ drawed t]}+nextTurtle t Clear = (clearState t){clear = True, drawed = [last $ drawed t]}+nextTurtle t (Sleep time) = (clearState t){sleep = Just time}+nextTurtle t (SetFlush ss) = (clearState t){stepbystep = ss}+nextTurtle t Flush = (clearState t){flush = True} nextTurtle _ _ = error "not defined"  clearState :: TurtleState -> TurtleState-clearState t = t{undonum = 1, undo = False, clear = False, draw = Nothing}+clearState t = t{undonum = 1, undo = False, clear = False, draw = Nothing,+	sleep = Nothing, flush = False}
src/Graphics/X11/Turtle/Move.hs view
@@ -45,25 +45,28 @@ --------------------------------------------------------------------------------  moveTurtle :: Field -> Character -> Layer -> TurtleState -> TurtleState -> IO ()+moveTurtle _ _ _ _ TurtleState{sleep = Just t} = threadDelay $ 1000 * t+moveTurtle f _ _ _ TurtleState{flush = True} = flushField f True $ return () moveTurtle f c l t0 t1 = do-	when (undo t1) $ flushField f $ do+	when (undo t1) $ flushField f fl $ do 		when (clear t0) redraw 		when (isJust $ draw t0) $ do 			unlessM (undoLayer l) $ clearLayer l >> redraw 			when (visible t1) $ drawT (direction t1) $ position t0 	when (visible t1) $ do-		forM_ (directions t0 t1) $ \dir -> flushField f $+		forM_ (directions t0 t1) $ \dir -> flushField f fl $ 			drawT dir (position t0) >> threadDelay (interval t0)-		forM_ (positions t0 t1) $ \p -> flushField f $+		forM_ (positions t0 t1) $ \p -> flushField f fl $ 			drawT (direction t1) p >> threadDelay (interval t0)-		flushField f $ drawT (direction t1) $ position t1+		flushField f fl $ drawT (direction t1) $ position t1 	when (bgcolor t0 /= bgcolor t1) $-		flushField f $ fieldColor f l $ bgcolor t1-	unless (undo t1) $ flushField f $ do+		flushField f fl $ fieldColor f l $ bgcolor t1+	unless (undo t1) $ flushField f fl $ do 		when (visible t0 && not (visible t1)) $ clearCharacter c 		when (clear t1) $ clearLayer l 		maybe (return ()) (drawSVG f l) (draw t1) 	where+	fl = stepbystep t0 	redraw = mapM_ (drawSVG f l) $ reverse $ drawed t1 	drawT d p = drawTurtle f c t1 d p lineOrigin 	lineOrigin	| undo t1 && pendown t0 = Just $ position t1
src/Graphics/X11/Turtle/State.hs view
@@ -25,7 +25,10 @@ 	undonum :: Int, 	draw :: Maybe SVG, 	drawed :: [SVG],-	fillPoints :: [(Double, Double)]}+	fillPoints :: [(Double, Double)],+	sleep :: Maybe Int,+	stepbystep :: Bool,+	flush :: Bool} 	deriving Show  initialTurtleState :: TurtleState@@ -49,4 +52,7 @@ 	undonum = 0, 	draw = Nothing, 	drawed = [Fill $ RGB 255 255 255],-	fillPoints = []}+	fillPoints = [],+	sleep = Nothing,+	stepbystep = True,+	flush = False}
xturtle.cabal view
@@ -2,7 +2,7 @@ cabal-version:	>= 1.6  name:		xturtle-version:	0.1.0+version:	0.1.2 stability:	experimental author:		Yoshikuni Jujo <PAF01143@nifty.ne.jp> maintainer:	Yoshikuni Jujo <PAF01143@nifty.ne.jp>