Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice 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 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <drawinglayer/attribute/sdrlineattribute.hxx>
21 : #include <basegfx/color/bcolor.hxx>
22 : #include <rtl/instance.hxx>
23 :
24 :
25 :
26 : namespace drawinglayer
27 : {
28 : namespace attribute
29 : {
30 85325 : class ImpSdrLineAttribute
31 : {
32 : public:
33 : // line definitions
34 : basegfx::B2DLineJoin meJoin; // B2DLINEJOIN_* defines
35 : double mfWidth; // 1/100th mm, 0.0==hair
36 : double mfTransparence; // [0.0 .. 1.0], 0.0==no transp.
37 : basegfx::BColor maColor; // color of line
38 : com::sun::star::drawing::LineCap meCap; // BUTT, ROUND, or SQUARE
39 : ::std::vector< double > maDotDashArray; // array of double which defines the dot-dash pattern
40 : double mfFullDotDashLen; // sum of maDotDashArray (for convenience)
41 :
42 28463 : ImpSdrLineAttribute(
43 : basegfx::B2DLineJoin eJoin,
44 : double fWidth,
45 : double fTransparence,
46 : const basegfx::BColor& rColor,
47 : com::sun::star::drawing::LineCap eCap,
48 : const ::std::vector< double >& rDotDashArray,
49 : double fFullDotDashLen)
50 : : meJoin(eJoin),
51 : mfWidth(fWidth),
52 : mfTransparence(fTransparence),
53 : maColor(rColor),
54 : meCap(eCap),
55 : maDotDashArray(rDotDashArray),
56 28463 : mfFullDotDashLen(fFullDotDashLen)
57 : {
58 28463 : }
59 :
60 63 : ImpSdrLineAttribute()
61 : : meJoin(basegfx::B2DLineJoin::Round),
62 : mfWidth(0.0),
63 : mfTransparence(0.0),
64 : maColor(basegfx::BColor()),
65 : meCap(com::sun::star::drawing::LineCap_BUTT),
66 : maDotDashArray(std::vector< double >()),
67 63 : mfFullDotDashLen(0.0)
68 : {
69 63 : }
70 :
71 : // data read access
72 61395 : basegfx::B2DLineJoin getJoin() const { return meJoin; }
73 100757 : double getWidth() const { return mfWidth; }
74 61867 : double getTransparence() const { return mfTransparence; }
75 61265 : const basegfx::BColor& getColor() const { return maColor; }
76 61261 : com::sun::star::drawing::LineCap getCap() const { return meCap; }
77 61261 : const ::std::vector< double >& getDotDashArray() const { return maDotDashArray; }
78 36039 : double getFullDotDashLen() const { return mfFullDotDashLen; }
79 :
80 12678 : bool operator==(const ImpSdrLineAttribute& rCandidate) const
81 : {
82 12678 : return (getJoin() == rCandidate.getJoin()
83 12678 : && getWidth() == rCandidate.getWidth()
84 12615 : && getTransparence() == rCandidate.getTransparence()
85 12613 : && getColor() == rCandidate.getColor()
86 12611 : && getCap() == rCandidate.getCap()
87 25289 : && getDotDashArray() == rCandidate.getDotDashArray());
88 : }
89 : };
90 :
91 : namespace
92 : {
93 : struct theGlobalDefault :
94 : public rtl::Static< SdrLineAttribute::ImplType, theGlobalDefault > {};
95 : }
96 :
97 28463 : SdrLineAttribute::SdrLineAttribute(
98 : basegfx::B2DLineJoin eJoin,
99 : double fWidth,
100 : double fTransparence,
101 : const basegfx::BColor& rColor,
102 : com::sun::star::drawing::LineCap eCap,
103 : const ::std::vector< double >& rDotDashArray,
104 : double fFullDotDashLen)
105 : : mpSdrLineAttribute(
106 : ImpSdrLineAttribute(
107 : eJoin,
108 : fWidth,
109 : fTransparence,
110 : rColor,
111 : eCap,
112 : rDotDashArray,
113 28463 : fFullDotDashLen))
114 :
115 : {
116 28463 : }
117 :
118 170075 : SdrLineAttribute::SdrLineAttribute()
119 170075 : : mpSdrLineAttribute(theGlobalDefault::get())
120 : {
121 170075 : }
122 :
123 185085 : SdrLineAttribute::SdrLineAttribute(const SdrLineAttribute& rCandidate)
124 185085 : : mpSdrLineAttribute(rCandidate.mpSdrLineAttribute)
125 : {
126 185085 : }
127 :
128 383022 : SdrLineAttribute::~SdrLineAttribute()
129 : {
130 383022 : }
131 :
132 372064 : bool SdrLineAttribute::isDefault() const
133 : {
134 372064 : return mpSdrLineAttribute.same_object(theGlobalDefault::get());
135 : }
136 :
137 88470 : SdrLineAttribute& SdrLineAttribute::operator=(const SdrLineAttribute& rCandidate)
138 : {
139 88470 : mpSdrLineAttribute = rCandidate.mpSdrLineAttribute;
140 88470 : return *this;
141 : }
142 :
143 54586 : bool SdrLineAttribute::operator==(const SdrLineAttribute& rCandidate) const
144 : {
145 : // tdf#87509 default attr is always != non-default attr, even with same values
146 54586 : if(rCandidate.isDefault() != isDefault())
147 3 : return false;
148 :
149 54583 : return rCandidate.mpSdrLineAttribute == mpSdrLineAttribute;
150 : }
151 :
152 36039 : basegfx::B2DLineJoin SdrLineAttribute::getJoin() const
153 : {
154 36039 : return mpSdrLineAttribute->getJoin();
155 : }
156 :
157 75401 : double SdrLineAttribute::getWidth() const
158 : {
159 75401 : return mpSdrLineAttribute->getWidth();
160 : }
161 :
162 36637 : double SdrLineAttribute::getTransparence() const
163 : {
164 36637 : return mpSdrLineAttribute->getTransparence();
165 : }
166 :
167 36039 : const basegfx::BColor& SdrLineAttribute::getColor() const
168 : {
169 36039 : return mpSdrLineAttribute->getColor();
170 : }
171 :
172 36039 : const ::std::vector< double >& SdrLineAttribute::getDotDashArray() const
173 : {
174 36039 : return mpSdrLineAttribute->getDotDashArray();
175 : }
176 :
177 36039 : double SdrLineAttribute::getFullDotDashLen() const
178 : {
179 36039 : return mpSdrLineAttribute->getFullDotDashLen();
180 : }
181 :
182 36039 : com::sun::star::drawing::LineCap SdrLineAttribute::getCap() const
183 : {
184 36039 : return mpSdrLineAttribute->getCap();
185 : }
186 :
187 : } // end of namespace attribute
188 : } // end of namespace drawinglayer
189 :
190 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|