ZMFTypes.h
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /*
3  * This file is a part of the libzmf project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  */
9 
10 #ifndef ZMFTYPES_H_INCLUDED
11 #define ZMFTYPES_H_INCLUDED
12 
13 #include <vector>
14 #include <memory>
15 
16 #include <boost/optional.hpp>
17 #include <boost/variant.hpp>
18 
19 #include "libzmf_utils.h"
20 
21 namespace libzmf
22 {
23 
24 struct Point
25 {
26  double x;
27  double y;
28 
30  : x(0.0), y(0.0)
31  { }
32 
33  Point(double xVal, double yVal)
34  : x(xVal), y(yVal)
35  { }
36 
37  Point move(double dx, double dy) const;
38  Point rotate(double rotation, const Point &center) const;
39 
40  double distance(const Point &p2) const;
41 };
42 
43 bool operator==(const Point &lhs, const Point &rhs);
44 bool operator!=(const Point &lhs, const Point &rhs);
45 
47 {
48  BoundingBox(const std::vector<Point> &points);
49 
50  const std::vector<Point> &points() const;
51 
52  double width() const;
53  double height() const;
54 
55  Point center() const;
56  Point topLeft() const;
57 
58  double rotation() const;
59 
60  int p1Quadrant() const;
61  int p2Quadrant() const;
62 
63  bool mirrorHorizontal() const;
64  bool mirrorVertical() const;
65 
66 private:
67  int quadrant(const Point &p) const;
68 
69  const std::vector<Point> m_points;
70  double m_width;
71  double m_height;
73  double m_rotation;
78 };
79 
80 enum class CurveType
81 {
82  LINE,
84 };
85 
86 struct Curve
87 {
88  std::vector<Point> points;
89  std::vector<CurveType> sectionTypes;
90  bool closed;
91 
93  : points(), sectionTypes(), closed(false)
94  { }
95 };
96 
97 struct Color
98 {
99  uint8_t red;
100  uint8_t green;
101  uint8_t blue;
102 
104  : red(0), green(0), blue(0)
105  { }
106 
107  Color(uint8_t r, uint8_t g, uint8_t b)
108  : red(r), green(g), blue(b)
109  { }
110 
111  librevenge::RVNGString toString() const;
112 };
113 
114 enum class LineCapType
115 {
116  BUTT,
117  FLAT,
118  ROUND,
119  POINTED
120 };
121 
122 enum class LineJoinType
123 {
124  MITER,
125  ROUND,
126  BEVEL
127 };
128 
129 struct Arrow
130 {
131  std::vector<Curve> curves;
132  double lineEndX;
133 
135  : curves(), lineEndX(0.0)
136  { }
137 };
138 
139 typedef std::shared_ptr<Arrow> ArrowPtr;
140 
141 struct Pen
142 {
144  double width;
147  std::vector<double> dashPattern;
148  double dashDistance;
152 
153  Pen()
154  : color(), width(0.0),
157  startArrow(), endArrow(),
158  isInvisible(false)
159  { }
160 
162  : color(c),
163  width(0.0),
166  startArrow(), endArrow(),
167  isInvisible(false)
168  { }
169 };
170 
172 {
174  double offset;
175 
177  : color(), offset(0.0)
178  { }
179 };
180 
181 enum class GradientType
182 {
183  LINEAR,
184  RADIAL,
185  CONICAL,
186  CROSS,
187  RECTANGULAR,
188  FLEXIBLE
189 };
190 
191 struct Gradient
192 {
194  std::vector<GradientStop> stops;
195  double angle;
197 
199  : type(), stops(), angle(0.0), center(0.5, 0.5)
200  { }
201 };
202 
203 struct Image
204 {
205  uint32_t width;
206  uint32_t height;
207  librevenge::RVNGBinaryData data;
208 
210  : width(0), height(0), data()
211  { }
212 
213  Image(uint32_t w, uint32_t h, librevenge::RVNGBinaryData d)
214  : width(w), height(h), data(d)
215  { }
216 };
217 
218 struct ImageFill
219 {
221  bool tile;
222  double tileWidth;
223  double tileHeight;
224 
226  : image(), tile(false), tileWidth(0.0), tileHeight(0.0)
227  { }
228 };
229 
230 typedef boost::variant<Color, Gradient, ImageFill> Fill;
231 
233 {
235 
236  double opacity() const
237  {
238  return 1.0 - color.red / 255.0;
239  }
240 
242  : color()
243  { }
244 };
245 
246 struct Shadow
247 {
249  double angle;
250  double opacity;
252 
254  : offset(), angle(0.0), opacity(1.0), color()
255  { }
256 };
257 
258 struct Style
259 {
260  boost::optional<Pen> pen;
261  boost::optional<Fill> fill;
262  boost::optional<Transparency> transparency;
263  boost::optional<Shadow> shadow;
264 
266  : pen(), fill(), transparency(), shadow()
267  { }
268 };
269 
270 struct Font
271 {
272  librevenge::RVNGString name;
273  double size;
274  bool isBold;
275  bool isItalic;
276  boost::optional<Fill> fill;
277  boost::optional<Pen> outline;
278 
280  : name("Arial"), size(24.0), isBold(false), isItalic(false),
281  fill(Color(0, 0, 0)), outline()
282  { }
283 };
284 
285 struct Span
286 {
287  librevenge::RVNGString text;
288  uint32_t length;
290 
292  : text(), length(0), font()
293  { }
294 };
295 
297 {
298  LEFT,
299  RIGHT,
300  BLOCK,
301  CENTER,
302  FULL
303 };
304 
306 {
307  TOP,
308  MIDDLE,
309  BOTTOM
310 };
311 
313 {
314  double lineSpacing;
317 
320  { }
321 };
322 
323 struct Paragraph
324 {
325  std::vector<Span> spans;
327 
329  : spans(), style()
330  { }
331 };
332 
333 struct Text
334 {
335  std::vector<Paragraph> paragraphs;
336 
338  : paragraphs()
339  { }
340 };
341 
342 struct Cell
343 {
345  boost::optional<Fill> fill;
346  boost::optional<Pen> leftBorder;
347  boost::optional<Pen> rightBorder;
348  boost::optional<Pen> topBorder;
349  boost::optional<Pen> bottomBorder;
350 
352  : text(), fill(),
354  { }
355 };
356 
357 struct Row
358 {
359  std::vector<Cell> cells;
360  double height;
361 
362  Row()
363  : cells(), height(0.0)
364  { }
365 };
366 
367 struct Column
368 {
369  double width;
370 
372  : width(0.0)
373  { }
374 };
375 
376 struct Table
377 {
378  std::vector<Row> rows;
379  std::vector<Column> columns;
380  double width;
381  double height;
383 
385  : rows(), columns(), width(0.0), height(0.0), topLeftPoint()
386  { }
387 };
388 
390 {
391  double width;
392  double height;
393  double leftOffset;
394  double topOffset;
396 
398  : width(0.0), height(0.0), leftOffset(0.0), topOffset(0.0), color()
399  { }
400  ZMFPageSettings(double w, double h, double left, double top, Color c = Color(255, 255, 255))
401  : width(w), height(h), leftOffset(left), topOffset(top), color(c)
402  { }
403 };
404 
405 }
406 
407 #endif // ZMFTYPES_H_INCLUDED
408 
409 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
libzmf::Font
Definition: ZMFTypes.h:271
libzmf::Point::move
Point move(double dx, double dy) const
Definition: ZMFTypes.cpp:27
libzmf::Image::Image
Image(uint32_t w, uint32_t h, librevenge::RVNGBinaryData d)
Definition: ZMFTypes.h:213
libzmf::BoundingBox::points
const std::vector< Point > & points() const
Definition: ZMFTypes.cpp:108
ZMF4Header.h
libzmf::BoundingBox::center
Point center() const
Definition: ZMFTypes.cpp:123
libzmf::Point::rotate
Point rotate(double rotation, const Point &center) const
Definition: ZMFTypes.cpp:32
libzmf::BoundingBox::BoundingBox
BoundingBox(const std::vector< Point > &points)
Definition: ZMFTypes.cpp:45
libzmf::ZMFPageSettings::ZMFPageSettings
ZMFPageSettings()
Definition: ZMFTypes.h:397
libzmf::Table::Table
Table()
Definition: ZMFTypes.h:384
libzmf::Pen::dashDistance
double dashDistance
Definition: ZMFTypes.h:148
libzmf::Shadow::color
Color color
Definition: ZMFTypes.h:251
libzmf::Font::name
librevenge::RVNGString name
Definition: ZMFTypes.h:272
libzmf::Cell::rightBorder
boost::optional< Pen > rightBorder
Definition: ZMFTypes.h:347
libzmf::Transparency::Transparency
Transparency()
Definition: ZMFTypes.h:241
libzmf::Style::transparency
boost::optional< Transparency > transparency
Definition: ZMFTypes.h:262
libzmf::BoundingBox::mirrorHorizontal
bool mirrorHorizontal() const
Definition: ZMFTypes.cpp:148
libzmf::ImageFill::image
Image image
Definition: ZMFTypes.h:220
libzmf::Style::shadow
boost::optional< Shadow > shadow
Definition: ZMFTypes.h:263
libzmf::Image::Image
Image()
Definition: ZMFTypes.h:209
libzmf::Text
Definition: ZMFTypes.h:334
libzmf::Arrow::lineEndX
double lineEndX
Definition: ZMFTypes.h:132
libzmf::Shadow::angle
double angle
Definition: ZMFTypes.h:249
libzmf::Font::fill
boost::optional< Fill > fill
Definition: ZMFTypes.h:276
libzmf::BoundingBox::m_mirrorHorizontal
bool m_mirrorHorizontal
Definition: ZMFTypes.h:76
libzmf::LineCapType
LineCapType
Definition: ZMFTypes.h:115
libzmf::Curve
Definition: ZMFTypes.h:87
libzmf::VerticalAlignment
VerticalAlignment
Definition: ZMFTypes.h:306
libzmf::ZMFPageSettings::width
double width
Definition: ZMFTypes.h:391
libzmf::Image::width
uint32_t width
Definition: ZMFTypes.h:205
libzmf::Span::length
uint32_t length
Definition: ZMFTypes.h:288
libzmf::BoundingBox
Definition: ZMFTypes.h:47
libzmf::GradientStop::offset
double offset
Definition: ZMFTypes.h:174
libzmf::Cell::Cell
Cell()
Definition: ZMFTypes.h:351
libzmf::Gradient::Gradient
Gradient()
Definition: ZMFTypes.h:198
ZMFTypes.h
libzmf::Column
Definition: ZMFTypes.h:368
libzmf::Span::text
librevenge::RVNGString text
Definition: ZMFTypes.h:287
libzmf::Color::Color
Color()
Definition: ZMFTypes.h:103
libzmf::Span
Definition: ZMFTypes.h:286
libzmf::GradientStop::GradientStop
GradientStop()
Definition: ZMFTypes.h:176
libzmf::Column::width
double width
Definition: ZMFTypes.h:369
libzmf::Table::width
double width
Definition: ZMFTypes.h:380
libzmf::Style::pen
boost::optional< Pen > pen
Definition: ZMFTypes.h:260
libzmf::ParagraphStyle::lineSpacing
double lineSpacing
Definition: ZMFTypes.h:314
libzmf::ArrowPtr
std::shared_ptr< Arrow > ArrowPtr
Definition: ZMFTypes.h:139
m_package
RVNGInputStreamPtr m_package
Definition: ZMFDocument.cpp:33
libzmf::Cell::fill
boost::optional< Fill > fill
Definition: ZMFTypes.h:345
libzmf::BoundingBox::m_height
double m_height
Definition: ZMFTypes.h:71
libzmf::Gradient
Definition: ZMFTypes.h:192
ZBRHeader.h
libzmf::ImageFill::tile
bool tile
Definition: ZMFTypes.h:221
libzmf::Span::font
Font font
Definition: ZMFTypes.h:289
libzmf::Color::Color
Color(uint8_t r, uint8_t g, uint8_t b)
Definition: ZMFTypes.h:107
libzmf::BoundingBox::m_width
double m_width
Definition: ZMFTypes.h:70
libzmf::BoundingBox::m_center
Point m_center
Definition: ZMFTypes.h:72
libzmf::Pen::lineCapType
LineCapType lineCapType
Definition: ZMFTypes.h:145
libzmf::BoundingBox::width
double width() const
Definition: ZMFTypes.cpp:113
libzmf::RVNGInputStreamPtr
std::shared_ptr< librevenge::RVNGInputStream > RVNGInputStreamPtr
Definition: libzmf_utils.h:80
libzmf::BoundingBox::mirrorVertical
bool mirrorVertical() const
Definition: ZMFTypes.cpp:153
libzmf::Cell
Definition: ZMFTypes.h:343
libzmf::Shadow
Definition: ZMFTypes.h:247
libzmf::Point
Definition: ZMFTypes.h:25
libzmf::Font::isItalic
bool isItalic
Definition: ZMFTypes.h:275
libzmf::HorizontalAlignment
HorizontalAlignment
Definition: ZMFTypes.h:297
libzmf::Column::Column
Column()
Definition: ZMFTypes.h:371
libzmf::Point::x
double x
Definition: ZMFTypes.h:26
ZBRParser.h
libzmf::Point::y
double y
Definition: ZMFTypes.h:27
libzmf::Color::blue
uint8_t blue
Definition: ZMFTypes.h:101
libzmf::Image::data
librevenge::RVNGBinaryData data
Definition: ZMFTypes.h:207
libzmf::Curve::sectionTypes
std::vector< CurveType > sectionTypes
Definition: ZMFTypes.h:89
libzmf::Arrow
Definition: ZMFTypes.h:130
libzmf::Paragraph::spans
std::vector< Span > spans
Definition: ZMFTypes.h:325
libzmf::Color::red
uint8_t red
Definition: ZMFTypes.h:99
libzmf::operator!=
bool operator!=(const BMIOffset &lhs, const BMIOffset &rhs)
Definition: BMITypes.cpp:20
libzmf::Transparency::opacity
double opacity() const
Definition: ZMFTypes.h:236
libzmf::Pen::color
Color color
Definition: ZMFTypes.h:143
libzmf::ImageFill::tileWidth
double tileWidth
Definition: ZMFTypes.h:222
libzmf::ImageFill::ImageFill
ImageFill()
Definition: ZMFTypes.h:225
libzmf::Paragraph::Paragraph
Paragraph()
Definition: ZMFTypes.h:328
libzmf::Color::green
uint8_t green
Definition: ZMFTypes.h:100
BMIParser.h
BMIHeader.h
libzmf
Definition: BMIHeader.cpp:14
libzmf::Pen::Pen
Pen()
Definition: ZMFTypes.h:153
libzmf::Gradient::angle
double angle
Definition: ZMFTypes.h:195
libzmf::ZMFPageSettings
Definition: ZMFTypes.h:390
libzmf::ParagraphStyle::ParagraphStyle
ParagraphStyle()
Definition: ZMFTypes.h:318
libzmf::ZMFPageSettings::height
double height
Definition: ZMFTypes.h:392
libzmf::Curve::points
std::vector< Point > points
Definition: ZMFTypes.h:88
libzmf::Pen::lineJoinType
LineJoinType lineJoinType
Definition: ZMFTypes.h:146
libzmf::VerticalAlignment::TOP
@ TOP
libzmf::Span::Span
Span()
Definition: ZMFTypes.h:291
libzmf::Table::topLeftPoint
Point topLeftPoint
Definition: ZMFTypes.h:382
libzmf::Table::height
double height
Definition: ZMFTypes.h:381
libzmf::LineCapType::BUTT
@ BUTT
libzmf::Fill
boost::variant< Color, Gradient, ImageFill > Fill
Definition: ZMFTypes.h:230
libzmf::Font::outline
boost::optional< Pen > outline
Definition: ZMFTypes.h:277
libzmf::Gradient::type
GradientType type
Definition: ZMFTypes.h:193
libzmf::BoundingBox::quadrant
int quadrant(const Point &p) const
Definition: ZMFTypes.cpp:158
libzmf::Curve::closed
bool closed
Definition: ZMFTypes.h:90
libzmf::BoundingBox::height
double height() const
Definition: ZMFTypes.cpp:118
ZMF_ALMOST_ZERO
#define ZMF_ALMOST_ZERO(m)
Definition: libzmf_utils.h:33
libzmf::Row::height
double height
Definition: ZMFTypes.h:360
libzmf::ParagraphStyle::font
Font font
Definition: ZMFTypes.h:316
libzmf::Pen::isInvisible
bool isInvisible
Definition: ZMFTypes.h:151
libzmf::ParagraphStyle::alignment
HorizontalAlignment alignment
Definition: ZMFTypes.h:315
libzmf::CurveType::LINE
@ LINE
libzmf::Pen::dashPattern
std::vector< double > dashPattern
Definition: ZMFTypes.h:147
libzmf::Pen::startArrow
ArrowPtr startArrow
Definition: ZMFTypes.h:149
libzmf::Shadow::Shadow
Shadow()
Definition: ZMFTypes.h:253
libzmf::ImageFill
Definition: ZMFTypes.h:219
libzmf::ZMFPageSettings::topOffset
double topOffset
Definition: ZMFTypes.h:394
libzmf::seek
void seek(const RVNGInputStreamPtr &input, const unsigned long pos)
Definition: libzmf_utils.cpp:182
libzmf::BoundingBox::topLeft
Point topLeft() const
Definition: ZMFTypes.cpp:128
libzmf::BoundingBox::m_points
const std::vector< Point > m_points
Definition: ZMFTypes.h:69
libzmf::LineJoinType::MITER
@ MITER
libzmf_utils.h
libzmf::Style::fill
boost::optional< Fill > fill
Definition: ZMFTypes.h:261
m_type
ZMFDocument::Type m_type
Definition: ZMFDocument.cpp:34
libzmf::operator==
bool operator==(const BMIOffset &lhs, const BMIOffset &rhs)
Definition: BMITypes.cpp:15
libzmf::Transparency
Definition: ZMFTypes.h:233
libzmf::Pen
Definition: ZMFTypes.h:142
libzmf::GradientStop::color
Color color
Definition: ZMFTypes.h:173
libzmf::Color
Definition: ZMFTypes.h:98
libzmf::Image::height
uint32_t height
Definition: ZMFTypes.h:206
libzmf::GradientStop
Definition: ZMFTypes.h:172
libzmf::Font::isBold
bool isBold
Definition: ZMFTypes.h:274
libzmf::Point::distance
double distance(const Point &p2) const
Definition: ZMFTypes.cpp:39
libzmf::GradientType::LINEAR
@ LINEAR
m_content
RVNGInputStreamPtr m_content
Definition: ZMFDocument.cpp:32
libzmf::BoundingBox::rotation
double rotation() const
Definition: ZMFTypes.cpp:133
libzmf::Pen::Pen
Pen(Color c)
Definition: ZMFTypes.h:161
ZMF4Parser.h
libzmf::Row::cells
std::vector< Cell > cells
Definition: ZMFTypes.h:359
libzmf::Cell::topBorder
boost::optional< Pen > topBorder
Definition: ZMFTypes.h:348
libzmf::HorizontalAlignment::LEFT
@ LEFT
libzmf::Transparency::color
Color color
Definition: ZMFTypes.h:234
libzmf::Point::Point
Point(double xVal, double yVal)
Definition: ZMFTypes.h:33
libzmf::Point::Point
Point()
Definition: ZMFTypes.h:29
libzmf::Curve::Curve
Curve()
Definition: ZMFTypes.h:92
libzmf::Pen::width
double width
Definition: ZMFTypes.h:144
libzmf::BoundingBox::p1Quadrant
int p1Quadrant() const
Definition: ZMFTypes.cpp:138
libzmf::Paragraph::style
ParagraphStyle style
Definition: ZMFTypes.h:326
libzmf::Arrow::Arrow
Arrow()
Definition: ZMFTypes.h:134
libzmf::Table
Definition: ZMFTypes.h:377
libzmf::Shadow::opacity
double opacity
Definition: ZMFTypes.h:250
libzmf::Row::Row
Row()
Definition: ZMFTypes.h:362
m_kind
ZMFDocument::Kind m_kind
Definition: ZMFDocument.cpp:35
libzmf::Shadow::offset
Point offset
Definition: ZMFTypes.h:248
libzmf::Font::Font
Font()
Definition: ZMFTypes.h:279
libzmf::ParagraphStyle
Definition: ZMFTypes.h:313
libzmf::Image
Definition: ZMFTypes.h:204
libzmf::BoundingBox::p2Quadrant
int p2Quadrant() const
Definition: ZMFTypes.cpp:143
libzmf::Gradient::center
Point center
Definition: ZMFTypes.h:196
libzmf::Cell::text
Text text
Definition: ZMFTypes.h:344
libzmf::Cell::leftBorder
boost::optional< Pen > leftBorder
Definition: ZMFTypes.h:346
libzmf::Font::size
double size
Definition: ZMFTypes.h:273
libzmf::Text::paragraphs
std::vector< Paragraph > paragraphs
Definition: ZMFTypes.h:335
libzmf::Table::columns
std::vector< Column > columns
Definition: ZMFTypes.h:379
libzmf::ZMFPageSettings::leftOffset
double leftOffset
Definition: ZMFTypes.h:393
libzmf::ZMFPageSettings::ZMFPageSettings
ZMFPageSettings(double w, double h, double left, double top, Color c=Color(255, 255, 255))
Definition: ZMFTypes.h:400
libzmf::Text::Text
Text()
Definition: ZMFTypes.h:337
libzmf::Pen::endArrow
ArrowPtr endArrow
Definition: ZMFTypes.h:150
libzmf::Cell::bottomBorder
boost::optional< Pen > bottomBorder
Definition: ZMFTypes.h:349
libzmf::LineJoinType
LineJoinType
Definition: ZMFTypes.h:123
libzmf::Gradient::stops
std::vector< GradientStop > stops
Definition: ZMFTypes.h:194
libzmf::Arrow::curves
std::vector< Curve > curves
Definition: ZMFTypes.h:131
libzmf::ImageFill::tileHeight
double tileHeight
Definition: ZMFTypes.h:223
libzmf::BoundingBox::m_mirrorVertical
bool m_mirrorVertical
Definition: ZMFTypes.h:77
libzmf::Style
Definition: ZMFTypes.h:259
libzmf::ZMFPageSettings::color
Color color
Definition: ZMFTypes.h:395
libzmf::Row
Definition: ZMFTypes.h:358
libzmf::Table::rows
std::vector< Row > rows
Definition: ZMFTypes.h:378
libzmf::BoundingBox::m_rotation
double m_rotation
Definition: ZMFTypes.h:73
libzmf::GenericException
Definition: libzmf_utils.h:149
libzmf::Color::toString
librevenge::RVNGString toString() const
Definition: ZMFTypes.cpp:177
libzmf::BoundingBox::m_p1Quadrant
int m_p1Quadrant
Definition: ZMFTypes.h:74
libzmf::Paragraph
Definition: ZMFTypes.h:324
libzmf::BoundingBox::m_p2Quadrant
int m_p2Quadrant
Definition: ZMFTypes.h:75
libzmf::Style::Style
Style()
Definition: ZMFTypes.h:265
libzmf::CurveType
CurveType
Definition: ZMFTypes.h:81
libzmf::GradientType
GradientType
Definition: ZMFTypes.h:182

Generated for libzmf by doxygen 1.8.20