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; ShapeInfoShapeInfo70 ShapeInfo() : m_type(), m_cropType(), m_imgIndex(), m_borderImgIndex(), 71 m_coordinates(), m_lines(), m_pageSeqNum(), 72 m_textId(), m_adjustValuesByIndex(), m_adjustValues(), 73 m_rotation(), m_flips(), m_margins(), m_borderPosition(), 74 m_fill(), m_customShape(), m_stretchBorderArt(false), 75 m_lineBackColor(), m_dash(), m_tableInfo(), 76 m_numColumns(), 77 m_columnSpacing(0), m_beginArrow(), m_endArrow(), 78 m_verticalAlign(), m_pictureRecolor(), m_shadow(), m_innerRotation(), m_clipPath(), m_pictureBrightness(), m_pictureContrast() 79 { 80 } getCustomShapeShapeInfo81 std::shared_ptr<const CustomShape> getCustomShape() const 82 { 83 if (bool(m_customShape)) 84 { 85 return getFromDynamicCustomShape(m_customShape.get()); 86 } 87 if (bool(m_cropType)) 88 { 89 return std::shared_ptr<const CustomShape>( 90 libmspub::getCustomShape(m_cropType.get()), 91 std::function<void (const CustomShape *)>(noop)); 92 } 93 return std::shared_ptr<const CustomShape>( 94 libmspub::getCustomShape(m_type.get_value_or(RECTANGLE)), 95 std::function<void (const CustomShape *)>(noop)); 96 } 97 }; 98 } 99 #endif 100 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */ 101