libart-paperback 0.1.0-a.1.20260122225059.e5fea306241a
PDF (1.4) library for C++
canvas.hxx
1#ifndef art__paperback__graphics__canvas_hxx_
2#define art__paperback__graphics__canvas_hxx_
3
4#include <art/paperback/types.hxx>
5#include <art/paperback/forward.hxx>
6
7#include <art/paperback/graphics/color.hxx>
8
10{
11
12 /// Represents the drawable canvas of a page.
13 ///
14 class Canvas
15 {
16 public:
17 struct Clear {};
18
19 /// Dispatch-tag used to clear a canvas.
20 ///
21 static constexpr Clear const clear{};
22
23 /// Constructor.
24 ///
25 Canvas(Clear const&, Page&);
26
27 /// Destructor.
28 ///
29 ~Canvas();
30
31 /// Access the parent page.
32 ///
33 Page&
34 page();
35
36 /// Access the parent page.
37 ///
38 Page const&
39 page() const;
40
41 /// Access the content stream.
42 ///
44 content();
45
46 /// Access the content stream.
47 ///
48 Carousel::Stream const&
49 content() const;
50
51 class Save;
52 friend Save;
53
54 /// Set stroke greyscale value.
55 ///
56 void
57 set_stroke(double);
58
59 /// Set fill greyscale value.
60 ///
61 void
62 set_fill(double);
63
64 /// Set stroke RGB color.
65 ///
66 void
67 set_stroke(Color_RGB const&);
68
69 /// Set fill RGB color.
70 ///
71 void
72 set_fill(Color_RGB const&);
73
74 class Path;
75 friend Path;
76
77 class Begin_text;
78 friend Begin_text;
79
80 class Set_font;
81 friend Set_font;
82
83 /// Compute text width.
84 ///
85 double
86 get_text_width(string const&) const;
87
88 private:
89 Canvas(Canvas const&) = delete;
90 Canvas(Canvas&&) = delete;
91 Canvas& operator=(Canvas const&) = delete;
92 Canvas& operator=(Canvas&&) = delete;
93
94 private:
95 struct Internal;
96 unique_ptr<Internal> internal;
97
98 };
99
100 /// Saves graphics state.
101 ///
103 {
104 public:
105 /// Constructor.
106 ///
107 explicit
108 Save(Canvas&);
109
110 /// Destructor.
111 ///
112 ~Save() noexcept;
113
114 /// Access parent canvas.
115 ///
116 Canvas&
117 canvas();
118
119 /// Access parent canvas.
120 Canvas const&
121 canvas() const;
122
123 private:
124 Save(Save const&) = delete;
125 Save(Save&&) = delete;
126 Save& operator=(Save const&) = delete;
127 Save& operator=(Save&&) = delete;
128
129 private:
130 Canvas& _canvas;
131
132 };
133
134 /// Path construction class.
135 ///
136 /// \todo Add example.
137 ///
139 {
140 public:
141 /// Paint mode enumeration.
142 ///
144 {
145 /// Stroke.
146 ///
148
149 /// Fill.
150 ///
152
153 /// Fill then stroke.
154 ///
156
157 };
158
159 /// Constructor.
160 ///
162
163 /// Destructor.
164 ///
165 ~Path() noexcept;
166
167 /// Access parent canvas.
168 ///
169 Canvas&
170 canvas();
171
172 /// Access parent canvas.
173 Canvas const&
174 canvas() const;
175
176 /// Move starting point.
177 ///
178 void
179 move_to(double, double);
180
181 /// Draw line.
182 ///
183 void
184 line_to(double, double);
185
186 /// Draw bezier curve.
187 ///
188 void
189 bezier_curve_to(double,
190 double,
191 double,
192 double,
193 double,
194 double);
195
196
197 private:
198 Path(Path const&) = delete;
199 Path(Path&&) = delete;
200 Path& operator=(Path const&) = delete;
201 Path& operator=(Path&&) = delete;
202
203 private:
204 Canvas& _canvas;
205 Paint_mode _mode;
206
207 };
208
210 {
211 public:
212 explicit
214
215 Begin_text(Begin_text const&) = delete;
216
217 Begin_text(Begin_text&&) = delete;
218
219 ~Begin_text() noexcept;
220
221 Canvas&
222 canvas();
223
224 Canvas const&
225 canvas() const;
226
227 void
228 move_text_pos(double, double);
229
230 void
231 show_text(string const&);
232
234 operator=(Begin_text const&) = delete;
235
237 operator=(Begin_text&&) = delete;
238
239 private:
240 Canvas& _canvas;
241
242 };
243
245 {
246 public:
247 Set_font(Canvas&, Font&, double);
248
249 Set_font(Set_font const&) = delete;
250
251 Set_font(Set_font&&) = delete;
252
253 ~Set_font() noexcept;
254
255 Canvas&
256 canvas();
257
258 Canvas const&
259 canvas() const;
260
261 Set_font&
262 operator=(Set_font const&) = delete;
263
264 Set_font&
265 operator=(Set_font&&) = delete;
266
267 private:
268 Canvas& _canvas;
269
270 };
271
272} // namespace Art::Paperback::Graphics
273
274#endif
Represents a COS stream.
Definition stream.hxx:16
Begin_text(Canvas &)
Definition canvas.cxx:371
Path construction class.
Definition canvas.hxx:139
Canvas & canvas()
Access parent canvas.
Definition canvas.cxx:311
void bezier_curve_to(double, double, double, double, double, double)
Draw bezier curve.
Definition canvas.cxx:347
~Path() noexcept
Destructor.
Definition canvas.cxx:288
void move_to(double, double)
Move starting point.
Definition canvas.cxx:327
void line_to(double, double)
Draw line.
Definition canvas.cxx:337
Paint_mode
Paint mode enumeration.
Definition canvas.hxx:144
@ stroke
Stroke.
Definition canvas.hxx:147
@ fill
Fill.
Definition canvas.hxx:151
@ fill_then_stroke
Fill then stroke.
Definition canvas.hxx:155
Saves graphics state.
Definition canvas.hxx:103
Save(Canvas &)
Constructor.
Definition canvas.cxx:252
Canvas & canvas()
Access parent canvas.
Definition canvas.cxx:266
~Save() noexcept
Destructor.
Definition canvas.cxx:259
Set_font(Canvas &, Font &, double)
Definition canvas.cxx:421
Represents the drawable canvas of a page.
Definition canvas.hxx:15
~Canvas()
Destructor.
Definition canvas.cxx:125
Carousel::Stream & content()
Access the content stream.
Definition canvas.cxx:144
double get_text_width(string const &) const
Compute text width.
Definition canvas.cxx:231
void set_fill(double)
Set fill greyscale value.
Definition canvas.cxx:177
void set_stroke(double)
Set stroke greyscale value.
Definition canvas.cxx:160
Canvas(Clear const &, Page &)
Constructor.
Definition canvas.cxx:118
Page & page()
Access the parent page.
Definition canvas.cxx:130
static constexpr Clear const clear
Dispatch-tag used to clear a canvas.
Definition canvas.hxx:21
Represents an RGB color value.
Definition color.hxx:26
Base class for fonts.
Definition font.hxx:31
Definition page.hxx:12
Graphics namespace.
Definition forward.hxx:105