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 #ifndef INCLUDED_DRAWINGLAYER_TEXTURE_TEXTURE_HXX
25 #define INCLUDED_DRAWINGLAYER_TEXTURE_TEXTURE_HXX
26 
27 #include <drawinglayer/drawinglayerdllapi.h>
28 #include <basegfx/matrix/b2dhommatrix.hxx>
29 #include <basegfx/range/b2drange.hxx>
30 #include <basegfx/color/bcolor.hxx>
31 #include <basegfx/tools/gradienttools.hxx>
32 #include <vector>
33 
34 //////////////////////////////////////////////////////////////////////////////
35 namespace drawinglayer
36 {
37 	namespace texture
38 	{
39 		class DRAWINGLAYER_DLLPUBLIC GeoTexSvx
40 		{
41 		public:
42 			GeoTexSvx();
43 			virtual ~GeoTexSvx();
44 
45 			// compare operator
46 			virtual bool operator==(const GeoTexSvx& rGeoTexSvx) const;
operator !=(const GeoTexSvx & rGeoTexSvx) const47 			bool operator!=(const GeoTexSvx& rGeoTexSvx) const { return !operator==(rGeoTexSvx); }
48 
49 			// virtual base methods
50 			virtual void modifyBColor(const basegfx::B2DPoint& rUV, basegfx::BColor& rBColor, double& rfOpacity) const;
51 			virtual void modifyOpacity(const basegfx::B2DPoint& rUV, double& rfOpacity) const;
52 		};
53 	} // end of namespace texture
54 } // end of namespace drawinglayer
55 
56 //////////////////////////////////////////////////////////////////////////////
57 
58 namespace drawinglayer
59 {
60     namespace texture
61     {
62         /// helper class for processing equal number of matrices and colors
63         /// for texture processing
64         struct B2DHomMatrixAndBColor
65         {
66             basegfx::B2DHomMatrix   maB2DHomMatrix;
67             basegfx::BColor         maBColor;
68         };
69 	} // end of namespace texture
70 } // end of namespace drawinglayer
71 
72 //////////////////////////////////////////////////////////////////////////////
73 
74 namespace drawinglayer
75 {
76 	namespace texture
77 	{
78 		class DRAWINGLAYER_DLLPUBLIC GeoTexSvxGradient : public GeoTexSvx
79 		{
80 		protected:
81 			basegfx::ODFGradientInfo			maGradientInfo;
82 			basegfx::B2DRange					maTargetRange;
83 			basegfx::BColor						maStart;
84 			basegfx::BColor						maEnd;
85 			double								mfBorder;
86 
87 		public:
88 			GeoTexSvxGradient(
89                 const basegfx::B2DRange& rTargetRange,
90                 const basegfx::BColor& rStart,
91                 const basegfx::BColor& rEnd,
92                 sal_uInt32 nSteps,
93                 double fBorder);
94 			virtual ~GeoTexSvxGradient();
95 
96 			// compare operator
97 			virtual bool operator==(const GeoTexSvx& rGeoTexSvx) const;
98 
99 			// virtual base methods
100 			virtual void appendTransformationsAndColors(
101                 std::vector< B2DHomMatrixAndBColor >& rEntries,
102                 basegfx::BColor& rOutmostColor) = 0;
103 
104 			// data access
getStart() const105 			const basegfx::BColor& getStart() const { return maStart; }
getEnd() const106 			const basegfx::BColor& getEnd() const { return maEnd; }
107 		};
108 	} // end of namespace texture
109 } // end of namespace drawinglayer
110 
111 //////////////////////////////////////////////////////////////////////////////
112 
113 namespace drawinglayer
114 {
115 	namespace texture
116 	{
117 		class DRAWINGLAYER_DLLPUBLIC GeoTexSvxGradientLinear : public GeoTexSvxGradient
118 		{
119 		public:
120 			GeoTexSvxGradientLinear(
121                 const basegfx::B2DRange& rTargetRange,
122                 const basegfx::BColor& rStart,
123                 const basegfx::BColor& rEnd,
124                 sal_uInt32 nSteps,
125                 double fBorder,
126                 double fAngle);
127 			virtual ~GeoTexSvxGradientLinear();
128 
129 			virtual void appendTransformationsAndColors(
130                 std::vector< B2DHomMatrixAndBColor >& rEntries,
131                 basegfx::BColor& rOutmostColor);
132 			virtual void modifyBColor(const basegfx::B2DPoint& rUV, basegfx::BColor& rBColor, double& rfOpacity) const;
133 		};
134 	} // end of namespace texture
135 } // end of namespace drawinglayer
136 
137 //////////////////////////////////////////////////////////////////////////////
138 
139 namespace drawinglayer
140 {
141 	namespace texture
142 	{
143 		class DRAWINGLAYER_DLLPUBLIC GeoTexSvxGradientAxial : public GeoTexSvxGradient
144 		{
145 		public:
146 			GeoTexSvxGradientAxial(
147                 const basegfx::B2DRange& rTargetRange,
148                 const basegfx::BColor& rStart,
149                 const basegfx::BColor& rEnd,
150                 sal_uInt32 nSteps,
151                 double fBorder,
152                 double fAngle);
153 			virtual ~GeoTexSvxGradientAxial();
154 
155 			virtual void appendTransformationsAndColors(
156                 std::vector< B2DHomMatrixAndBColor >& rEntries,
157                 basegfx::BColor& rOutmostColor);
158 			virtual void modifyBColor(const basegfx::B2DPoint& rUV, basegfx::BColor& rBColor, double& rfOpacity) const;
159 		};
160 	} // end of namespace texture
161 } // end of namespace drawinglayer
162 
163 //////////////////////////////////////////////////////////////////////////////
164 
165 namespace drawinglayer
166 {
167 	namespace texture
168 	{
169 		class DRAWINGLAYER_DLLPUBLIC GeoTexSvxGradientRadial : public GeoTexSvxGradient
170 		{
171 		public:
172 			GeoTexSvxGradientRadial(
173                 const basegfx::B2DRange& rTargetRange,
174                 const basegfx::BColor& rStart,
175                 const basegfx::BColor& rEnd,
176                 sal_uInt32 nSteps,
177                 double fBorder,
178                 double fOffsetX,
179                 double fOffsetY);
180 			virtual ~GeoTexSvxGradientRadial();
181 
182 			virtual void appendTransformationsAndColors(
183                 std::vector< B2DHomMatrixAndBColor >& rEntries,
184                 basegfx::BColor& rOutmostColor);
185 			virtual void modifyBColor(const basegfx::B2DPoint& rUV, basegfx::BColor& rBColor, double& rfOpacity) const;
186 		};
187 	} // end of namespace texture
188 } // end of namespace drawinglayer
189 
190 //////////////////////////////////////////////////////////////////////////////
191 
192 namespace drawinglayer
193 {
194 	namespace texture
195 	{
196 		class DRAWINGLAYER_DLLPUBLIC GeoTexSvxGradientElliptical : public GeoTexSvxGradient
197 		{
198 		public:
199 			GeoTexSvxGradientElliptical(
200                 const basegfx::B2DRange& rTargetRange,
201                 const basegfx::BColor& rStart,
202                 const basegfx::BColor& rEnd,
203                 sal_uInt32 nSteps,
204                 double fBorder,
205                 double fOffsetX,
206                 double fOffsetY,
207                 double fAngle);
208 			virtual ~GeoTexSvxGradientElliptical();
209 
210 			virtual void appendTransformationsAndColors(
211                 std::vector< B2DHomMatrixAndBColor >& rEntries,
212                 basegfx::BColor& rOutmostColor);
213 			virtual void modifyBColor(const basegfx::B2DPoint& rUV, basegfx::BColor& rBColor, double& rfOpacity) const;
214 		};
215 	} // end of namespace texture
216 } // end of namespace drawinglayer
217 
218 //////////////////////////////////////////////////////////////////////////////
219 
220 namespace drawinglayer
221 {
222 	namespace texture
223 	{
224 		class DRAWINGLAYER_DLLPUBLIC GeoTexSvxGradientSquare : public GeoTexSvxGradient
225 		{
226 		public:
227 			GeoTexSvxGradientSquare(
228                 const basegfx::B2DRange& rTargetRange,
229                 const basegfx::BColor& rStart,
230                 const basegfx::BColor& rEnd,
231                 sal_uInt32 nSteps,
232                 double fBorder,
233                 double fOffsetX,
234                 double fOffsetY,
235                 double fAngle);
236 			virtual ~GeoTexSvxGradientSquare();
237 
238 			virtual void appendTransformationsAndColors(
239                 std::vector< B2DHomMatrixAndBColor >& rEntries,
240                 basegfx::BColor& rOutmostColor);
241 			virtual void modifyBColor(const basegfx::B2DPoint& rUV, basegfx::BColor& rBColor, double& rfOpacity) const;
242 		};
243 	} // end of namespace texture
244 } // end of namespace drawinglayer
245 
246 //////////////////////////////////////////////////////////////////////////////
247 
248 namespace drawinglayer
249 {
250 	namespace texture
251 	{
252 		class DRAWINGLAYER_DLLPUBLIC GeoTexSvxGradientRect : public GeoTexSvxGradient
253 		{
254 		public:
255 			GeoTexSvxGradientRect(
256                 const basegfx::B2DRange& rTargetRange,
257                 const basegfx::BColor& rStart,
258                 const basegfx::BColor& rEnd,
259                 sal_uInt32 nSteps,
260                 double fBorder,
261                 double fOffsetX,
262                 double fOffsetY,
263                 double fAngle);
264 			virtual ~GeoTexSvxGradientRect();
265 
266 			virtual void appendTransformationsAndColors(
267                 std::vector< B2DHomMatrixAndBColor >& rEntries,
268                 basegfx::BColor& rOutmostColor);
269 			virtual void modifyBColor(const basegfx::B2DPoint& rUV, basegfx::BColor& rBColor, double& rfOpacity) const;
270 		};
271 	} // end of namespace texture
272 } // end of namespace drawinglayer
273 
274 //////////////////////////////////////////////////////////////////////////////
275 
276 namespace drawinglayer
277 {
278 	namespace texture
279 	{
280 		class DRAWINGLAYER_DLLPUBLIC GeoTexSvxHatch : public GeoTexSvx
281 		{
282 		protected:
283 			basegfx::B2DHomMatrix				maTextureTransform;
284 			basegfx::B2DHomMatrix				maBackTextureTransform;
285 			double								mfDistance;
286 			double								mfAngle;
287 			sal_uInt32							mnSteps;
288 
289 		public:
290 			GeoTexSvxHatch(
291                 const basegfx::B2DRange& rTargetRange,
292                 double fDistance,
293                 double fAngle);
294 			virtual ~GeoTexSvxHatch();
295 
296 			// compare operator
297 			virtual bool operator==(const GeoTexSvx& rGeoTexSvx) const;
298 
299 			virtual void appendTransformations(::std::vector< basegfx::B2DHomMatrix >& rMatrices);
300 			double getDistanceToHatch(const basegfx::B2DPoint& rUV) const;
301 			const basegfx::B2DHomMatrix& getBackTextureTransform() const;
302 		};
303 	} // end of namespace texture
304 } // end of namespace drawinglayer
305 
306 //////////////////////////////////////////////////////////////////////////////
307 
308 namespace drawinglayer
309 {
310 	namespace texture
311 	{
312         // This class applies a tiling to the unit range. The given range
313         // will be repeated inside the unit range in X and Y and for each
314         // tile a matrix will be created (by appendTransformations) that
315         // represents the needed transformation to map a filling in unit
316         // coordinates to that tile.
317         // When offsetX is given, every 2nd line will be ofsetted by the
318         // given percentage value (offsetX has to be 0.0 <= offsetX <= 1.0).
319         // Accordingly to offsetY. If both are given, offsetX is preferred
320         // and offsetY is ignored.
321 		class DRAWINGLAYER_DLLPUBLIC GeoTexSvxTiled : public GeoTexSvx
322 		{
323 		protected:
324 			basegfx::B2DRange               maRange;
325 			double                          mfOffsetX;
326 			double                          mfOffsetY;
327 
328 		public:
329 			GeoTexSvxTiled(
330                 const basegfx::B2DRange& rRange,
331                 double fOffsetX = 0.0,
332                 double fOffsetY = 0.0);
333 			virtual ~GeoTexSvxTiled();
334 
335 			// compare operator
336 			virtual bool operator==(const GeoTexSvx& rGeoTexSvx) const;
337 
338 			virtual void appendTransformations(::std::vector< basegfx::B2DHomMatrix >& rMatrices);
339 		};
340 	} // end of namespace texture
341 } // end of namespace drawinglayer
342 
343 //////////////////////////////////////////////////////////////////////////////
344 
345 #endif //_DRAWINGLAYER_TEXTURE_TEXTURE_HXX
346 
347 // eof
348