xref: /trunk/main/drawinglayer/source/primitive2d/primitivetools2d.cxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_drawinglayer.hxx"
30 
31 #include <drawinglayer/primitive2d/primitivetools2d.hxx>
32 #include <basegfx/vector/b2dvector.hxx>
33 #include <drawinglayer/geometry/viewinformation2d.hxx>
34 
35 //////////////////////////////////////////////////////////////////////////////
36 
37 namespace drawinglayer
38 {
39     namespace primitive2d
40     {
41         Primitive2DSequence DiscreteMetricDependentPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
42         {
43             ::osl::MutexGuard aGuard( m_aMutex );
44 
45             // get the current DiscreteUnit
46             const double fDiscreteUnit((rViewInformation.getInverseObjectToViewTransformation() * basegfx::B2DVector(1.0, 0.0)).getLength());
47 
48             if(getBuffered2DDecomposition().hasElements() && !basegfx::fTools::equal(fDiscreteUnit, getDiscreteUnit()))
49             {
50                 // conditions of last local decomposition have changed, delete
51                 const_cast< DiscreteMetricDependentPrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DSequence());
52             }
53 
54             if(!getBuffered2DDecomposition().hasElements())
55             {
56                 // remember new valid DiscreteUnit
57                 const_cast< DiscreteMetricDependentPrimitive2D* >(this)->mfDiscreteUnit = fDiscreteUnit;
58             }
59 
60             // call base implementation
61             return BufferedDecompositionPrimitive2D::get2DDecomposition(rViewInformation);
62         }
63     } // end of namespace primitive2d
64 } // end of namespace drawinglayer
65 
66 //////////////////////////////////////////////////////////////////////////////
67 
68 namespace drawinglayer
69 {
70     namespace primitive2d
71     {
72         Primitive2DSequence ViewportDependentPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
73         {
74             ::osl::MutexGuard aGuard( m_aMutex );
75 
76             // get the current Viewport
77             const basegfx::B2DRange& rViewport = rViewInformation.getViewport();
78 
79             if(getBuffered2DDecomposition().hasElements() && !rViewport.equal(getViewport()))
80             {
81                 // conditions of last local decomposition have changed, delete
82                 const_cast< ViewportDependentPrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DSequence());
83             }
84 
85             if(!getBuffered2DDecomposition().hasElements())
86             {
87                 // remember new valid DiscreteUnit
88                 const_cast< ViewportDependentPrimitive2D* >(this)->maViewport = rViewport;
89             }
90 
91             // call base implementation
92             return BufferedDecompositionPrimitive2D::get2DDecomposition(rViewInformation);
93         }
94     } // end of namespace primitive2d
95 } // end of namespace drawinglayer
96 
97 //////////////////////////////////////////////////////////////////////////////
98 
99 namespace drawinglayer
100 {
101     namespace primitive2d
102     {
103         Primitive2DSequence ViewTransformationDependentPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
104         {
105             ::osl::MutexGuard aGuard( m_aMutex );
106 
107             // get the current ViewTransformation
108             const basegfx::B2DHomMatrix& rViewTransformation = rViewInformation.getViewTransformation();
109 
110             if(getBuffered2DDecomposition().hasElements() && rViewTransformation != getViewTransformation())
111             {
112                 // conditions of last local decomposition have changed, delete
113                 const_cast< ViewTransformationDependentPrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DSequence());
114             }
115 
116             if(!getBuffered2DDecomposition().hasElements())
117             {
118                 // remember new valid ViewTransformation
119                 const_cast< ViewTransformationDependentPrimitive2D* >(this)->maViewTransformation = rViewTransformation;
120             }
121 
122             // call base implementation
123             return BufferedDecompositionPrimitive2D::get2DDecomposition(rViewInformation);
124         }
125     } // end of namespace primitive2d
126 } // end of namespace drawinglayer
127 
128 //////////////////////////////////////////////////////////////////////////////
129 
130 namespace drawinglayer
131 {
132     namespace primitive2d
133     {
134         Primitive2DSequence ObjectAndViewTransformationDependentPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
135         {
136             ::osl::MutexGuard aGuard( m_aMutex );
137 
138             // get the current ViewTransfromation
139             const basegfx::B2DHomMatrix& rViewTransformation = rViewInformation.getViewTransformation();
140 
141             if(getBuffered2DDecomposition().hasElements() && rViewTransformation != getViewTransformation())
142             {
143                 // conditions of last local decomposition have changed, delete
144                 const_cast< ObjectAndViewTransformationDependentPrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DSequence());
145             }
146 
147             // get the current ObjectTransformation
148             const basegfx::B2DHomMatrix& rObjectTransformation = rViewInformation.getObjectTransformation();
149 
150             if(getBuffered2DDecomposition().hasElements() && rObjectTransformation != getObjectTransformation())
151             {
152                 // conditions of last local decomposition have changed, delete
153                 const_cast< ObjectAndViewTransformationDependentPrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DSequence());
154             }
155 
156             if(!getBuffered2DDecomposition().hasElements())
157             {
158                 // remember new valid ViewTransformation, and ObjectTransformation
159                 const_cast< ObjectAndViewTransformationDependentPrimitive2D* >(this)->maViewTransformation = rViewTransformation;
160                 const_cast< ObjectAndViewTransformationDependentPrimitive2D* >(this)->maObjectTransformation = rObjectTransformation;
161             }
162 
163             // call base implementation
164             return BufferedDecompositionPrimitive2D::get2DDecomposition(rViewInformation);
165         }
166     } // end of namespace primitive2d
167 } // end of namespace drawinglayer
168 
169 //////////////////////////////////////////////////////////////////////////////
170 // eof
171