Board 0.9.6
Style.h
Go to the documentation of this file.
1/* -*- mode: c++ -*- */
26#ifndef BOARD_STYLE_H
27#define BOARD_STYLE_H
28#include <board/Color.h>
29#include <iostream>
30#include <stack>
31
32namespace LibBoard
33{
35{
39};
41{
45};
47{
54};
55
57{
60};
61
62struct TransformTikZ;
63struct TransformEPS;
64struct TransformSVG;
65
69struct Style {
72 double lineWidth;
76
80 Style();
81
83
90 std::string svgProperties(const TransformSVG & transform) const;
91
97 std::string postscriptProperties(const TransformEPS & transform) const;
98
104 std::string tikzProperties(const TransformTikZ & transform) const;
105
106 static void setDefaultStyle(const Style &);
107
108 static void setDefaultLineWidth(double);
109
110 static void setDefaultPenColor(Color);
111
112 static void setDefaultFillColor(Color);
113
114 static void setDefaultLineStyle(LineStyle);
115
116 static void setDefaultLineCap(LineCap);
117
118 static void setDefaultLineJoin(LineJoin);
119
125 inline Style withPenColor(const Color & color) const;
126
132 inline Style withFillColor(const Color & color) const;
133
139 inline Style withLineWidth(double width) const;
140
147
153 inline Style withLineCap(LineCap lineCap) const;
154
160 inline Style withLineJoin(LineJoin lineJoin) const;
161
166 static inline const Style & defaultStyle();
167
172 static inline const double & defaultLineWidth();
173
178 static inline const Color & defaultPenColor();
179
184 static inline const Color & defaultFillColor();
185
190 static inline const LineStyle & defaultLineStyle();
191
196 static inline const LineCap & defaultLineCap();
197
202 static inline const LineJoin & defaultLineJoin();
203
207 static void push();
208
212 static void pop();
213
214private:
215 static Style _defaultStyle;
216 static std::stack<Style> _styleStack;
217};
218
219std::ostream & operator<<(std::ostream & out, const Style & style);
220
221extern const char * xFigDashStylesPS[];
222extern const char * xFigDashStylesSVG[];
223extern const char * xFigDashStylesTikZ[];
224
225// Inline methods
226
227Style Style::withPenColor(const Color & color) const
228{
229 Style style(*this);
230 style.penColor = color;
231 return style;
232}
233
234Style Style::withFillColor(const Color & color) const
235{
236 Style style(*this);
237 style.fillColor = color;
238 return style;
239}
240
241Style Style::withLineWidth(double width) const
242{
243 Style style(*this);
244 style.lineWidth = width;
245 return style;
246}
247
249{
250 Style style(*this);
251 style.lineStyle = lineStyle;
252 return style;
253}
254
256{
257 Style style(*this);
258 style.lineCap = lineCap;
259 return style;
260}
261
263{
264 Style style(*this);
265 style.lineJoin = lineJoin;
266 return style;
267}
268
270{
271 return _defaultStyle;
272}
273
275{
276 return _defaultStyle.lineWidth;
277}
278
280{
281 return _defaultStyle.penColor;
282}
283
285{
286 return _defaultStyle.fillColor;
287}
288
290{
291 return _defaultStyle.lineStyle;
292}
293
295{
296 return _defaultStyle.lineCap;
297}
298
300{
301 return _defaultStyle.lineJoin;
302}
303
304} // namespace LibBoard
305
306#endif /* BOARD_STYLE_H */
The Color structure. @copyright This source code is part of the Board project, a C++ library whose pu...
Structure representing an RGB triple.
Definition Color.h:43
Definition Board.h:55
const char * xFigDashStylesPS[]
Definition Style.cpp:33
LineStyle
Definition Style.h:47
@ DotStyle
Definition Style.h:50
@ DashDotDotStyle
Definition Style.h:52
@ SolidStyle
Definition Style.h:48
@ DashDotStyle
Definition Style.h:51
@ DashDotDotDotStyle
Definition Style.h:53
@ DashStyle
Definition Style.h:49
std::ostream & operator<<(std::ostream &out, const Color &color)
Definition Color.cpp:245
LineCap
Definition Style.h:35
@ SquareCap
Definition Style.h:38
@ RoundCap
Definition Style.h:37
@ ButtCap
Definition Style.h:36
const char * xFigDashStylesSVG[]
Definition Style.cpp:42
const char * xFigDashStylesTikZ[]
Definition Style.cpp:51
LineWidthFlag
Definition Style.h:57
@ UseLineWidth
Definition Style.h:59
@ IgnoreLineWidth
Definition Style.h:58
LineJoin
Definition Style.h:41
@ MiterJoin
Definition Style.h:42
@ BevelJoin
Definition Style.h:44
@ RoundJoin
Definition Style.h:43
Definition Style.h:69
Style withLineWidth(double width) const
Definition Style.h:241
LineJoin lineJoin
Definition Style.h:75
Style withFillColor(const Color &color) const
Definition Style.h:234
Color fillColor
Definition Style.h:71
static void push()
Definition Style.cpp:160
LineStyle lineStyle
Definition Style.h:73
std::string postscriptProperties(const TransformEPS &transform) const
Definition Style.cpp:101
Color penColor
Definition Style.h:70
double lineWidth
Definition Style.h:72
static const Color & defaultPenColor()
defaultPenColor
Definition Style.h:279
static void setDefaultLineCap(LineCap)
Definition Style.cpp:150
static void pop()
Definition Style.cpp:165
static void setDefaultStyle(const Style &)
Definition Style.cpp:125
Style withLineStyle(LineStyle lineStyle) const
Definition Style.h:248
static void setDefaultFillColor(Color)
Definition Style.cpp:140
static const Color & defaultFillColor()
defaultFillColor
Definition Style.h:284
static void setDefaultLineJoin(LineJoin)
Definition Style.cpp:155
static const double & defaultLineWidth()
defaultLineWidth
Definition Style.h:274
Style withPenColor(const Color &color) const
Definition Style.h:227
std::string svgProperties(const TransformSVG &transform) const
Definition Style.cpp:74
static const Style & defaultStyle()
defaultStyle
Definition Style.h:269
static const LineStyle & defaultLineStyle()
defaultLineStyle
Definition Style.h:289
static void setDefaultLineStyle(LineStyle)
Definition Style.cpp:145
std::string tikzProperties(const TransformTikZ &transform) const
Definition Style.cpp:111
Style()
Definition Style.cpp:64
static const LineCap & defaultLineCap()
defaultLineCap
Definition Style.h:294
static void setDefaultPenColor(Color)
Definition Style.cpp:135
Style withLineCap(LineCap lineCap) const
Definition Style.h:255
Style withLineJoin(LineJoin lineJoin) const
Definition Style.h:262
static void setDefaultLineWidth(double)
Definition Style.cpp:130
LineCap lineCap
Definition Style.h:74
static const LineJoin & defaultLineJoin()
defaultLineJoin
Definition Style.h:299
Structure representing a scaling and translation suitable for an EPS output.
Definition Transforms.h:71
Structure representing a scaling and translation suitable for an SVG output.
Definition Transforms.h:109
Structure representing a scaling and translation suitable for an TikZ output.
Definition Transforms.h:126