/src/libmspub/src/lib/ShapeInfo.h
Line | Count | Source |
1 | | /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
2 | | /* |
3 | | * This file is part of the libmspub 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 INCLUDED_SHAPEINFO_H |
11 | | #define INCLUDED_SHAPEINFO_H |
12 | | |
13 | | #include <functional> |
14 | | #include <map> |
15 | | #include <memory> |
16 | | #include <vector> |
17 | | |
18 | | #include <boost/optional.hpp> |
19 | | |
20 | | #include "Arrow.h" |
21 | | #include "ColorReference.h" |
22 | | #include "Coordinate.h" |
23 | | #include "Dash.h" |
24 | | #include "Fill.h" |
25 | | #include "Line.h" |
26 | | #include "MSPUBTypes.h" |
27 | | #include "Margins.h" |
28 | | #include "PolygonUtils.h" |
29 | | #include "Shadow.h" |
30 | | #include "ShapeType.h" |
31 | | #include "TableInfo.h" |
32 | | #include "VerticalAlign.h" |
33 | | |
34 | | namespace libmspub |
35 | | { |
36 | | void noop(const CustomShape *); |
37 | | struct ShapeInfo |
38 | | { |
39 | | boost::optional<ShapeType> m_type; |
40 | | boost::optional<ShapeType> m_cropType; |
41 | | boost::optional<unsigned> m_imgIndex; |
42 | | boost::optional<unsigned> m_borderImgIndex; |
43 | | boost::optional<Coordinate> m_coordinates; |
44 | | std::vector<Line> m_lines; |
45 | | boost::optional<unsigned> m_pageSeqNum; |
46 | | boost::optional<unsigned> m_textId; |
47 | | std::map<unsigned, int> m_adjustValuesByIndex; |
48 | | std::vector<int> m_adjustValues; |
49 | | boost::optional<double> m_rotation; |
50 | | boost::optional<std::pair<bool, bool> > m_flips; |
51 | | boost::optional<Margins> m_margins; |
52 | | boost::optional<BorderPosition> m_borderPosition; // Irrelevant except for rectangular shapes |
53 | | std::shared_ptr<const Fill> m_fill; |
54 | | boost::optional<DynamicCustomShape> m_customShape; |
55 | | bool m_stretchBorderArt; |
56 | | boost::optional<ColorReference> m_lineBackColor; |
57 | | boost::optional<Dash> m_dash; |
58 | | boost::optional<TableInfo> m_tableInfo; |
59 | | boost::optional<unsigned> m_numColumns; |
60 | | unsigned m_columnSpacing; |
61 | | boost::optional<Arrow> m_beginArrow; |
62 | | boost::optional<Arrow> m_endArrow; |
63 | | boost::optional<VerticalAlign> m_verticalAlign; |
64 | | boost::optional<ColorReference> m_pictureRecolor; |
65 | | boost::optional<Shadow> m_shadow; |
66 | | boost::optional<int> m_innerRotation; |
67 | | std::vector<libmspub::Vertex> m_clipPath; |
68 | | boost::optional<int> m_pictureBrightness; |
69 | | boost::optional<int> m_pictureContrast; |
70 | 151k | ShapeInfo() : m_type(), m_cropType(), m_imgIndex(), m_borderImgIndex(), |
71 | 151k | m_coordinates(), m_lines(), m_pageSeqNum(), |
72 | 151k | m_textId(), m_adjustValuesByIndex(), m_adjustValues(), |
73 | 151k | m_rotation(), m_flips(), m_margins(), m_borderPosition(), |
74 | 151k | m_fill(), m_customShape(), m_stretchBorderArt(false), |
75 | 151k | m_lineBackColor(), m_dash(), m_tableInfo(), |
76 | 151k | m_numColumns(), |
77 | 151k | m_columnSpacing(0), m_beginArrow(), m_endArrow(), |
78 | 151k | m_verticalAlign(), m_pictureRecolor(), m_shadow(), m_innerRotation(), m_clipPath(), m_pictureBrightness(), m_pictureContrast() |
79 | 151k | { |
80 | 151k | } |
81 | | std::shared_ptr<const CustomShape> getCustomShape() const |
82 | 735k | { |
83 | 735k | if (bool(m_customShape)) |
84 | 9.74k | { |
85 | 9.74k | return getFromDynamicCustomShape(m_customShape.get()); |
86 | 9.74k | } |
87 | 726k | if (bool(m_cropType)) |
88 | 710 | { |
89 | 710 | return std::shared_ptr<const CustomShape>( |
90 | 710 | libmspub::getCustomShape(m_cropType.get()), |
91 | 710 | std::function<void (const CustomShape *)>(noop)); |
92 | 710 | } |
93 | 725k | return std::shared_ptr<const CustomShape>( |
94 | 725k | libmspub::getCustomShape(m_type.get_value_or(RECTANGLE)), |
95 | 725k | std::function<void (const CustomShape *)>(noop)); |
96 | 726k | } |
97 | | }; |
98 | | } |
99 | | #endif |
100 | | /* vim:set shiftwidth=2 softtabstop=2 expandtab: */ |