Board  0.9.5
Style.h
Go to the documentation of this file.
1 /* -*- mode: c++ -*- */
26 #ifndef BOARD_STYLE_H
27 #define BOARD_STYLE_H
28 #include <iostream>
29 #include <stack>
30 #include "board/Color.h"
31 
32 namespace LibBoard
33 {
34 enum LineCap
35 {
36  ButtCap = 0,
37  RoundCap,
38  SquareCap
39 };
40 enum LineJoin
41 {
42  MiterJoin = 0,
43  RoundJoin,
44  BevelJoin
45 };
46 enum LineStyle
47 {
48  SolidStyle = 0,
49  DashStyle,
50  DotStyle,
51  DashDotStyle,
52  DashDotDotStyle,
53  DashDotDotDotStyle
54 };
55 
56 enum LineWidthFlag
57 {
58  IgnoreLineWidth,
59  UseLineWidth
60 };
61 
62 struct TransformTikZ;
63 struct TransformEPS;
64 struct TransformSVG;
65 
69 struct Style {
70  Color penColor;
71  Color fillColor;
72  double lineWidth;
73  LineStyle lineStyle;
74  LineCap lineCap;
75  LineJoin lineJoin;
76 
80  Style();
81 
82  Style(Color penColor, Color fillColor, double lineWidth, LineStyle linestyle, LineCap lineCap, LineJoin lineJoin);
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 
146  inline Style withLineStyle(LineStyle lineStyle) const;
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 
214 private:
215  static Style _defaultStyle;
216  static std::stack<Style> _styleStack;
217 };
218 
219 std::ostream & operator<<(std::ostream & out, const Style & style);
220 
221 extern const char * xFigDashStylesPS[];
222 extern const char * xFigDashStylesSVG[];
223 extern const char * xFigDashStylesTikZ[];
224 
225 } // namespace LibBoard
226 
227 // Inline methods
228 
230 {
231  Style style(*this);
232  style.penColor = color;
233  return style;
234 }
235 
237 {
238  Style style(*this);
239  style.fillColor = color;
240  return style;
241 }
242 
244 {
245  Style style(*this);
246  style.lineWidth = width;
247  return style;
248 }
249 
250 LibBoard::Style LibBoard::Style::withLineStyle(LibBoard::LineStyle lineStyle) const
251 {
252  Style style(*this);
253  style.lineStyle = lineStyle;
254  return style;
255 }
256 
257 LibBoard::Style LibBoard::Style::withLineCap(LibBoard::LineCap lineCap) const
258 {
259  Style style(*this);
260  style.lineCap = lineCap;
261  return style;
262 }
263 
264 LibBoard::Style LibBoard::Style::withLineJoin(LibBoard::LineJoin lineJoin) const
265 {
266  Style style(*this);
267  style.lineJoin = lineJoin;
268  return style;
269 }
270 
272 {
273  return _defaultStyle;
274 }
275 
277 {
278  return _defaultStyle.lineWidth;
279 }
280 
282 {
283  return _defaultStyle.penColor;
284 }
285 
287 {
288  return _defaultStyle.fillColor;
289 }
290 
291 const LibBoard::LineStyle & LibBoard::Style::defaultLineStyle()
292 {
293  return _defaultStyle.lineStyle;
294 }
295 
296 const LibBoard::LineCap & LibBoard::Style::defaultLineCap()
297 {
298  return _defaultStyle.lineCap;
299 }
300 
301 const LibBoard::LineJoin & LibBoard::Style::defaultLineJoin()
302 {
303  return _defaultStyle.lineJoin;
304 }
305 
306 #endif /* BOARD_STYLE_H */
LibBoard::Style::defaultPenColor
static const Color & defaultPenColor()
defaultPenColor
Definition: Style.h:281
LibBoard::Style
Definition: Style.h:69
LibBoard::Style::defaultLineWidth
static const double & defaultLineWidth()
defaultLineWidth
Definition: Style.h:276
LibBoard::Style::withLineWidth
Style withLineWidth(double width) const
Definition: Style.h:243
LibBoard::Style::withLineStyle
Style withLineStyle(LineStyle lineStyle) const
Definition: Style.h:250
LibBoard::Style::withPenColor
Style withPenColor(const Color &color) const
Definition: Style.h:229
LibBoard::Style::Style
Style()
Definition: Style.cpp:64
LibBoard::Style::defaultFillColor
static const Color & defaultFillColor()
defaultFillColor
Definition: Style.h:286
LibBoard::Style::tikzProperties
std::string tikzProperties(const TransformTikZ &transform) const
Definition: Style.cpp:111
LibBoard::TransformEPS
Structure representing a scaling and translation suitable for an EPS output.
Definition: Transforms.h:71
LibBoard::Style::postscriptProperties
std::string postscriptProperties(const TransformEPS &transform) const
Definition: Style.cpp:101
LibBoard::Style::defaultLineCap
static const LineCap & defaultLineCap()
defaultLineCap
Definition: Style.h:296
LibBoard::Style::withFillColor
Style withFillColor(const Color &color) const
Definition: Style.h:236
LibBoard::Style::push
static void push()
Definition: Style.cpp:160
LibBoard::TransformTikZ
Structure representing a scaling and translation suitable for an TikZ output.
Definition: Transforms.h:126
LibBoard::Style::pop
static void pop()
Definition: Style.cpp:165
Color.h
The Color structure. @copyright This source code is part of the Board project, a C++ library whose pu...
LibBoard::Style::withLineCap
Style withLineCap(LineCap lineCap) const
Definition: Style.h:257
LibBoard::Style::defaultLineJoin
static const LineJoin & defaultLineJoin()
defaultLineJoin
Definition: Style.h:301
LibBoard::Style::defaultLineStyle
static const LineStyle & defaultLineStyle()
defaultLineStyle
Definition: Style.h:291
LibBoard::Style::withLineJoin
Style withLineJoin(LineJoin lineJoin) const
Definition: Style.h:264
LibBoard::Style::svgProperties
std::string svgProperties(const TransformSVG &transform) const
Definition: Style.cpp:74
LibBoard::Style::defaultStyle
static const Style & defaultStyle()
defaultStyle
Definition: Style.h:271
LibBoard::TransformSVG
Structure representing a scaling and translation suitable for an SVG output.
Definition: Transforms.h:109
LibBoard::Color
Structure representing an RGB triple.
Definition: Color.h:43