17 #ifndef EMP_WEB_CANVAS_SHAPE_H 18 #define EMP_WEB_CANVAS_SHAPE_H 22 #include "../base/vector.h" 23 #include "../geometry/Circle2D.h" 39 CanvasShape(
double _x,
double _y,
const std::string & fc=
"",
const std::string & lc=
"",
double lw=1.0)
40 : p(_x,_y), fill_color(fc), line_color(lc), line_width(lw) { ; }
41 CanvasShape(
Point _p,
const std::string & fc=
"",
const std::string & lc=
"",
double lw=1.0)
42 : p(_p), fill_color(fc), line_color(lc), line_width(lw) { ; }
55 void SetFillColor(
const std::string & color) { fill_color = color; }
58 void SetLineColor(
const std::string & color) { line_color = color; }
73 const std::string & fc=
"",
const std::string & lc=
"",
double lw=1.0)
76 CanvasCircle(
Point _p,
double _r,
const std::string & fc=
"",
const std::string & lc=
"",
double lw=1.0)
80 :
CanvasShape(circle.GetCenterX(), circle.GetCenterY(), fc, lc, lw)
81 , radius(circle.GetRadius()) { ; }
85 emp_i.ctx.beginPath();
86 emp_i.ctx.arc($0, $1, $2, 0, Math.PI*2);
99 const std::string & fc=
"",
const std::string & lc=
"")
103 const std::string & fc=
"",
const std::string & lc=
"")
108 emp_i.ctx.beginPath();
109 emp_i.ctx.rect($0, $1, $2, $3);
126 emp_i.ctx.clearRect($0, $1, $2, $3);
143 CanvasPolygon(
double _x,
double _y,
const std::string & fc=
"",
const std::string & lc=
"")
151 emp_i.ctx.translate($0,$1);
152 emp_i.ctx.beginPath();
153 emp_i.ctx.moveTo($2, $3);
154 },
p.
GetX(),
p.
GetY(), points[0].GetX(), points[0].GetY());
155 for (
size_t i = 1; i < points.
size(); i++) {
157 emp_i.ctx.lineTo($0, $1);
158 }, points[i].GetX(), points[i].GetY());
161 emp_i.ctx.closePath();
162 emp_i.ctx.translate($0,$1);
176 const std::string & lc=
"",
double lw=1.0)
177 :
CanvasShape(_x1, _y1,
"", lc, lw), x2(_x2), y2(_y2) { ; }
179 :
CanvasLine(p1.GetX(), p1.GetY(), p2.GetX(), p2.GetY(), lc, lw) { ; }
183 emp_i.ctx.beginPath();
184 emp_i.ctx.moveTo($0, $1);
185 emp_i.ctx.lineTo($2, $3);
203 const std::string & lc=
"",
double lw=1.0)
204 :
CanvasShape(_x1, _y1,
"", lc, lw), points(_points) { ; }
206 const std::string & lc=
"",
double lw=1.0)
212 emp_i.ctx.beginPath();
213 emp_i.ctx.moveTo($0, $1);
216 for (
auto p : points) {
217 EM_ASM_ARGS({ emp_i.ctx.lineTo($0, $1); },
p.
GetX(),
p.
GetY());
233 const std::string & fc=
"",
const std::string & lc=
"")
234 :
CanvasShape(p, fc, lc), text(_text), center(false) { ; }
238 EM_ASM({ emp_i.ctx.textAlign =
"center"; });
239 EM_ASM({ emp_i.ctx.textBaseline =
"middle"; });
242 emp_i.ctx.fillStyle = Pointer_stringify($3);
243 var text = Pointer_stringify($2);
244 emp_i.ctx.fillText(text,$0,$1);
Define an arbitrary shape to draw on a canvas (base clase)
Definition: CanvasShape.h:31
void Center(bool c=true)
Center this text.
Definition: CanvasShape.h:249
void SetLineColor(const std::string &color)
Change the stroke color of this shape.
Definition: CanvasShape.h:58
void Apply()
Apply current action to emp_i.ctx.
Definition: CanvasShape.h:181
CanvasCircle(Point _p, double _r, const std::string &fc="", const std::string &lc="", double lw=1.0)
Definition: CanvasShape.h:76
A line segment on the canvas.
Definition: CanvasShape.h:170
constexpr TYPE GetX() const
Definition: Point2D.h:39
CanvasCircle(emp::Circle circle, const std::string &fc="", const std::string &lc="", double lw=1.0)
Definition: CanvasShape.h:79
CanvasLine(double _x1, double _y1, double _x2, double _y2, const std::string &lc="", double lw=1.0)
Y-position for second point of line segment.
Definition: CanvasShape.h:175
Clear a rectangular area in a canvas.
Definition: CanvasShape.h:117
bool center
Should this text be centered (or is anchor on left side)?
Definition: CanvasShape.h:230
Definition: CanvasShape.h:197
CanvasLine(Point p1, Point p2, const std::string &lc="", double lw=1.0)
Definition: CanvasShape.h:178
void Apply()
Apply current action to emp_i.ctx.
Definition: CanvasShape.h:149
Define a base class for all actions that can be done to widgets, plus simple actions.
bool GetCenter() const
Identify if text is centered.
Definition: CanvasShape.h:252
std::string fill_color
Internal color to fill shape with.
Definition: CanvasShape.h:34
virtual ~CanvasShape()
Definition: CanvasShape.h:43
CanvasAction * Clone() const
Make a copy of the current action.
Definition: CanvasShape.h:166
void MoveTo(Point _p)
Shift the position of this shape to a point.
Definition: CanvasShape.h:46
std::string line_color
Border color for shape.
Definition: CanvasShape.h:35
size_t size() const
Definition: vector.h:151
Point2D & Set(TYPE _x, TYPE _y)
Definition: Point2D.h:43
void emplace_back(ARGS &&...args)
Definition: vector.h:219
CanvasCircle(double _x, double _y, double _r, const std::string &fc="", const std::string &lc="", double lw=1.0)
Definition: CanvasShape.h:72
void Apply()
Apply current action to emp_i.ctx.
Definition: CanvasShape.h:236
CanvasRect(Point _p, double _w, double _h, const std::string &fc="", const std::string &lc="")
Definition: CanvasShape.h:98
CanvasMultiLine(double _x1, double _y1, const emp::vector< Point > &_points, const std::string &lc="", double lw=1.0)
Definition: CanvasShape.h:202
void Apply()
Apply current action to emp_i.ctx.
Definition: CanvasShape.h:124
CanvasClearRect(Point _p, double _w, double _h)
Definition: CanvasShape.h:121
std::string text
Specific text to be written.
Definition: CanvasShape.h:229
CanvasPolygon & AddPoint(Point p)
Definition: CanvasShape.h:147
CanvasMultiLine(Point p1, const emp::vector< Point > &_points, const std::string &lc="", double lw=1.0)
Definition: CanvasShape.h:205
CanvasPolygon(double _x, double _y, const std::string &fc="", const std::string &lc="")
Definition: CanvasShape.h:143
CanvasPolygon(const emp::vector< Point > &p, const std::string &fc="", const std::string &lc="")
Definition: CanvasShape.h:139
CanvasAction * Clone() const
Make a copy of the current action.
Definition: CanvasShape.h:254
void SetLineWidth(double lw=1.0)
Setup details needed before drawing lines.
Definition: CanvasShape.h:52
void Apply()
Apply current action to emp_i.ctx.
Definition: CanvasShape.h:106
CanvasShape(Point _p, const std::string &fc="", const std::string &lc="", double lw=1.0)
Definition: CanvasShape.h:41
void LineWidth(double line_width=1.0)
Helper function to set the stroke status.
Definition: CanvasAction.h:56
CanvasPolygon(const std::string &fc="", const std::string &lc="")
Definition: CanvasShape.h:137
CanvasAction * Clone() const
Make a copy of the current action.
Definition: CanvasShape.h:113
Base class to maintain canvas actions.
Definition: CanvasAction.h:33
CanvasShape(double _x, double _y, const std::string &fc="", const std::string &lc="", double lw=1.0)
Definition: CanvasShape.h:39
void ApplyColor()
Actually change the color on screen.
Definition: CanvasShape.h:61
Point p
Anchor point for this shape.
Definition: CanvasShape.h:33
If we are in emscripten, make sure to include the header.
Definition: array.h:37
CanvasText(Point p, const std::string &_text, const std::string &fc="", const std::string &lc="")
Definition: CanvasShape.h:232
Build a debug wrapper emp::vector around std::vector.
Definition: vector.h:42
Text to be written on a canvas.
Definition: CanvasShape.h:227
void MoveTo(double _x, double _y)
Shift the position of this shape to coordinates.
Definition: CanvasShape.h:49
void Apply()
Apply current action to emp_i.ctx.
Definition: CanvasShape.h:209
CanvasPolygon & AddPoint(double x, double y)
Definition: CanvasShape.h:146
CanvasAction * Clone() const
Make a copy of the current action.
Definition: CanvasShape.h:223
CanvasAction * Clone() const
Make a copy of the current action.
Definition: CanvasShape.h:192
CanvasRect(double _x, double _y, double _w, double _h, const std::string &fc="", const std::string &lc="")
Definition: CanvasShape.h:102
double line_width
How wide should lines be?
Definition: CanvasShape.h:36
constexpr TYPE GetY() const
Definition: Point2D.h:40
void Fill(const std::string &style="")
Helper function to set the fill status.
Definition: CanvasAction.h:36
CanvasPolygon(Point _p, const std::string &fc="", const std::string &lc="")
Definition: CanvasShape.h:141
Track a circle shape to be drawn on a canvas.
Definition: CanvasShape.h:69
CanvasAction * Clone() const
Make a copy of the current action.
Definition: CanvasShape.h:90
An arbitrary-sized polygon to be drawn on a canvas.
Definition: CanvasShape.h:133
void Apply()
Apply current action to emp_i.ctx.
Definition: CanvasShape.h:83
void SetFillColor(const std::string &color)
Change the fill color of this shape.
Definition: CanvasShape.h:55
CanvasAction * Clone() const
Make a copy of the current action.
Definition: CanvasShape.h:129
Track a rectangle shape to be drawn on a canvas.
Definition: CanvasShape.h:94
void Stroke(const std::string &style="")
Helper function to set the stroke status.
Definition: CanvasAction.h:46