Coverage Report

Created: 2026-06-13 06:44

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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: */