xturtle-0.0.15: src/Graphics/X11/TurtleState.hs
module Graphics.X11.TurtleState (
TurtleState(..),
initialTurtleState,
pencolor_,
setPencolor,
SVG(..),
Position(..),
Color(..),
colorToWord32
) where
import Data.Word(Word32)
import Data.Bits
import Text.XML.YJSVG
pencolor_ :: TurtleState -> Word32
pencolor_ TurtleState{pencolor = RGB r g b} = c'
where
c' = shift (fromIntegral r) 16 .|. shift (fromIntegral g) 8 .|. fromIntegral b
pencolor_ TurtleState{pencolor = ColorName _} = error "not implemented"
colorToWord32 :: Color -> Word32
colorToWord32 (RGB r g b) =
shift (fromIntegral r) 16 .|. shift (fromIntegral g) 8 .|. fromIntegral b
colorToWord32 _ = error "colorToWord32 (ColorName _) is not implemented"
setPencolor :: TurtleState -> Word32 -> TurtleState
setPencolor t c = t{
pencolor = RGB r_ g_ b_}
where
r_ = fromIntegral $ shiftR c 16 .&. 0xff
g_ = fromIntegral $ shiftR c 8 .&. 0xff
b_ = fromIntegral $ c .&. 0xff
data TurtleState = TurtleState {
position :: (Double, Double),
direction :: Double,
degrees :: Double,
pendown :: Bool,
pensize :: Double,
pencolor :: Color,
shape :: [(Double, Double)],
shapesize :: Double,
visible :: Bool,
clear :: Bool,
undo :: Bool,
line :: Bool,
undonum :: Int,
draw :: Maybe SVG,
drawed :: [SVG]
} deriving Show
initialTurtleState :: [(Double, Double)] -> TurtleState
initialTurtleState sh = TurtleState {
position = (0, 0),
direction = 0,
degrees = 360,
pendown = True,
pensize = 0,
pencolor = RGB 0 0 0,
shape = sh,
shapesize = 1,
visible = True,
clear = False,
undo = False,
line = False,
undonum = 1,
draw = Nothing,
drawed = []
}