CDRTypes.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 part of the libcdr 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 __CDRTYPES_H__
11 #define __CDRTYPES_H__
12 
13 #include <vector>
14 #include <math.h>
15 #include <librevenge/librevenge.h>
16 #include "CDRTransforms.h"
17 #include "CDRPath.h"
18 #include "libcdr_utils.h"
19 
20 namespace libcdr
21 {
22 
23 struct CDRBox
24 {
25  double m_x;
26  double m_y;
27  double m_w;
28  double m_h;
30  : m_x(0.0), m_y(0.0), m_w(0.0), m_h(0.0) {}
31  CDRBox(double x0, double y0, double x1, double y1)
32  : m_x(x0 < x1 ? x0 : x1), m_y(y0 < y1 ? y0 : y1), m_w(fabs(x1-x0)), m_h(fabs(y1-y0)) {}
33  double getWidth() const
34  {
35  return m_w;
36  }
37  double getHeight() const
38  {
39  return m_h;
40  }
41  double getMinX() const
42  {
43  return m_x;
44  }
45  double getMinY() const
46  {
47  return m_y;
48  }
49 
50 };
51 
52 struct CDRColor
53 {
54  unsigned short m_colorModel;
55  unsigned m_colorValue;
57  CDRColor(unsigned short colorModel, unsigned colorValue)
58  : m_colorModel(colorModel), m_colorValue(colorValue) {}
59 };
60 
62 {
64  double m_offset;
66  CDRGradientStop(const CDRColor &color, double offset)
67  : m_color(color), m_offset(offset) {}
68 };
69 
71 {
72  unsigned char m_type;
73  unsigned char m_mode;
74  double m_angle;
75  double m_midPoint;
79  std::vector<CDRGradientStop> m_stops;
81  : m_type(0), m_mode(0), m_angle(0.0), m_midPoint(0.0), m_edgeOffset(0), m_centerXOffset(0), m_centerYOffset(0), m_stops() {}
82 };
83 
85 {
86  unsigned id;
87  double width;
88  double height;
89  bool isRelative;
90  double xOffset;
91  double yOffset;
92  double rcpOffset;
93  unsigned char flags;
94  CDRImageFill() : id(0), width(0.0), height(0.0), isRelative(false), xOffset(0.0), yOffset(0.0), rcpOffset(0.0), flags(0)
95  {}
96  CDRImageFill(unsigned i, double w, double h, bool r, double x, double y, double o, unsigned char f)
97  : id(i), width(w), height(h), isRelative(r), xOffset(x), yOffset(y), rcpOffset(o), flags(f) {}
98 };
99 
101 {
102  unsigned short fillType;
107  : fillType((unsigned short)-1), color1(), color2(), gradient(), imageFill() {}
108  CDRFillStyle(unsigned short ft, CDRColor c1, CDRColor c2, const CDRGradient &gr, const CDRImageFill &img)
109  : fillType(ft), color1(c1), color2(c2), gradient(gr), imageFill(img) {}
110 };
111 
113 {
114  unsigned short lineType;
115  unsigned short capsType;
116  unsigned short joinType;
117  double lineWidth;
118  double stretch;
119  double angle;
121  std::vector<unsigned> dashArray;
125  : lineType((unsigned short)-1), capsType(0), joinType(0), lineWidth(0.0),
126  stretch(0.0), angle(0.0), color(), dashArray(),
127  startMarker(), endMarker() {}
128  CDRLineStyle(unsigned short lt, unsigned short ct, unsigned short jt,
129  double lw, double st, double a, const CDRColor &c, const std::vector<unsigned> &da,
130  const CDRPath &sm, const CDRPath &em)
131  : lineType(lt), capsType(ct), joinType(jt), lineWidth(lw),
132  stretch(st), angle(a), color(c), dashArray(da),
133  startMarker(sm), endMarker(em) {}
134 };
135 
136 struct CDRStyle
137 {
138  unsigned short m_charSet;
139  librevenge::RVNGString m_fontName;
140  double m_fontSize;
141  unsigned m_align;
145  unsigned m_parentId;
147  : m_charSet((unsigned short)-1), m_fontName(),
148  m_fontSize(0.0), m_align(0), m_leftIndent(0.0), m_firstIndent(0.0),
150  {
151  m_fontName.clear();
152  }
153  void overrideStyle(const CDRStyle &override)
154  {
155  if (override.m_charSet != (unsigned short)-1 || override.m_fontName.len())
156  {
157  m_charSet = override.m_charSet;
158  m_fontName = override.m_fontName;
159  }
160  if (!CDR_ALMOST_ZERO(override.m_fontSize))
161  m_fontSize = override.m_fontSize;
162  if (override.m_align)
163  m_align = override.m_align;
164  if (override.m_leftIndent != 0.0 && override.m_firstIndent != 0.0 && override.m_rightIndent != 0.0)
165  {
166  m_leftIndent = override.m_leftIndent;
167  m_firstIndent = override.m_firstIndent;
168  m_rightIndent = override.m_rightIndent;
169  }
170  if (override.m_lineStyle.lineType != (unsigned short)-1)
171  m_lineStyle = override.m_lineStyle;
172  if (override.m_fillStyle.fillType != (unsigned short)-1)
173  m_fillStyle = override.m_fillStyle;
174  }
175 };
176 
178 {
179  unsigned m_numAngles;
180  unsigned m_nextPoint;
181  double m_rx;
182  double m_ry;
183  double m_cx;
184  double m_cy;
185  CDRPolygon() : m_numAngles(0), m_nextPoint(0), m_rx(0.0), m_ry(0.0), m_cx(0.0), m_cy(0.0) {}
186  CDRPolygon(unsigned numAngles, unsigned nextPoint, double rx, double ry, double cx, double cy)
187  : m_numAngles(numAngles), m_nextPoint(nextPoint), m_rx(rx), m_ry(ry), m_cx(cx), m_cy(cy) {}
188  void create(CDRPath &path) const;
189 };
190 
191 struct CDRImage
192 {
193  librevenge::RVNGBinaryData m_image;
194  double m_x1;
195  double m_x2;
196  double m_y1;
197  double m_y2;
198  CDRImage() : m_image(), m_x1(0.0), m_x2(0.0), m_y1(0.0), m_y2(0.0) {}
199  CDRImage(const librevenge::RVNGBinaryData &image, double x1, double x2, double y1, double y2)
200  : m_image(image), m_x1(x1), m_x2(x2), m_y1(y1), m_y2(y2) {}
201  double getMiddleX() const
202  {
203  return (m_x1 + m_x2) / 2.0;
204  }
205  double getMiddleY() const
206  {
207  return (m_y1 + m_y2) / 2.0;
208  }
209  const librevenge::RVNGBinaryData &getImage() const
210  {
211  return m_image;
212  }
213 };
214 
216 {
217  unsigned width;
218  unsigned height;
219  std::vector<unsigned char> pattern;
220  CDRPattern() : width(0), height(0), pattern() {}
221  CDRPattern(unsigned w, unsigned h, const std::vector<unsigned char> &p)
222  : width(w), height(h), pattern(p) {}
223 };
224 
225 struct CDRBitmap
226 {
227  unsigned colorModel;
228  unsigned width;
229  unsigned height;
230  unsigned bpp;
231  std::vector<unsigned> palette;
232  std::vector<unsigned char> bitmap;
233  CDRBitmap() : colorModel(0), width(0), height(0), bpp(0), palette(), bitmap() {}
234  CDRBitmap(unsigned cm, unsigned w, unsigned h, unsigned b, const std::vector<unsigned> &p, const std::vector<unsigned char> &bmp)
235  : colorModel(cm), width(w), height(h), bpp(b), palette(p), bitmap(bmp) {}
236 };
237 
238 struct CDRPage
239 {
240  double width;
241  double height;
242  double offsetX;
243  double offsetY;
244  CDRPage() : width(0.0), height(0.0), offsetX(0.0), offsetY(0.0) {}
245  CDRPage(double w, double h, double ox, double oy)
246  : width(w), height(h), offsetX(ox), offsetY(oy) {}
247 };
248 
250 {
251  std::vector<std::pair<double, double> > points;
252  std::vector<unsigned> knotVector;
254  CDRSplineData(const std::vector<std::pair<double, double> > &ps, const std::vector<unsigned> &kntv)
255  : points(ps), knotVector(kntv) {}
256  void clear()
257  {
258  points.clear();
259  knotVector.clear();
260  }
261  bool empty()
262  {
263  return (points.empty() || knotVector.empty());
264  }
265  void create(CDRPath &path) const;
266 };
267 
269 {
270  WaldoRecordInfo(unsigned char t, unsigned i, unsigned o)
271  : type(t), id(i), offset(o) {}
272  WaldoRecordInfo() : type(0), id(0), offset(0) {}
273  unsigned char type;
274  unsigned id;
275  unsigned offset;
276 };
277 
279 {
280  WaldoRecordType1(unsigned id, unsigned short next, unsigned short previous,
281  unsigned short child, unsigned short parent, unsigned short flags,
282  double x0, double y0, double x1, double y1, const CDRTransform &trafo)
283  : m_id(id), m_next(next), m_previous(previous), m_child(child), m_parent(parent),
284  m_flags(flags), m_x0(x0), m_y0(y0), m_x1(x1), m_y1(y1), m_trafo(trafo) {}
286  : m_id(0), m_next(0), m_previous(0), m_child(0), m_parent(0), m_flags(0),
287  m_x0(0.0), m_y0(0.0), m_x1(0.0), m_y1(0.0), m_trafo() {}
288  unsigned m_id;
289  unsigned short m_next;
290  unsigned short m_previous;
291  unsigned short m_child;
292  unsigned short m_parent;
293  unsigned short m_flags;
294  double m_x0;
295  double m_y0;
296  double m_x1;
297  double m_y1;
299 };
300 
302 {
303  CDRCMYKColor(double cyan, double magenta, double yellow, double black)
304  : c(cyan), m(magenta), y(yellow), k(black) {}
306  double c;
307  double m;
308  double y;
309  double k;
310 };
311 
313 {
314  CDRRGBColor(double red, double green, double blue)
315  : r(red), g(green), b(blue) {}
317  double r;
318  double g;
319  double b;
320 };
321 
323 {
324  CDRLab2Color(double l, double A, double B)
325  : L(l), a(A), b(B) {}
327  double L;
328  double a;
329  double b;
330 };
331 
333 {
334  CDRLab4Color(double l, double A, double B)
335  : L(l), a(A), b(B) {}
337  double L;
338  double a;
339  double b;
340 };
341 
342 struct CDRText
343 {
344  CDRText() : m_text(), m_style() {}
345  CDRText(const librevenge::RVNGString &text, const CDRStyle &style)
346  : m_text(text), m_style(style) {}
347  librevenge::RVNGString m_text;
349 };
350 
352 {
354  CDRTextLine(const CDRTextLine &line) : m_line(line.m_line) {}
355  void append(const CDRText &text)
356  {
357  m_line.push_back(text);
358  }
359  void clear()
360  {
361  m_line.clear();
362  }
363  std::vector<CDRText> m_line;
364 };
365 
366 struct CDRFont
367 {
368  CDRFont() : m_name(), m_encoding(0) {}
369  CDRFont(const librevenge::RVNGString &name, unsigned short encoding)
370  : m_name(name), m_encoding(encoding) {}
371  CDRFont(const CDRFont &font)
372  : m_name(font.m_name), m_encoding(font.m_encoding) {}
373  librevenge::RVNGString m_name;
374  unsigned short m_encoding;
375 };
376 
377 } // namespace libcdr
378 
379 #endif /* __CDRTYPES_H__ */
380 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
int m_centerYOffset
Definition: CDRTypes.h:78
CDRBitmap()
Definition: CDRTypes.h:233
double m_rightIndent
Definition: CDRTypes.h:142
void append(const CDRText &text)
Definition: CDRTypes.h:355
CDRTextLine(const CDRTextLine &line)
Definition: CDRTypes.h:354
CDRImage()
Definition: CDRTypes.h:198
Definition: CDRTypes.h:366
unsigned m_nextPoint
Definition: CDRTypes.h:180
double m_x
Definition: CDRTypes.h:25
librevenge::RVNGString m_text
Definition: CDRTypes.h:347
unsigned char type
Definition: CDRTypes.h:273
unsigned id
Definition: CDRTypes.h:274
CDRLab2Color(double l, double A, double B)
Definition: CDRTypes.h:324
double a
Definition: CDRTypes.h:328
double m_x1
Definition: CDRTypes.h:194
Definition: CDRTypes.h:301
double r
Definition: CDRTypes.h:317
double yOffset
Definition: CDRTypes.h:91
~CDRLab2Color()
Definition: CDRTypes.h:326
double getMiddleY() const
Definition: CDRTypes.h:205
~CDRRGBColor()
Definition: CDRTypes.h:316
unsigned width
Definition: CDRTypes.h:217
CDRColor color
Definition: CDRTypes.h:120
CDRPattern()
Definition: CDRTypes.h:220
Definition: CDRTypes.h:23
CDRFont(const librevenge::RVNGString &name, unsigned short encoding)
Definition: CDRTypes.h:369
unsigned short m_parent
Definition: CDRTypes.h:292
WaldoRecordType1()
Definition: CDRTypes.h:285
double width
Definition: CDRTypes.h:87
void create(CDRPath &path) const
Definition: CDRTypes.cpp:54
CDRColor color1
Definition: CDRTypes.h:103
unsigned short m_previous
Definition: CDRTypes.h:290
CDRColor color2
Definition: CDRTypes.h:103
Definition: CDRPath.h:34
CDRPath endMarker
Definition: CDRTypes.h:123
double angle
Definition: CDRTypes.h:119
CDRRGBColor(double red, double green, double blue)
Definition: CDRTypes.h:314
Definition: CDRTypes.h:342
double getHeight() const
Definition: CDRTypes.h:37
double y
Definition: CDRTypes.h:308
unsigned colorModel
Definition: CDRTypes.h:227
std::vector< unsigned char > bitmap
Definition: CDRTypes.h:232
Definition: CDRTypes.h:238
double m_y0
Definition: CDRTypes.h:295
double m_x2
Definition: CDRTypes.h:195
WaldoRecordInfo(unsigned char t, unsigned i, unsigned o)
Definition: CDRTypes.h:270
unsigned short m_next
Definition: CDRTypes.h:289
CDRSplineData()
Definition: CDRTypes.h:253
Definition: CDRTypes.h:84
double m_cy
Definition: CDRTypes.h:184
double m
Definition: CDRTypes.h:307
Definition: CDRTypes.h:312
bool isRelative
Definition: CDRTypes.h:89
Definition: CDRTransforms.h:21
void clear()
Definition: CDRTypes.h:359
Definition: CDRTypes.h:351
CDRFont()
Definition: CDRTypes.h:368
CDRImageFill()
Definition: CDRTypes.h:94
unsigned short m_flags
Definition: CDRTypes.h:293
double width
Definition: CDRTypes.h:240
unsigned m_id
Definition: CDRTypes.h:288
Definition: CDRTypes.h:249
double m_fontSize
Definition: CDRTypes.h:140
void create(CDRPath &path) const
Definition: CDRTypes.cpp:14
Definition: CDRTypes.h:322
CDRColor m_color
Definition: CDRTypes.h:63
CDRFont(const CDRFont &font)
Definition: CDRTypes.h:371
unsigned short capsType
Definition: CDRTypes.h:115
librevenge::RVNGString m_fontName
Definition: CDRTypes.h:139
CDRImageFill(unsigned i, double w, double h, bool r, double x, double y, double o, unsigned char f)
Definition: CDRTypes.h:96
double offsetX
Definition: CDRTypes.h:242
~CDRCMYKColor()
Definition: CDRTypes.h:305
Definition: CDRTypes.h:100
double height
Definition: CDRTypes.h:88
CDRPage()
Definition: CDRTypes.h:244
const librevenge::RVNGBinaryData & getImage() const
Definition: CDRTypes.h:209
CDRPolygon(unsigned numAngles, unsigned nextPoint, double rx, double ry, double cx, double cy)
Definition: CDRTypes.h:186
CDRLineStyle()
Definition: CDRTypes.h:124
Definition: CDRTypes.h:177
unsigned short joinType
Definition: CDRTypes.h:116
double rcpOffset
Definition: CDRTypes.h:92
CDRLineStyle m_lineStyle
Definition: CDRTypes.h:143
CDRGradient gradient
Definition: CDRTypes.h:104
CDRFillStyle(unsigned short ft, CDRColor c1, CDRColor c2, const CDRGradient &gr, const CDRImageFill &img)
Definition: CDRTypes.h:108
CDRText()
Definition: CDRTypes.h:344
double xOffset
Definition: CDRTypes.h:90
double m_cx
Definition: CDRTypes.h:183
double getMinY() const
Definition: CDRTypes.h:45
unsigned char m_mode
Definition: CDRTypes.h:73
double m_x0
Definition: CDRTypes.h:294
double getMiddleX() const
Definition: CDRTypes.h:201
CDRColor()
Definition: CDRTypes.h:56
CDRFillStyle()
Definition: CDRTypes.h:106
librevenge::RVNGString m_name
Definition: CDRTypes.h:373
CDRPage(double w, double h, double ox, double oy)
Definition: CDRTypes.h:245
unsigned bpp
Definition: CDRTypes.h:230
CDRGradientStop(const CDRColor &color, double offset)
Definition: CDRTypes.h:66
std::vector< unsigned > dashArray
Definition: CDRTypes.h:121
Definition: CDRTypes.h:278
Definition: CDRCollector.h:29
double m_h
Definition: CDRTypes.h:28
double L
Definition: CDRTypes.h:327
unsigned short m_colorModel
Definition: CDRTypes.h:54
double b
Definition: CDRTypes.h:329
int m_edgeOffset
Definition: CDRTypes.h:76
double m_y1
Definition: CDRTypes.h:297
librevenge::RVNGBinaryData m_image
Definition: CDRTypes.h:193
unsigned offset
Definition: CDRTypes.h:275
CDRTextLine()
Definition: CDRTypes.h:353
Definition: CDRTypes.h:332
Definition: CDRTypes.h:268
double m_ry
Definition: CDRTypes.h:182
unsigned short lineType
Definition: CDRTypes.h:114
double getMinX() const
Definition: CDRTypes.h:41
bool empty()
Definition: CDRTypes.h:261
CDRText(const librevenge::RVNGString &text, const CDRStyle &style)
Definition: CDRTypes.h:345
CDRGradientStop()
Definition: CDRTypes.h:65
void clear()
Definition: CDRTypes.h:256
double getWidth() const
Definition: CDRTypes.h:33
CDRStyle()
Definition: CDRTypes.h:146
std::vector< CDRGradientStop > m_stops
Definition: CDRTypes.h:79
WaldoRecordInfo()
Definition: CDRTypes.h:272
unsigned char m_type
Definition: CDRTypes.h:72
CDRBitmap(unsigned cm, unsigned w, unsigned h, unsigned b, const std::vector< unsigned > &p, const std::vector< unsigned char > &bmp)
Definition: CDRTypes.h:234
unsigned id
Definition: CDRTypes.h:86
double m_y1
Definition: CDRTypes.h:196
unsigned m_align
Definition: CDRTypes.h:141
double m_rx
Definition: CDRTypes.h:181
CDRPath startMarker
Definition: CDRTypes.h:122
double m_midPoint
Definition: CDRTypes.h:75
CDRLab4Color(double l, double A, double B)
Definition: CDRTypes.h:334
unsigned short fillType
Definition: CDRTypes.h:102
CDRGradient()
Definition: CDRTypes.h:80
#define CDR_ALMOST_ZERO(m)
Definition: libcdr_utils.h:31
double L
Definition: CDRTypes.h:337
CDRImageFill imageFill
Definition: CDRTypes.h:105
unsigned height
Definition: CDRTypes.h:218
CDRTransform m_trafo
Definition: CDRTypes.h:298
double stretch
Definition: CDRTypes.h:118
WaldoRecordType1(unsigned id, unsigned short next, unsigned short previous, unsigned short child, unsigned short parent, unsigned short flags, double x0, double y0, double x1, double y1, const CDRTransform &trafo)
Definition: CDRTypes.h:280
unsigned short m_encoding
Definition: CDRTypes.h:374
std::vector< CDRText > m_line
Definition: CDRTypes.h:363
double b
Definition: CDRTypes.h:319
unsigned width
Definition: CDRTypes.h:228
std::vector< unsigned char > pattern
Definition: CDRTypes.h:219
CDRCMYKColor(double cyan, double magenta, double yellow, double black)
Definition: CDRTypes.h:303
double m_y2
Definition: CDRTypes.h:197
double b
Definition: CDRTypes.h:339
CDRBox()
Definition: CDRTypes.h:29
double g
Definition: CDRTypes.h:318
unsigned m_colorValue
Definition: CDRTypes.h:55
CDRFillStyle m_fillStyle
Definition: CDRTypes.h:144
double m_x1
Definition: CDRTypes.h:296
CDRImage(const librevenge::RVNGBinaryData &image, double x1, double x2, double y1, double y2)
Definition: CDRTypes.h:199
double a
Definition: CDRTypes.h:338
Definition: CDRTypes.h:112
int m_centerXOffset
Definition: CDRTypes.h:77
unsigned m_numAngles
Definition: CDRTypes.h:179
double m_y
Definition: CDRTypes.h:26
unsigned height
Definition: CDRTypes.h:229
CDRLineStyle(unsigned short lt, unsigned short ct, unsigned short jt, double lw, double st, double a, const CDRColor &c, const std::vector< unsigned > &da, const CDRPath &sm, const CDRPath &em)
Definition: CDRTypes.h:128
unsigned short m_charSet
Definition: CDRTypes.h:138
unsigned char flags
Definition: CDRTypes.h:93
double k
Definition: CDRTypes.h:309
Definition: CDRTypes.h:225
Definition: CDRTypes.h:52
double c
Definition: CDRTypes.h:306
CDRStyle m_style
Definition: CDRTypes.h:348
CDRPolygon()
Definition: CDRTypes.h:185
Definition: CDRTypes.h:215
double m_w
Definition: CDRTypes.h:27
std::vector< unsigned > knotVector
Definition: CDRTypes.h:252
CDRPattern(unsigned w, unsigned h, const std::vector< unsigned char > &p)
Definition: CDRTypes.h:221
double height
Definition: CDRTypes.h:241
Definition: CDRTypes.h:70
void overrideStyle(const CDRStyle &override)
Definition: CDRTypes.h:153
CDRBox(double x0, double y0, double x1, double y1)
Definition: CDRTypes.h:31
Definition: CDRTypes.h:191
double m_offset
Definition: CDRTypes.h:64
double m_leftIndent
Definition: CDRTypes.h:142
std::vector< unsigned > palette
Definition: CDRTypes.h:231
double lineWidth
Definition: CDRTypes.h:117
Definition: CDRTypes.h:61
double m_angle
Definition: CDRTypes.h:74
double m_firstIndent
Definition: CDRTypes.h:142
unsigned m_parentId
Definition: CDRTypes.h:145
CDRSplineData(const std::vector< std::pair< double, double > > &ps, const std::vector< unsigned > &kntv)
Definition: CDRTypes.h:254
double offsetY
Definition: CDRTypes.h:243
~CDRLab4Color()
Definition: CDRTypes.h:336
CDRColor(unsigned short colorModel, unsigned colorValue)
Definition: CDRTypes.h:57
Definition: CDRTypes.h:136
std::vector< std::pair< double, double > > points
Definition: CDRTypes.h:251
unsigned short m_child
Definition: CDRTypes.h:291

Generated for libcdr by doxygen 1.8.14