xref: /AOO41X/main/drawinglayer/source/primitive3d/textureprimitive3d.cxx (revision 035a2f44eca4e31ced924464e6584eacbf3e9114)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_drawinglayer.hxx"
26 
27 #include <drawinglayer/primitive3d/textureprimitive3d.hxx>
28 #include <drawinglayer/primitive3d/drawinglayer_primitivetypes3d.hxx>
29 #include <basegfx/color/bcolor.hxx>
30 
31 //////////////////////////////////////////////////////////////////////////////
32 
33 using namespace com::sun::star;
34 
35 //////////////////////////////////////////////////////////////////////////////
36 
37 namespace drawinglayer
38 {
39     namespace primitive3d
40     {
TexturePrimitive3D(const Primitive3DSequence & rChildren,const basegfx::B2DVector & rTextureSize,bool bModulate,bool bFilter)41         TexturePrimitive3D::TexturePrimitive3D(
42             const Primitive3DSequence& rChildren,
43             const basegfx::B2DVector& rTextureSize,
44             bool bModulate, bool bFilter)
45         :   GroupPrimitive3D(rChildren),
46             maTextureSize(rTextureSize),
47             mbModulate(bModulate),
48             mbFilter(bFilter)
49         {
50         }
51 
operator ==(const BasePrimitive3D & rPrimitive) const52         bool TexturePrimitive3D::operator==(const BasePrimitive3D& rPrimitive) const
53         {
54             if(GroupPrimitive3D::operator==(rPrimitive))
55             {
56                 const TexturePrimitive3D& rCompare = (TexturePrimitive3D&)rPrimitive;
57 
58                 return (getModulate() == rCompare.getModulate()
59                     && getFilter() == rCompare.getFilter());
60             }
61 
62             return false;
63         }
64     } // end of namespace primitive3d
65 } // end of namespace drawinglayer
66 
67 //////////////////////////////////////////////////////////////////////////////
68 
69 namespace drawinglayer
70 {
71     namespace primitive3d
72     {
UnifiedTransparenceTexturePrimitive3D(double fTransparence,const Primitive3DSequence & rChildren)73         UnifiedTransparenceTexturePrimitive3D::UnifiedTransparenceTexturePrimitive3D(
74             double fTransparence,
75             const Primitive3DSequence& rChildren)
76         :   TexturePrimitive3D(rChildren, basegfx::B2DVector(), false, false),
77             mfTransparence(fTransparence)
78         {
79         }
80 
operator ==(const BasePrimitive3D & rPrimitive) const81         bool UnifiedTransparenceTexturePrimitive3D::operator==(const BasePrimitive3D& rPrimitive) const
82         {
83             if(TexturePrimitive3D::operator==(rPrimitive))
84             {
85                 const UnifiedTransparenceTexturePrimitive3D& rCompare = (UnifiedTransparenceTexturePrimitive3D&)rPrimitive;
86 
87                 return (getTransparence() == rCompare.getTransparence());
88             }
89 
90             return false;
91         }
92 
getB3DRange(const geometry::ViewInformation3D & rViewInformation) const93         basegfx::B3DRange UnifiedTransparenceTexturePrimitive3D::getB3DRange(const geometry::ViewInformation3D& rViewInformation) const
94         {
95             // do not use the fallback to decomposition here since for a correct BoundRect we also
96             // need invisible (1.0 == getTransparence()) geometry; these would be deleted in the decomposition
97             return getB3DRangeFromPrimitive3DSequence(getChildren(), rViewInformation);
98         }
99 
get3DDecomposition(const geometry::ViewInformation3D &) const100         Primitive3DSequence UnifiedTransparenceTexturePrimitive3D::get3DDecomposition(const geometry::ViewInformation3D& /*rViewInformation*/) const
101         {
102             if(0.0 == getTransparence())
103             {
104                 // no transparence used, so just use content
105                 return getChildren();
106             }
107             else if(getTransparence() > 0.0 && getTransparence() < 1.0)
108             {
109                 // create TransparenceTexturePrimitive3D with fixed transparence as replacement
110                 const basegfx::BColor aGray(getTransparence(), getTransparence(), getTransparence());
111                 const attribute::FillGradientAttribute aFillGradient(attribute::GRADIENTSTYLE_LINEAR, 0.0, 0.0, 0.0, 0.0, aGray, aGray, 1);
112                 const Primitive3DReference xRef(new TransparenceTexturePrimitive3D(aFillGradient, getChildren(), getTextureSize()));
113                 return Primitive3DSequence(&xRef, 1L);
114             }
115             else
116             {
117                 // completely transparent or invalid definition, add nothing
118                 return Primitive3DSequence();
119             }
120         }
121 
122         // provide unique ID
123         ImplPrimitrive3DIDBlock(UnifiedTransparenceTexturePrimitive3D, PRIMITIVE3D_ID_UNIFIEDTRANSPARENCETEXTUREPRIMITIVE3D)
124 
125     } // end of namespace primitive3d
126 } // end of namespace drawinglayer
127 
128 //////////////////////////////////////////////////////////////////////////////
129 
130 namespace drawinglayer
131 {
132     namespace primitive3d
133     {
GradientTexturePrimitive3D(const attribute::FillGradientAttribute & rGradient,const Primitive3DSequence & rChildren,const basegfx::B2DVector & rTextureSize,bool bModulate,bool bFilter)134         GradientTexturePrimitive3D::GradientTexturePrimitive3D(
135             const attribute::FillGradientAttribute& rGradient,
136             const Primitive3DSequence& rChildren,
137             const basegfx::B2DVector& rTextureSize,
138             bool bModulate,
139             bool bFilter)
140         :   TexturePrimitive3D(rChildren, rTextureSize, bModulate, bFilter),
141             maGradient(rGradient)
142         {
143         }
144 
operator ==(const BasePrimitive3D & rPrimitive) const145         bool GradientTexturePrimitive3D::operator==(const BasePrimitive3D& rPrimitive) const
146         {
147             if(TexturePrimitive3D::operator==(rPrimitive))
148             {
149                 const GradientTexturePrimitive3D& rCompare = (GradientTexturePrimitive3D&)rPrimitive;
150 
151                 return (getGradient() == rCompare.getGradient());
152             }
153 
154             return false;
155         }
156 
157         // provide unique ID
158         ImplPrimitrive3DIDBlock(GradientTexturePrimitive3D, PRIMITIVE3D_ID_GRADIENTTEXTUREPRIMITIVE3D)
159 
160     } // end of namespace primitive3d
161 } // end of namespace drawinglayer
162 
163 //////////////////////////////////////////////////////////////////////////////
164 
165 namespace drawinglayer
166 {
167     namespace primitive3d
168     {
BitmapTexturePrimitive3D(const attribute::FillGraphicAttribute & rFillGraphicAttribute,const Primitive3DSequence & rChildren,const basegfx::B2DVector & rTextureSize,bool bModulate,bool bFilter)169         BitmapTexturePrimitive3D::BitmapTexturePrimitive3D(
170             const attribute::FillGraphicAttribute& rFillGraphicAttribute,
171             const Primitive3DSequence& rChildren,
172             const basegfx::B2DVector& rTextureSize,
173             bool bModulate, bool bFilter)
174         :   TexturePrimitive3D(rChildren, rTextureSize, bModulate, bFilter),
175             maFillGraphicAttribute(rFillGraphicAttribute)
176         {
177         }
178 
operator ==(const BasePrimitive3D & rPrimitive) const179         bool BitmapTexturePrimitive3D::operator==(const BasePrimitive3D& rPrimitive) const
180         {
181             if(TexturePrimitive3D::operator==(rPrimitive))
182             {
183                 const BitmapTexturePrimitive3D& rCompare = (BitmapTexturePrimitive3D&)rPrimitive;
184 
185                 return (getFillGraphicAttribute() == rCompare.getFillGraphicAttribute());
186             }
187 
188             return false;
189         }
190 
191         // provide unique ID
192         ImplPrimitrive3DIDBlock(BitmapTexturePrimitive3D, PRIMITIVE3D_ID_BITMAPTEXTUREPRIMITIVE3D)
193 
194     } // end of namespace primitive3d
195 } // end of namespace drawinglayer
196 
197 //////////////////////////////////////////////////////////////////////////////
198 
199 namespace drawinglayer
200 {
201     namespace primitive3d
202     {
TransparenceTexturePrimitive3D(const attribute::FillGradientAttribute & rGradient,const Primitive3DSequence & rChildren,const basegfx::B2DVector & rTextureSize)203         TransparenceTexturePrimitive3D::TransparenceTexturePrimitive3D(
204             const attribute::FillGradientAttribute& rGradient,
205             const Primitive3DSequence& rChildren,
206             const basegfx::B2DVector& rTextureSize)
207         :   GradientTexturePrimitive3D(rGradient, rChildren, rTextureSize, false, false)
208         {
209         }
210 
operator ==(const BasePrimitive3D & rPrimitive) const211         bool TransparenceTexturePrimitive3D::operator==(const BasePrimitive3D& rPrimitive) const
212         {
213             return (GradientTexturePrimitive3D::operator==(rPrimitive));
214         }
215 
216         // provide unique ID
217         ImplPrimitrive3DIDBlock(TransparenceTexturePrimitive3D, PRIMITIVE3D_ID_TRANSPARENCETEXTUREPRIMITIVE3D)
218 
219     } // end of namespace primitive3d
220 } // end of namespace drawinglayer
221 
222 //////////////////////////////////////////////////////////////////////////////
223 // eof
224