xref: /aoo42x/main/basebmp/test/polytest.cxx (revision 97c63c1b)
169de5a4cSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
369de5a4cSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
469de5a4cSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
569de5a4cSAndrew Rist  * distributed with this work for additional information
669de5a4cSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
769de5a4cSAndrew Rist  * to you under the Apache License, Version 2.0 (the
869de5a4cSAndrew Rist  * "License"); you may not use this file except in compliance
969de5a4cSAndrew Rist  * with the License.  You may obtain a copy of the License at
1069de5a4cSAndrew Rist  *
1169de5a4cSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
1269de5a4cSAndrew Rist  *
1369de5a4cSAndrew Rist  * Unless required by applicable law or agreed to in writing,
1469de5a4cSAndrew Rist  * software distributed under the License is distributed on an
1569de5a4cSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1669de5a4cSAndrew Rist  * KIND, either express or implied.  See the License for the
1769de5a4cSAndrew Rist  * specific language governing permissions and limitations
1869de5a4cSAndrew Rist  * under the License.
1969de5a4cSAndrew Rist  *
2069de5a4cSAndrew Rist  *************************************************************/
2169de5a4cSAndrew Rist 
2269de5a4cSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // autogenerated file with codegen.pl
25cdf0e10cSrcweir 
26cdf0e10cSrcweir #include "preextstl.h"
27*97c63c1bSDamjan Jovanovic #include "gtest/gtest.h"
28cdf0e10cSrcweir #include "postextstl.h"
29cdf0e10cSrcweir 
30cdf0e10cSrcweir #include <basegfx/vector/b2isize.hxx>
31cdf0e10cSrcweir #include <basegfx/range/b2irange.hxx>
32cdf0e10cSrcweir #include <basegfx/point/b2ipoint.hxx>
33cdf0e10cSrcweir #include <basegfx/matrix/b2dhommatrix.hxx>
34cdf0e10cSrcweir #include <basegfx/polygon/b2dpolygon.hxx>
35cdf0e10cSrcweir #include <basegfx/polygon/b2dpolygontools.hxx>
36cdf0e10cSrcweir #include <basegfx/polygon/b2dpolypolygon.hxx>
37cdf0e10cSrcweir #include <basegfx/polygon/b2dpolypolygontools.hxx>
38cdf0e10cSrcweir 
39cdf0e10cSrcweir #include <basebmp/color.hxx>
40cdf0e10cSrcweir #include <basebmp/scanlineformats.hxx>
41cdf0e10cSrcweir #include <basebmp/bitmapdevice.hxx>
42cdf0e10cSrcweir #include <basebmp/debug.hxx>
43cdf0e10cSrcweir #include "tools.hxx"
44cdf0e10cSrcweir 
45cdf0e10cSrcweir #include <iostream>
46cdf0e10cSrcweir #include <fstream>
47cdf0e10cSrcweir 
48cdf0e10cSrcweir using namespace ::basebmp;
49cdf0e10cSrcweir 
50cdf0e10cSrcweir namespace
51cdf0e10cSrcweir {
52cdf0e10cSrcweir /*
53cdf0e10cSrcweir         std::ofstream output("32bpp_test.dump");
54cdf0e10cSrcweir         debugDump( rDevice, output );
55cdf0e10cSrcweir */
56cdf0e10cSrcweir 
57*97c63c1bSDamjan Jovanovic class PolyTest : public ::testing::Test
58cdf0e10cSrcweir {
59*97c63c1bSDamjan Jovanovic protected:
60cdf0e10cSrcweir     BitmapDeviceSharedPtr mpDevice1bpp;
61cdf0e10cSrcweir     BitmapDeviceSharedPtr mpDevice32bpp;
62cdf0e10cSrcweir 
implTestEmpty(const BitmapDeviceSharedPtr & rDevice)63cdf0e10cSrcweir     void implTestEmpty(const BitmapDeviceSharedPtr& rDevice)
64cdf0e10cSrcweir     {
65cdf0e10cSrcweir         const Color aCol(0xFFFFFFFF);
66cdf0e10cSrcweir         const Color aBgCol(0);
67cdf0e10cSrcweir         rDevice->clear(aBgCol);
68cdf0e10cSrcweir         basegfx::B2DPolyPolygon aPoly;
69cdf0e10cSrcweir         ::rtl::OUString aSvg;
70cdf0e10cSrcweir 
71cdf0e10cSrcweir         basegfx::tools::importFromSvgD(
72cdf0e10cSrcweir             aPoly,
73cdf0e10cSrcweir             rtl::OUString::createFromAscii(
74*97c63c1bSDamjan Jovanovic                 "M2 2 l7 7 z" ),
75*97c63c1bSDamjan Jovanovic             false, NULL);
76cdf0e10cSrcweir         rDevice->fillPolyPolygon(
77cdf0e10cSrcweir             aPoly,
78cdf0e10cSrcweir             aCol,
79cdf0e10cSrcweir             DrawMode_PAINT );
80*97c63c1bSDamjan Jovanovic         ASSERT_TRUE(countPixel( rDevice, aCol ) == 0) << "number of rendered pixel is not 0";
81cdf0e10cSrcweir 
82cdf0e10cSrcweir         // --------------------------------------------------
83cdf0e10cSrcweir 
84cdf0e10cSrcweir         rDevice->clear(aBgCol);
85cdf0e10cSrcweir         aPoly.clear();
86cdf0e10cSrcweir         basegfx::tools::importFromSvgD(
87cdf0e10cSrcweir             aPoly,
88cdf0e10cSrcweir             rtl::OUString::createFromAscii(
89*97c63c1bSDamjan Jovanovic             "M7 2 l-6 6 z" ),
90*97c63c1bSDamjan Jovanovic             false, NULL);
91cdf0e10cSrcweir         rDevice->fillPolyPolygon(
92cdf0e10cSrcweir             aPoly,
93cdf0e10cSrcweir             aCol,
94cdf0e10cSrcweir             DrawMode_PAINT );
95*97c63c1bSDamjan Jovanovic         ASSERT_TRUE(countPixel( rDevice, aCol ) == 0) << "number of rendered pixel is not 0(b)";
96cdf0e10cSrcweir     }
97cdf0e10cSrcweir 
implTestHairline(const BitmapDeviceSharedPtr & rDevice)98cdf0e10cSrcweir     void implTestHairline(const BitmapDeviceSharedPtr& rDevice)
99cdf0e10cSrcweir     {
100cdf0e10cSrcweir         const Color aCol(0xFFFFFFFF);
101cdf0e10cSrcweir         const Color aBgCol(0);
102cdf0e10cSrcweir         rDevice->clear(aBgCol);
103cdf0e10cSrcweir         basegfx::B2DPolyPolygon aPoly;
104cdf0e10cSrcweir         ::rtl::OUString aSvg;
105cdf0e10cSrcweir 
106cdf0e10cSrcweir         basegfx::tools::importFromSvgD(
107cdf0e10cSrcweir             aPoly,
108cdf0e10cSrcweir             rtl::OUString::createFromAscii(
109*97c63c1bSDamjan Jovanovic                 "M2 2 h1 l7 7 h-1 z" ),
110*97c63c1bSDamjan Jovanovic             false, NULL);
111cdf0e10cSrcweir         rDevice->fillPolyPolygon(
112cdf0e10cSrcweir             aPoly,
113cdf0e10cSrcweir             aCol,
114cdf0e10cSrcweir             DrawMode_PAINT );
115*97c63c1bSDamjan Jovanovic         ASSERT_TRUE(countPixel( rDevice, aCol ) == 7) << "number of rendered pixel is not 7";
116cdf0e10cSrcweir 
117cdf0e10cSrcweir         // --------------------------------------------------
118cdf0e10cSrcweir 
119cdf0e10cSrcweir         rDevice->clear(aBgCol);
120cdf0e10cSrcweir         aPoly.clear();
121cdf0e10cSrcweir         basegfx::tools::importFromSvgD(
122cdf0e10cSrcweir             aPoly,
123cdf0e10cSrcweir             rtl::OUString::createFromAscii(
124*97c63c1bSDamjan Jovanovic             "M7 2 h-1 l-6 6 h1 z" ),
125*97c63c1bSDamjan Jovanovic             false, NULL);
126cdf0e10cSrcweir         rDevice->fillPolyPolygon(
127cdf0e10cSrcweir             aPoly,
128cdf0e10cSrcweir             aCol,
129cdf0e10cSrcweir             DrawMode_PAINT );
130*97c63c1bSDamjan Jovanovic         ASSERT_TRUE(countPixel( rDevice, aCol ) == 6) << "number of rendered pixel is not 6";
131cdf0e10cSrcweir 
132cdf0e10cSrcweir         // --------------------------------------------------
133cdf0e10cSrcweir 
134cdf0e10cSrcweir         rDevice->clear(aBgCol);
135cdf0e10cSrcweir         aPoly.clear();
136cdf0e10cSrcweir         basegfx::tools::importFromSvgD(
137cdf0e10cSrcweir             aPoly,
138cdf0e10cSrcweir             rtl::OUString::createFromAscii(
139*97c63c1bSDamjan Jovanovic             "M0 0 l7 7 h-1 l-5-7 z" ),
140*97c63c1bSDamjan Jovanovic             false, NULL);
141cdf0e10cSrcweir         rDevice->fillPolyPolygon(
142cdf0e10cSrcweir             aPoly,
143cdf0e10cSrcweir             aCol,
144cdf0e10cSrcweir             DrawMode_PAINT );
145*97c63c1bSDamjan Jovanovic         ASSERT_TRUE(countPixel( rDevice, aCol ) == 3) << "number of rendered pixel is not 3";
146cdf0e10cSrcweir     }
147cdf0e10cSrcweir 
implTestPolyPoly(const BitmapDeviceSharedPtr & rDevice)148cdf0e10cSrcweir     void implTestPolyPoly(const BitmapDeviceSharedPtr& rDevice)
149cdf0e10cSrcweir     {
150cdf0e10cSrcweir         const Color aCol(0xFFFFFFFF);
151cdf0e10cSrcweir         const Color aBgCol(0);
152cdf0e10cSrcweir         rDevice->clear(aBgCol);
153cdf0e10cSrcweir         basegfx::B2DPolyPolygon aPoly;
154cdf0e10cSrcweir         ::rtl::OUString aSvg;
155cdf0e10cSrcweir 
156cdf0e10cSrcweir         basegfx::tools::importFromSvgD( aPoly,
157cdf0e10cSrcweir                                         ::rtl::OUString::createFromAscii(
158*97c63c1bSDamjan Jovanovic                                             "M0 0 h7 v7 h-7 z M2 2 v3 h3 v-3 z" ),
159*97c63c1bSDamjan Jovanovic                                         false, NULL );
160cdf0e10cSrcweir 
161cdf0e10cSrcweir         rDevice->fillPolyPolygon(
162cdf0e10cSrcweir             aPoly,
163cdf0e10cSrcweir             aCol,
164cdf0e10cSrcweir             DrawMode_PAINT );
165*97c63c1bSDamjan Jovanovic         ASSERT_TRUE(countPixel( rDevice, aCol ) == 40) << "number of rendered pixel is not 40";
166cdf0e10cSrcweir     }
167cdf0e10cSrcweir 
implTestPolyPolyClip(const BitmapDeviceSharedPtr & rDevice)168cdf0e10cSrcweir     void implTestPolyPolyClip(const BitmapDeviceSharedPtr& rDevice)
169cdf0e10cSrcweir     {
170cdf0e10cSrcweir         const Color aCol(0xFFFFFFFF);
171cdf0e10cSrcweir         const Color aBgCol(0);
172cdf0e10cSrcweir         rDevice->clear(aBgCol);
173cdf0e10cSrcweir         basegfx::B2DPolyPolygon aPoly;
174cdf0e10cSrcweir         ::rtl::OUString aSvg;
175cdf0e10cSrcweir 
176cdf0e10cSrcweir         basegfx::tools::importFromSvgD( aPoly,
177cdf0e10cSrcweir                                         ::rtl::OUString::createFromAscii(
178*97c63c1bSDamjan Jovanovic                                             "M0 0 h7 v7 h-7 z M2 2 v3 h3 v-3 z" ),
179*97c63c1bSDamjan Jovanovic                                         false, NULL );
180cdf0e10cSrcweir         basegfx::B2DHomMatrix aMat;
181cdf0e10cSrcweir         aMat.translate(-3,-3);
182cdf0e10cSrcweir         aMat.rotate( 1.7 );
183cdf0e10cSrcweir         aMat.translate(6,5);
184cdf0e10cSrcweir         aPoly.transform(aMat);
185cdf0e10cSrcweir 
186cdf0e10cSrcweir         rDevice->fillPolyPolygon(
187cdf0e10cSrcweir             aPoly,
188cdf0e10cSrcweir             aCol,
189cdf0e10cSrcweir             DrawMode_PAINT );
190cdf0e10cSrcweir 
191*97c63c1bSDamjan Jovanovic         ASSERT_TRUE(countPixel( rDevice, aCol ) == 39) << "number of rendered pixel is not 39";
192cdf0e10cSrcweir 
193cdf0e10cSrcweir         BitmapDeviceSharedPtr pClippedDevice(
194cdf0e10cSrcweir             subsetBitmapDevice( rDevice,
195cdf0e10cSrcweir                                 basegfx::B2IRange(3,3,5,8) ));
196cdf0e10cSrcweir 
197cdf0e10cSrcweir         rDevice->clear(aBgCol);
198cdf0e10cSrcweir         pClippedDevice->fillPolyPolygon(
199cdf0e10cSrcweir             aPoly,
200cdf0e10cSrcweir             aCol,
201cdf0e10cSrcweir             DrawMode_PAINT );
202*97c63c1bSDamjan Jovanovic         ASSERT_TRUE(countPixel( rDevice, aCol ) == 7) << "number of rendered pixel is not 7";
203cdf0e10cSrcweir     }
204cdf0e10cSrcweir 
implTestPolyPolyCrissCross(const BitmapDeviceSharedPtr & rDevice)205cdf0e10cSrcweir     void implTestPolyPolyCrissCross(const BitmapDeviceSharedPtr& rDevice)
206cdf0e10cSrcweir     {
207cdf0e10cSrcweir         const Color aCol(0xFFFFFFFF);
208cdf0e10cSrcweir         const Color aBgCol(0);
209cdf0e10cSrcweir         rDevice->clear(aBgCol);
210cdf0e10cSrcweir         basegfx::B2DPolyPolygon aPoly;
211cdf0e10cSrcweir         ::rtl::OUString aSvg;
212cdf0e10cSrcweir 
213cdf0e10cSrcweir         basegfx::tools::importFromSvgD( aPoly,
214cdf0e10cSrcweir                                         ::rtl::OUString::createFromAscii(
215cdf0e10cSrcweir                                             "M0 0 v2 l10 2 v-2 z"
216cdf0e10cSrcweir                                             "M10 6 v-2 l-10 2 v2 z"
217cdf0e10cSrcweir                                             "M1 0 h1 v10 h-1 z"
218cdf0e10cSrcweir                                             "M4 0 h1 v10 h-1 z"
219*97c63c1bSDamjan Jovanovic                                             "M8 0 h1 v10 h-1 z" ),
220*97c63c1bSDamjan Jovanovic                                         false, NULL );
221cdf0e10cSrcweir         rDevice->fillPolyPolygon(
222cdf0e10cSrcweir             aPoly,
223cdf0e10cSrcweir             aCol,
224cdf0e10cSrcweir             DrawMode_PAINT );
225*97c63c1bSDamjan Jovanovic         ASSERT_TRUE(countPixel( rDevice, aCol ) == 46) << "number of rendered pixel is not 46";
226cdf0e10cSrcweir     }
227cdf0e10cSrcweir 
228cdf0e10cSrcweir 
229cdf0e10cSrcweir public:
SetUp()230*97c63c1bSDamjan Jovanovic     virtual void SetUp()
231cdf0e10cSrcweir     {
232cdf0e10cSrcweir         const basegfx::B2ISize aSize(10,10);
233cdf0e10cSrcweir         mpDevice1bpp = createBitmapDevice( aSize,
234cdf0e10cSrcweir                                            true,
235cdf0e10cSrcweir                                            Format::ONE_BIT_MSB_PAL );
236cdf0e10cSrcweir         mpDevice32bpp = createBitmapDevice( aSize,
237cdf0e10cSrcweir                                             true,
238cdf0e10cSrcweir                                             Format::THIRTYTWO_BIT_TC_MASK );
239cdf0e10cSrcweir     }
240*97c63c1bSDamjan Jovanovic };
241cdf0e10cSrcweir 
242cdf0e10cSrcweir 
TEST_F(PolyTest,testEmpty)243*97c63c1bSDamjan Jovanovic TEST_F(PolyTest, testEmpty)
244*97c63c1bSDamjan Jovanovic {
245*97c63c1bSDamjan Jovanovic     implTestEmpty( mpDevice1bpp );
246*97c63c1bSDamjan Jovanovic     implTestEmpty( mpDevice32bpp );
247*97c63c1bSDamjan Jovanovic }
248cdf0e10cSrcweir 
TEST_F(PolyTest,testHairline)249*97c63c1bSDamjan Jovanovic TEST_F(PolyTest, testHairline)
250*97c63c1bSDamjan Jovanovic {
251*97c63c1bSDamjan Jovanovic     implTestHairline( mpDevice1bpp );
252*97c63c1bSDamjan Jovanovic     implTestHairline( mpDevice32bpp );
253*97c63c1bSDamjan Jovanovic }
254cdf0e10cSrcweir 
TEST_F(PolyTest,testPolyPoly)255*97c63c1bSDamjan Jovanovic TEST_F(PolyTest, testPolyPoly)
256*97c63c1bSDamjan Jovanovic {
257*97c63c1bSDamjan Jovanovic     implTestPolyPoly( mpDevice1bpp );
258*97c63c1bSDamjan Jovanovic     implTestPolyPoly( mpDevice32bpp );
259cdf0e10cSrcweir }
260cdf0e10cSrcweir 
TEST_F(PolyTest,testPolyPolyClip)261*97c63c1bSDamjan Jovanovic TEST_F(PolyTest, testPolyPolyClip)
262*97c63c1bSDamjan Jovanovic {
263*97c63c1bSDamjan Jovanovic     implTestPolyPolyClip(mpDevice1bpp);
264*97c63c1bSDamjan Jovanovic     implTestPolyPolyClip(mpDevice32bpp);
265*97c63c1bSDamjan Jovanovic }
266cdf0e10cSrcweir 
TEST_F(PolyTest,testPolyPolyCrissCross)267*97c63c1bSDamjan Jovanovic TEST_F(PolyTest, testPolyPolyCrissCross)
268*97c63c1bSDamjan Jovanovic {
269*97c63c1bSDamjan Jovanovic     implTestPolyPolyCrissCross(mpDevice1bpp);
270*97c63c1bSDamjan Jovanovic     implTestPolyPolyCrissCross(mpDevice32bpp);
271*97c63c1bSDamjan Jovanovic }
272cdf0e10cSrcweir 
273cdf0e10cSrcweir 
274*97c63c1bSDamjan Jovanovic }
275