/src/libetonyek/src/lib/contexts/IWORKGeometryElement.cpp
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 libetonyek 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 | | #include "IWORKGeometryElement.h" |
11 | | |
12 | | #include <boost/lexical_cast.hpp> |
13 | | |
14 | | #include "libetonyek_xml.h" |
15 | | #include "IWORKCollector.h" |
16 | | #include "IWORKDictionary.h" |
17 | | #include "IWORKPositionElement.h" |
18 | | #include "IWORKSizeElement.h" |
19 | | #include "IWORKToken.h" |
20 | | #include "IWORKXMLParserState.h" |
21 | | |
22 | | namespace libetonyek |
23 | | { |
24 | | |
25 | | using boost::lexical_cast; |
26 | | |
27 | | IWORKGeometryElement::IWORKGeometryElement(IWORKXMLParserState &state) |
28 | 0 | : IWORKXMLElementContextBase(state) |
29 | 0 | , m_geometry(nullptr) |
30 | 0 | , m_naturalSize() |
31 | 0 | , m_size() |
32 | 0 | , m_pos() |
33 | 0 | , m_angle() |
34 | 0 | , m_shearXAngle() |
35 | 0 | , m_shearYAngle() |
36 | 0 | , m_aspectRatioLocked() |
37 | 0 | , m_sizesLocked() |
38 | 0 | , m_horizontalFlip() |
39 | 0 | , m_verticalFlip() |
40 | 0 | { |
41 | 0 | } |
42 | | |
43 | | IWORKGeometryElement::IWORKGeometryElement(IWORKXMLParserState &state, IWORKGeometryPtr_t &geometry) |
44 | 0 | : IWORKXMLElementContextBase(state) |
45 | 0 | , m_geometry(&geometry) |
46 | 0 | , m_naturalSize() |
47 | 0 | , m_size() |
48 | 0 | , m_pos() |
49 | 0 | , m_angle() |
50 | 0 | , m_shearXAngle() |
51 | 0 | , m_shearYAngle() |
52 | 0 | , m_aspectRatioLocked() |
53 | 0 | , m_sizesLocked() |
54 | 0 | , m_horizontalFlip() |
55 | 0 | , m_verticalFlip() |
56 | 0 | { |
57 | 0 | } |
58 | | |
59 | | void IWORKGeometryElement::attribute(const int name, const char *const value) |
60 | 0 | { |
61 | 0 | switch (name) |
62 | 0 | { |
63 | 0 | case +IWORKToken::NS_URI_SF | IWORKToken::angle : |
64 | 0 | m_angle = -deg2rad(lexical_cast<double>(value)); |
65 | 0 | break; |
66 | 0 | case +IWORKToken::NS_URI_SF | IWORKToken::aspectRatioLocked : |
67 | 0 | m_aspectRatioLocked = bool_cast(value); |
68 | 0 | break; |
69 | 0 | case +IWORKToken::NS_URI_SF | IWORKToken::horizontalFlip : |
70 | 0 | m_horizontalFlip = bool_cast(value); |
71 | 0 | break; |
72 | 0 | case +IWORKToken::NS_URI_SF | IWORKToken::shearXAngle : |
73 | 0 | m_shearXAngle = deg2rad(lexical_cast<double>(value)); |
74 | 0 | break; |
75 | 0 | case +IWORKToken::NS_URI_SF | IWORKToken::shearYAngle : |
76 | 0 | m_shearYAngle = deg2rad(lexical_cast<double>(value)); |
77 | 0 | break; |
78 | 0 | case +IWORKToken::NS_URI_SF | IWORKToken::sizesLocked : |
79 | 0 | m_sizesLocked = bool_cast(value); |
80 | 0 | break; |
81 | 0 | case +IWORKToken::NS_URI_SF | IWORKToken::verticalFlip : |
82 | 0 | m_verticalFlip = bool_cast(value); |
83 | 0 | break; |
84 | 0 | default : |
85 | 0 | IWORKXMLElementContextBase::attribute(name, value); |
86 | 0 | break; |
87 | 0 | } |
88 | 0 | } |
89 | | |
90 | | IWORKXMLContextPtr_t IWORKGeometryElement::element(const int name) |
91 | 0 | { |
92 | 0 | switch (name) |
93 | 0 | { |
94 | 0 | case +IWORKToken::NS_URI_SF | IWORKToken::naturalSize : |
95 | 0 | return std::make_shared<IWORKSizeElement>(getState(), m_naturalSize); |
96 | 0 | case +IWORKToken::NS_URI_SF | IWORKToken::position : |
97 | 0 | return std::make_shared<IWORKPositionElement>(getState(), m_pos); |
98 | 0 | case +IWORKToken::NS_URI_SF | IWORKToken::size : |
99 | 0 | return std::make_shared<IWORKSizeElement>(getState(), m_size); |
100 | 0 | default: |
101 | 0 | ETONYEK_DEBUG_MSG(("IWORKGeometryElement::element: find unknown element\n")); |
102 | 0 | break; |
103 | 0 | } |
104 | | |
105 | 0 | return IWORKXMLContextPtr_t(); |
106 | 0 | } |
107 | | |
108 | | void IWORKGeometryElement::endOfElement() |
109 | 0 | { |
110 | 0 | IWORKGeometryPtr_t geometry(new IWORKGeometry()); |
111 | 0 | if (m_naturalSize) |
112 | 0 | { |
113 | 0 | geometry->m_naturalSize = get(m_naturalSize); |
114 | 0 | geometry->m_size = get(m_naturalSize); |
115 | 0 | } |
116 | 0 | if (m_size) |
117 | 0 | geometry->m_size = get(m_size); |
118 | 0 | if (m_pos) |
119 | 0 | geometry->m_position = get(m_pos); |
120 | 0 | geometry->m_angle = m_angle; |
121 | 0 | geometry->m_shearXAngle = m_shearXAngle; |
122 | 0 | geometry->m_shearYAngle = m_shearYAngle; |
123 | 0 | geometry->m_horizontalFlip = m_horizontalFlip; |
124 | 0 | geometry->m_verticalFlip = m_verticalFlip; |
125 | 0 | geometry->m_aspectRatioLocked = m_aspectRatioLocked; |
126 | 0 | geometry->m_sizesLocked = m_sizesLocked; |
127 | |
|
128 | 0 | if (m_geometry) |
129 | 0 | *m_geometry = geometry; |
130 | 0 | else if (isCollector()) |
131 | 0 | getCollector().collectGeometry(geometry); |
132 | 0 | } |
133 | | |
134 | | } |
135 | | |
136 | | /* vim:set shiftwidth=2 softtabstop=2 expandtab: */ |