packages feed

xturtle 0.1.4 → 0.1.5

raw patch · 7 files changed

+54/−13 lines, 7 files

Files

src/Graphics/X11/Turtle.hs view
@@ -39,6 +39,8 @@ 	flush,  	-- * change turtle state+	addshape,+	getshapes, 	shape, 	shapesize, 	speed,@@ -48,6 +50,8 @@ 	pendown, 	beginfill, 	endfill,+	beginpoly,+	endpoly, 	pencolor, 	pensize, 	degrees,@@ -69,6 +73,7 @@ 	onclick, 	onrelease, 	ondrag,+	onmotion, 	onkeypress,  	-- * save and load@@ -80,25 +85,26 @@ import Graphics.X11.Turtle.Data(nameToShape, nameToSpeed) import Graphics.X11.Turtle.Input( 	TurtleState, TurtleInput(..),-	turtleSeries, direction, visible, undonum, drawed)+	turtleSeries, direction, visible, undonum, drawed, polyPoints) import qualified Graphics.X11.Turtle.Input as S(position, degrees, pendown) import Graphics.X11.Turtle.Move( 	Field, Layer, Character, 	openField, closeField, forkField, waitField, fieldSize, flushField, 	moveTurtle, addLayer, clearLayer, addCharacter, clearCharacter,-	onclick, onrelease, ondrag, onkeypress)+	onclick, onrelease, ondrag, onmotion, onkeypress) import Text.XML.YJSVG(SVG(..), Color(..))  import Control.Concurrent(Chan, writeChan, ThreadId, killThread) import Control.Monad(replicateM_, zipWithM_)-import Data.IORef(IORef, newIORef, readIORef)+import Data.IORef(IORef, newIORef, readIORef, modifyIORef) import Data.IORef.Tools(atomicModifyIORef_) import Data.Fixed(mod')+import Data.Maybe(fromJust)  --------------------------------------------------------------------------------  xturtleVersion :: (Int, String)-xturtleVersion = (50, "0.1.4")+xturtleVersion = (53, "0.1.5")  -------------------------------------------------------------------------------- @@ -110,7 +116,8 @@ 	states :: [TurtleState], 	inputs :: [TurtleInput], 	stateIndex :: IORef Int,-	thread :: ThreadId+	thread :: ThreadId,+	shapes :: IORef [(String, [(Double, Double)])]  }  class ColorClass a where getColor :: a -> Color@@ -130,6 +137,7 @@ 	(ic, tis, sts) <- turtleSeries 	si <- newIORef 1 	tid <- forkField f $ zipWithM_ (moveTurtle f ch l) sts $ tail sts+	shps <- newIORef $ map (\n -> (n, nameToShape n)) ["classic", "turtle"] 	let	t = Turtle { 			field = f, 			layer = l,@@ -138,7 +146,8 @@ 			states = sts, 			inputs = tis, 			stateIndex = si,-			thread = tid}+			thread = tid,+			shapes = shps} 	shape t "classic" >> input t (Undonum 0) 	return t @@ -214,8 +223,14 @@  -------------------------------------------------------------------------------- +addshape :: Turtle -> String -> [(Double, Double)] -> IO ()+addshape t n s = modifyIORef (shapes t) ((n, s) :)++getshapes :: Turtle -> IO [String]+getshapes t = fmap (map fst) $ readIORef (shapes t)+ shape :: Turtle -> String -> IO ()-shape t = input t . Shape . nameToShape+shape t n = readIORef (shapes t) >>= input t . Shape . fromJust . lookup n  shapesize :: Turtle -> Double -> Double -> IO () shapesize t sx sy = input t $ Shapesize sx sy@@ -236,6 +251,14 @@ beginfill, endfill :: Turtle -> IO () beginfill = (`input` SetFill True) endfill = (`input` SetFill False)++beginpoly :: Turtle -> IO ()+beginpoly = (`input` SetPoly True)++endpoly :: Turtle -> IO [(Double, Double)]+endpoly t@Turtle{stateIndex = si, states = s} = do+	input t $ SetPoly False+	fmap (polyPoints . (s !!)) $ readIORef si  pencolor :: ColorClass c => Turtle -> c -> IO () pencolor t = input t . Pencolor . getColor
src/Graphics/X11/Turtle/Field.hs view
@@ -34,6 +34,7 @@ 	onclick, 	onrelease, 	ondrag,+	onmotion, 	onkeypress ) where @@ -71,6 +72,7 @@  	fClick, fRelease :: IORef (Int -> Double -> Double -> IO Bool), 	fDrag :: IORef (Double -> Double -> IO ()),+	fMotion :: IORef (Double -> Double -> IO ()), 	fKeypress :: IORef (Char -> IO Bool), fPressed :: IORef Bool,  	fLayers :: IORef Layers, fRunning :: IORef [ThreadId],@@ -82,6 +84,7 @@ makeField dpy win bufs gcs ic del sizeRef ls = do 	[click, release] <- replicateM 2 $ newIORef $ \_ _ _ -> return True 	drag <- newIORef $ \_ _ -> return ()+	motion <- newIORef $ \_ _ -> return () 	keypress <- newIORef $ \_ -> return True 	pressed <- newIORef False 	running <- newIORef []@@ -91,7 +94,7 @@ 		fDisplay = dpy, fWindow = win, fBufs = bufs, fGCs = gcs, 		fIC = ic, fDel = del, fSize = sizeRef, -		fClick = click, fRelease = release, fDrag = drag,+		fClick = click, fRelease = release, fDrag = drag, fMotion = motion, 		fKeypress = keypress, fPressed = pressed,  		fLayers = ls,@@ -181,6 +184,7 @@ 		pos <- center (ev_x ev) (ev_y ev) 		whenM (readIORef $ fPressed f) $ 			readIORef (fDrag f) >>= ($ pos) . uncurry+		readIORef (fMotion f) >>= ($ pos) . uncurry 		return True 	ClientMessageEvent{} -> return $ convert (head $ ev_data ev) /= fDel f 	_ -> return True@@ -300,8 +304,9 @@ onclick, onrelease :: Field -> (Int -> Double -> Double -> IO Bool) -> IO () (onclick, onrelease) = (writeIORef .) *** (writeIORef .) $ (fClick, fRelease) -ondrag :: Field -> (Double -> Double -> IO ()) -> IO ()+ondrag, onmotion :: Field -> (Double -> Double -> IO ()) -> IO () ondrag = writeIORef . fDrag+onmotion = writeIORef . fMotion  onkeypress :: Field -> (Char -> IO Bool) -> IO () onkeypress = writeIORef . fKeypress
src/Graphics/X11/Turtle/Input.hs view
@@ -14,6 +14,7 @@ 	visible, 	undonum, 	drawed,+	polyPoints ) where  import Graphics.X11.Turtle.State(TurtleState(..), initialTurtleState)@@ -30,6 +31,7 @@ 	| Pensize Double 	| SetPendown Bool 	| SetFill Bool+	| SetPoly Bool 	| SetVisible Bool 	| Degrees Double 	| PositionStep (Maybe Double)@@ -86,6 +88,9 @@ 	(x0, y0) = position t 	fl = Polyline (uncurry Center `map` fillPoints t) 		(pencolor t) (pencolor t) 0+nextTurtle t (SetPoly p) = (clearState t){+	poly = p,+	polyPoints = if p then [position t] else polyPoints t} nextTurtle t (SetVisible v) = (clearState t){visible = v} nextTurtle t (Degrees ds) = (clearState t){degrees = ds} nextTurtle t (PositionStep ps) = (clearState t){positionStep = ps}@@ -95,7 +100,8 @@ 	position = (x, y), 	draw = if pendown t then Just ln else Nothing, 	drawed = if pendown t then ln : drawed t else drawed t,-	fillPoints = if fill t then (x, y) : fillPoints t else fillPoints t}+	fillPoints = if fill t then (x, y) : fillPoints t else fillPoints t,+	polyPoints = if poly t then (x, y) : polyPoints t else polyPoints t} 	where 	(x0, y0) = position t 	ln = Line (Center x0 y0) (Center x y) (pencolor t) (pensize t)
src/Graphics/X11/Turtle/Move.hs view
@@ -23,6 +23,7 @@ 	onclick, 	onrelease, 	ondrag,+	onmotion, 	onkeypress ) where @@ -33,7 +34,7 @@ 	forkField, flushField, fieldColor, 	addLayer, drawLine, writeString, undoLayer, clearLayer, fillPolygon, 	addCharacter, drawCharacter, drawCharacterAndLine, clearCharacter,-	onclick, onrelease, ondrag, onkeypress, drawImage)+	onclick, onrelease, ondrag, onmotion, onkeypress, drawImage) import Text.XML.YJSVG(SVG(..), Position(..))  import Control.Concurrent(threadDelay)
src/Graphics/X11/Turtle/State.hs view
@@ -14,6 +14,7 @@ 	interval :: Int, 	pendown :: Bool, 	fill :: Bool,+	poly :: Bool, 	pensize :: Double, 	pencolor :: Color, 	bgcolor :: Color,@@ -26,6 +27,7 @@ 	draw :: Maybe SVG, 	drawed :: [SVG], 	fillPoints :: [(Double, Double)],+	polyPoints :: [(Double, Double)], 	sleep :: Maybe Int, 	stepbystep :: Bool, 	flush :: Bool}@@ -41,6 +43,7 @@ 	interval = 10000, 	pendown = True, 	fill = False,+	poly = False, 	pensize = 1, 	pencolor = RGB 0 0 0, 	bgcolor = RGB 255 255 255,@@ -53,6 +56,7 @@ 	draw = Nothing, 	drawed = [Fill $ RGB 255 255 255], 	fillPoints = [],+	polyPoints = [], 	sleep = Nothing, 	stepbystep = True, 	flush = False}
src/Graphics/X11/Turtle/XTools.hs view
@@ -65,6 +65,7 @@ 	allocaXEvent, pending, nextEvent, 	setWMProtocols, selectInput, button1MotionMask, buttonReleaseMask, 	buttonPressMask, keyPressMask, exposureMask,+	pointerMotionMask, 	buttonPress, buttonRelease, xK_VoidSymbol, getGeometry, drawPoint) import qualified Graphics.X11 as X(fillPolygon) import Graphics.X11.Xlib.Extras(Event(..), getEvent)@@ -131,7 +132,8 @@ 	forM_ bufs $ \bf -> fillRectangle dpy bf gcBG 0 0 rWidth rHeight 	setWMProtocols dpy win [del] 	selectInput dpy win $ fevent .|. exposureMask .|. keyPressMask .|.-		buttonPressMask .|. buttonReleaseMask .|. button1MotionMask+		buttonPressMask .|. buttonReleaseMask .|. button1MotionMask .|.+		pointerMotionMask 	size <- mapWindow dpy win >> windowSize dpy win 	return (dpy, win, Bufs ub bb tb, GCs gc gcBG, ic, del, size) 
xturtle.cabal view
@@ -2,7 +2,7 @@ cabal-version:	>= 1.6  name:		xturtle-version:	0.1.4+version:	0.1.5 stability:	experimental author:		Yoshikuni Jujo <PAF01143@nifty.ne.jp> maintainer:	Yoshikuni Jujo <PAF01143@nifty.ne.jp>