Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : : #include <svx/sdr/overlay/overlayobject.hxx>
30 : : #include <svx/sdr/overlay/overlaymanager.hxx>
31 : : #include <basegfx/matrix/b2dhommatrix.hxx>
32 : : #include <basegfx/vector/b2dvector.hxx>
33 : : #include <vcl/outdev.hxx>
34 : : #include <basegfx/polygon/b2dpolygon.hxx>
35 : : #include <basegfx/polygon/b2dpolypolygon.hxx>
36 : : #include <basegfx/polygon/b2dpolygontools.hxx>
37 : : #include <basegfx/polygon/b2dpolypolygontools.hxx>
38 : : #include <drawinglayer/primitive2d/polygonprimitive2d.hxx>
39 : :
40 : : //////////////////////////////////////////////////////////////////////////////
41 : :
42 : : namespace sdr
43 : : {
44 : : namespace overlay
45 : : {
46 : 3032 : void OverlayObject::objectChange()
47 : : {
48 : 3032 : const basegfx::B2DRange aPreviousRange(maBaseRange);
49 [ + - ]: 3032 : maBaseRange.reset();
50 [ + - ][ + - ]: 3032 : setPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DSequence());
[ + - ]
51 : :
52 [ + + ][ + - ]: 3032 : if(getOverlayManager() && !aPreviousRange.isEmpty())
[ + - ][ + + ]
53 : : {
54 [ + - ]: 132 : getOverlayManager()->invalidateRange(aPreviousRange);
55 : : }
56 : :
57 [ + - ]: 3032 : const basegfx::B2DRange& rCurrentRange = getBaseRange();
58 : :
59 [ + + ][ + - ]: 3032 : if(getOverlayManager() && rCurrentRange != aPreviousRange && !rCurrentRange.isEmpty())
[ + + ][ + - ]
[ + - ][ + + ]
60 : : {
61 [ + - ]: 96 : getOverlayManager()->invalidateRange(rCurrentRange);
62 : : }
63 : 3032 : }
64 : :
65 : : // OverlayObject implementations.
66 : 0 : drawinglayer::primitive2d::Primitive2DSequence OverlayObject::createOverlayObjectPrimitive2DSequence()
67 : : {
68 : : // Default implementation has to assert a missing implementation. It cannot
69 : : // be useful to have overlay object derivations which have no visualisation
70 : : // at all
71 : : OSL_FAIL("OverlayObject derivation without visualisation definition (missing createOverlayObjectPrimitive2DSequence implementation) (!)");
72 : 0 : return drawinglayer::primitive2d::Primitive2DSequence();
73 : : }
74 : :
75 : 2900 : void OverlayObject::allowAntiAliase(bool bNew)
76 : : {
77 [ + - ]: 2900 : if(bNew != (bool)mbAllowsAntiAliase)
78 : : {
79 : : // remember new value
80 : 2900 : mbAllowsAntiAliase = bNew;
81 : :
82 : : // register change (after change)
83 : 2900 : objectChange();
84 : : }
85 : 2900 : }
86 : :
87 : 8944 : OverlayObject::OverlayObject(Color aBaseColor)
88 : : : Event(0),
89 : : mpOverlayManager(0),
90 : : maBaseColor(aBaseColor),
91 : : mbIsVisible(true),
92 : : mbIsHittable(true),
93 : : mbAllowsAnimation(false),
94 [ + - ][ + - ]: 8944 : mbAllowsAntiAliase(true)
[ + - ]
95 : : {
96 : 8944 : }
97 : :
98 [ + - ][ + - ]: 8934 : OverlayObject::~OverlayObject()
99 : : {
100 : : OSL_ENSURE(0 == getOverlayManager(), "OverlayObject is destructed which is still registered at OverlayManager (!)");
101 [ - + ]: 8934 : }
102 : :
103 : 24012 : drawinglayer::primitive2d::Primitive2DSequence OverlayObject::getOverlayObjectPrimitive2DSequence() const
104 : : {
105 [ + + ]: 24012 : if(!getPrimitive2DSequence().hasElements())
106 : : {
107 : : // no existing sequence; create one
108 : : const_cast< OverlayObject* >(this)->setPrimitive2DSequence(
109 [ + - ]: 9076 : const_cast< OverlayObject* >(this)->createOverlayObjectPrimitive2DSequence());
110 : : }
111 : :
112 : 24012 : return getPrimitive2DSequence();
113 : : }
114 : :
115 : 35846 : const basegfx::B2DRange& OverlayObject::getBaseRange() const
116 : : {
117 [ + + ][ + + ]: 35846 : if(getOverlayManager() && maBaseRange.isEmpty())
[ + + ]
118 : : {
119 : 9076 : const drawinglayer::primitive2d::Primitive2DSequence& rSequence = getOverlayObjectPrimitive2DSequence();
120 : :
121 [ + - ]: 9076 : if(rSequence.hasElements())
122 : : {
123 [ + - ]: 9076 : const drawinglayer::geometry::ViewInformation2D aViewInformation2D(getOverlayManager()->getCurrentViewInformation2D());
124 : :
125 : : const_cast< sdr::overlay::OverlayObject* >(this)->maBaseRange =
126 [ + - ][ + - ]: 9076 : drawinglayer::primitive2d::getB2DRangeFromPrimitive2DSequence(rSequence, aViewInformation2D);
127 : 9076 : }
128 : : }
129 : :
130 : 35846 : return maBaseRange;
131 : : }
132 : :
133 : 54 : void OverlayObject::setVisible(bool bNew)
134 : : {
135 [ + + ]: 54 : if(bNew != (bool)mbIsVisible)
136 : : {
137 : : // remember new value
138 : 36 : mbIsVisible = bNew;
139 : :
140 : : // register change (after change)
141 : 36 : objectChange();
142 : : }
143 : 54 : }
144 : :
145 : 0 : void OverlayObject::setHittable(bool bNew)
146 : : {
147 [ # # ]: 0 : if(bNew != (bool)mbIsHittable)
148 : : {
149 : : // remember new value
150 : 0 : mbIsHittable = bNew;
151 : :
152 : : // register change (after change)
153 : 0 : objectChange();
154 : : }
155 : 0 : }
156 : :
157 : 0 : void OverlayObject::setBaseColor(Color aNew)
158 : : {
159 [ # # ]: 0 : if(aNew != maBaseColor)
160 : : {
161 : : // remember new value
162 : 0 : maBaseColor = aNew;
163 : :
164 : : // register change (after change)
165 : 0 : objectChange();
166 : : }
167 : 0 : }
168 : :
169 : 0 : void OverlayObject::Trigger(sal_uInt32 /*nTime*/)
170 : : {
171 : : // default does not register again
172 : 0 : }
173 : :
174 : 0 : void OverlayObject::stripeDefinitionHasChanged()
175 : : {
176 : : // default does not need to do anything
177 : 0 : }
178 : : } // end of namespace overlay
179 : : } // end of namespace sdr
180 : :
181 : : //////////////////////////////////////////////////////////////////////////////
182 : :
183 : : namespace sdr
184 : : {
185 : : namespace overlay
186 : : {
187 : 6044 : OverlayObjectWithBasePosition::OverlayObjectWithBasePosition(const basegfx::B2DPoint& rBasePos, Color aBaseColor)
188 : : : OverlayObject(aBaseColor),
189 : 6044 : maBasePosition(rBasePos)
190 : : {
191 : 6044 : }
192 : :
193 : 6038 : OverlayObjectWithBasePosition::~OverlayObjectWithBasePosition()
194 : : {
195 [ - + ]: 6038 : }
196 : :
197 : 0 : void OverlayObjectWithBasePosition::setBasePosition(const basegfx::B2DPoint& rNew)
198 : : {
199 [ # # ]: 0 : if(rNew != maBasePosition)
200 : : {
201 : : // remember new value
202 : 0 : maBasePosition = rNew;
203 : :
204 : : // register change (after change)
205 : 0 : objectChange();
206 : : }
207 : 0 : }
208 : : } // end of namespace overlay
209 : : } // end of namespace sdr
210 : :
211 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|