Skip to content

Commit

Permalink
Fix canvas drawing logic.
Browse files Browse the repository at this point in the history
  • Loading branch information
epost committed Oct 1, 2020
1 parent bda6780 commit 4f5dd74
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 14 deletions.
12 changes: 9 additions & 3 deletions src/Canvas.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,28 @@ exports.get2DContext = function(canvasId) {
exports.initContext = function(color) {
return function initContext(context) {
return function() {
context.beginPath();
context.lineWidth = 2;
context.strokeStyle = color;
return context;
};
};
};

exports.beginStroke = function(context) {
exports.beginPath = function(context) {
return function() {
context.beginPath();
return context;
};
};

exports.endStroke = function(context) {
exports.closePath = function(context) {
return function() {
context.closePath();
return context;
};
};

exports.stroke = function(context) {
return function() {
context.stroke();
return context;
Expand Down
10 changes: 8 additions & 2 deletions src/Canvas.purs
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@ foreign import get2DContext :: String -> Effect Context2D

foreign import initContext :: CanvasStyleString -> Context2D -> Effect Context2D

foreign import beginStroke :: Context2D -> Effect Context2D
foreign import beginPath :: Context2D -> Effect Context2D

foreign import endStroke :: Context2D -> Effect Context2D
foreign import closePath :: Context2D -> Effect Context2D

foreign import stroke :: Context2D -> Effect Context2D

foreign import lineTo :: Distance -> Distance -> Context2D -> Effect Context2D

Expand All @@ -36,6 +38,10 @@ colorToCanvasStyle col = case col of
Red -> "red"
Green -> "green"
Blue -> "blue"
Yellow -> "yellow"
Purple -> "purple"
Cyan -> "cyan"
Magenta -> "magenta"
Black -> "black"
White -> "white"
CustomColor str -> str
10 changes: 4 additions & 6 deletions src/CanvasInterpreter.purs
Original file line number Diff line number Diff line change
Expand Up @@ -62,17 +62,17 @@ interpretTurtleProg'' = runFreeM interpret

interpret (Right angleDeg rest) = do
let angle = rad angleDeg
modify_ $ \(Turtle x y angle0 p) -> Turtle x y (angle0 + angle) p
modify_ \(Turtle x y angle0 p) -> Turtle x y (angle0 + angle) p
pure rest

interpret (PenUp rest) = do
modify_ $ \(Turtle x y angle _) -> Turtle x y angle false
pure ((\prog -> prog <> [endStroke]) <$> rest)
pure ((\prog -> prog <> [stroke]) <$> rest)

interpret (PenDown rest) = do
Turtle x y angle p <- get
put (Turtle x y angle true)
pure ((\prog -> prog <> [beginStroke, moveTo x y]) <$> rest)
pure ((\prog -> prog <> [beginPath, moveTo x y]) <$> rest)

interpret (UseColor col rest) = do
pure ((\prog -> prog <> [setStrokeStyle $ colorToCanvasStyle col]) <$> rest)
Expand All @@ -87,6 +87,4 @@ renderTurtleProgOnCanvas canvasId prog =
get2DContext canvasId >>=
initContext (colorToCanvasStyle Purple) >>=
moveTo 0.0 0.0 >>=
beginStroke >>=
interpretTurtleProg prog >>=
endStroke
interpretTurtleProg prog
2 changes: 1 addition & 1 deletion src/Language.purs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import Control.Monad.Free (Free, liftF)

type Angle = Number
type Distance = Number
data Color = Red | Green | Blue | Purple | Black | CustomColor String
data Color = Red | Green | Blue | Yellow | Purple | Magenta | Cyan | Black | White | CustomColor String

data TurtleCmd a = Forward Distance a
| Arc Distance Angle a
Expand Down
13 changes: 11 additions & 2 deletions src/Main.purs
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,23 @@ import Effect (Effect)

main :: Effect Context2D
main = renderTurtleProgOnCanvas "turtleCanvas" $ do
color Purple
star
penUp

forward 40.0
left 100.0
penDown

color Red
star

forward 40.0
left 100.0

color Green
star

star = do
penDown
right 144.0
forward 100.0
right 144.0
Expand All @@ -28,3 +36,4 @@ star = do
forward 100.0
right 144.0
forward 100.0
penUp

0 comments on commit 4f5dd74

Please sign in to comment.