xref: /aoo4110/main/basebmp/test/filltest.cxx (revision b1cdbd2c)
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 // autogenerated file with codegen.pl
25 
26 #include "preextstl.h"
27 #include "cppunit/TestAssert.h"
28 #include "cppunit/TestFixture.h"
29 #include "cppunit/extensions/HelperMacros.h"
30 #include "postextstl.h"
31 
32 #include <basegfx/vector/b2isize.hxx>
33 #include <basegfx/range/b2drange.hxx>
34 #include <basegfx/point/b2ipoint.hxx>
35 #include <basegfx/polygon/b2dpolygon.hxx>
36 #include <basegfx/polygon/b2dpolygontools.hxx>
37 #include <basegfx/polygon/b2dpolypolygon.hxx>
38 #include <basegfx/polygon/b2dpolypolygontools.hxx>
39 
40 #include <basebmp/color.hxx>
41 #include <basebmp/scanlineformats.hxx>
42 #include <basebmp/bitmapdevice.hxx>
43 #include <basebmp/debug.hxx>
44 #include "tools.hxx"
45 
46 #include <iostream>
47 #include <fstream>
48 
49 using namespace ::basebmp;
50 
51 namespace
52 {
53 /*
54   std::ofstream output("32bpp_test.dump");
55   debugDump( mpDevice32bpp, output );
56 */
57 
58 class FillTest : public CppUnit::TestFixture
59 {
60 private:
61     BitmapDeviceSharedPtr mpDevice1bpp;
62     BitmapDeviceSharedPtr mpDevice32bpp;
63 
implTestRectFill(const BitmapDeviceSharedPtr & rDevice)64     void implTestRectFill(const BitmapDeviceSharedPtr& rDevice)
65     {
66         rDevice->clear(Color(0));
67 
68         const basegfx::B2DRange   aRect(1,1,10,10);
69 
70         const Color aCol(0xFFFFFFFF);
71         rDevice->fillPolyPolygon(
72             basegfx::B2DPolyPolygon(
73                 basegfx::tools::createPolygonFromRect( aRect )),
74             aCol,
75             DrawMode_PAINT );
76 
77         const basegfx::B2IPoint aPt1(1,1);
78         CPPUNIT_ASSERT_MESSAGE("first pixel set",
79                                rDevice->getPixel(aPt1) == aCol);
80         const basegfx::B2IPoint aPt2(9,9);
81         CPPUNIT_ASSERT_MESSAGE("last pixel set",
82                                rDevice->getPixel(aPt2) == aCol);
83         const basegfx::B2IPoint aPt3(0,0);
84         CPPUNIT_ASSERT_MESSAGE("topmost pixel not set",
85                                rDevice->getPixel(aPt3) != aCol);
86         const basegfx::B2IPoint aPt4(10,10);
87         CPPUNIT_ASSERT_MESSAGE("bottommost pixel not set",
88                                rDevice->getPixel(aPt4) != aCol);
89 
90         CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 81",
91                                countPixel( rDevice, aCol ) == 81);
92     }
93 
implTestCornerCases(const BitmapDeviceSharedPtr & rDevice)94     void implTestCornerCases(const BitmapDeviceSharedPtr& rDevice)
95     {
96         rDevice->clear(Color(0));
97 
98         const basegfx::B2DRange aEmpty1(0,0,0,11);
99         const basegfx::B2DRange aEmpty2(0,0,11,0);
100         const basegfx::B2DRange aVertLineLeft(0,0,1,11);
101         const basegfx::B2DRange aVertLineRight(10,0,11,11);
102         const basegfx::B2DRange aHorzLineTop(0,0,11,1);
103         const basegfx::B2DRange aHorzLineBottom(0,10,11,11);
104 
105         const Color aCol(0xFFFFFFFF);
106         rDevice->fillPolyPolygon(
107             basegfx::B2DPolyPolygon(
108                 basegfx::tools::createPolygonFromRect( aEmpty1 )),
109             aCol,
110             DrawMode_PAINT );
111         CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 0",
112                                countPixel( rDevice, aCol ) == 0);
113 
114         rDevice->fillPolyPolygon(
115             basegfx::B2DPolyPolygon(
116                 basegfx::tools::createPolygonFromRect( aEmpty2 )),
117             aCol,
118             DrawMode_PAINT );
119         CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 0",
120                                countPixel( rDevice, aCol ) == 0);
121 
122         rDevice->fillPolyPolygon(
123             basegfx::B2DPolyPolygon(
124                 basegfx::tools::createPolygonFromRect( aVertLineLeft )),
125             aCol,
126             DrawMode_PAINT );
127         CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 11",
128                                countPixel( rDevice, aCol ) == 11);
129         const basegfx::B2IPoint aPt1(0,0);
130         CPPUNIT_ASSERT_MESSAGE("first pixel set",
131                                rDevice->getPixel(aPt1) == aCol);
132 
133         rDevice->fillPolyPolygon(
134             basegfx::B2DPolyPolygon(
135                 basegfx::tools::createPolygonFromRect( aVertLineRight )),
136             aCol,
137             DrawMode_PAINT );
138         CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 22",
139                                countPixel( rDevice, aCol ) == 22);
140         const basegfx::B2IPoint aPt2(10,10);
141         CPPUNIT_ASSERT_MESSAGE("last pixel set",
142                                rDevice->getPixel(aPt2) == aCol);
143 
144         rDevice->fillPolyPolygon(
145             basegfx::B2DPolyPolygon(
146                 basegfx::tools::createPolygonFromRect( aHorzLineTop )),
147             aCol,
148             DrawMode_PAINT );
149         CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 31",
150                                countPixel( rDevice, aCol ) == 31);
151         const basegfx::B2IPoint aPt3(5,0);
152         CPPUNIT_ASSERT_MESSAGE("top-middle pixel set",
153                                rDevice->getPixel(aPt3) == aCol);
154 
155         rDevice->fillPolyPolygon(
156             basegfx::B2DPolyPolygon(
157                 basegfx::tools::createPolygonFromRect( aHorzLineBottom )),
158             aCol,
159             DrawMode_PAINT );
160         CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 40",
161                                countPixel( rDevice, aCol ) == 40);
162         const basegfx::B2IPoint aPt4(5,10);
163         CPPUNIT_ASSERT_MESSAGE("bottom-middle pixel set",
164                                rDevice->getPixel(aPt4) == aCol);
165 
166         ::rtl::OUString aSvg = ::rtl::OUString::createFromAscii(
167             "m 0 0l7 7h-1z" );
168 
169         basegfx::B2DPolyPolygon aPoly;
170         basegfx::tools::importFromSvgD( aPoly, aSvg );
171         rDevice->fillPolyPolygon(
172             aPoly,
173             aCol,
174             DrawMode_PAINT );
175         CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 43",
176                                countPixel( rDevice, aCol ) == 43);
177     }
178 
implTestClipping(const BitmapDeviceSharedPtr & rDevice)179     void implTestClipping(const BitmapDeviceSharedPtr& rDevice)
180     {
181         rDevice->clear(Color(0));
182 
183         const basegfx::B2DRange   aLeftTop(-10,-10,1,1);
184         const basegfx::B2DRange   aRightTop(10,-10,20,1);
185         const basegfx::B2DRange   aLeftBottom(-10,10,1,20);
186         const basegfx::B2DRange   aRightBottom(10,10,20,20);
187         const basegfx::B2DRange   aAllOver(-10,-10,20,20);
188 
189         const Color aCol(0xFFFFFFFF);
190         rDevice->fillPolyPolygon( basegfx::B2DPolyPolygon(
191                                       basegfx::tools::createPolygonFromRect(aLeftTop)),
192                                   aCol,
193                                   DrawMode_PAINT );
194         CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 1",
195                                countPixel( rDevice, aCol ) == 1);
196 
197         rDevice->fillPolyPolygon( basegfx::B2DPolyPolygon(
198                                       basegfx::tools::createPolygonFromRect(aRightTop)),
199                                   aCol,
200                                   DrawMode_PAINT );
201         CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 2",
202                                countPixel( rDevice, aCol ) == 2);
203 
204         rDevice->fillPolyPolygon( basegfx::B2DPolyPolygon(
205                                       basegfx::tools::createPolygonFromRect(aLeftBottom)),
206                                   aCol,
207                                   DrawMode_PAINT );
208         CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 3",
209                                countPixel( rDevice, aCol ) == 3);
210 
211         rDevice->fillPolyPolygon( basegfx::B2DPolyPolygon(
212                                       basegfx::tools::createPolygonFromRect(aRightBottom)),
213                                   aCol,
214                                   DrawMode_PAINT );
215         CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 4",
216                                countPixel( rDevice, aCol ) == 4);
217 
218         rDevice->fillPolyPolygon( basegfx::B2DPolyPolygon(
219                                       basegfx::tools::createPolygonFromRect(aAllOver)),
220                                   aCol,
221                                   DrawMode_PAINT );
222         CPPUNIT_ASSERT_MESSAGE("number of rendered pixel is not 121",
223                                countPixel( rDevice, aCol ) == 121);
224     }
225 
226 public:
setUp()227     void setUp()
228     {
229         const basegfx::B2ISize aSize(11,11);
230         mpDevice1bpp = createBitmapDevice( aSize,
231                                            true,
232                                            Format::ONE_BIT_MSB_PAL );
233         mpDevice32bpp = createBitmapDevice( aSize,
234                                            true,
235                                            Format::THIRTYTWO_BIT_TC_MASK );
236     }
237 
testRectFill()238     void testRectFill()
239     {
240         implTestRectFill( mpDevice1bpp );
241         implTestRectFill( mpDevice32bpp );
242     }
243 
testClipping()244     void testClipping()
245     {
246         implTestClipping( mpDevice1bpp );
247         implTestClipping( mpDevice32bpp );
248     }
249 
testCornerCases()250     void testCornerCases()
251     {
252         implTestCornerCases( mpDevice1bpp );
253         implTestCornerCases( mpDevice32bpp );
254     }
255 
256     // Change the following lines only, if you add, remove or rename
257     // member functions of the current class,
258     // because these macros are need by auto register mechanism.
259 
260     CPPUNIT_TEST_SUITE(FillTest);
261     CPPUNIT_TEST(testRectFill);
262     CPPUNIT_TEST(testClipping);
263     CPPUNIT_TEST(testCornerCases);
264     CPPUNIT_TEST_SUITE_END();
265 };
266 
267 // -----------------------------------------------------------------------------
268 CPPUNIT_TEST_SUITE_REGISTRATION(FillTest);
269 }
270 
271 
272 // -----------------------------------------------------------------------------
273 
274 // this macro creates an empty function, which will called by the RegisterAllFunctions()
275 // to let the user the possibility to also register some functions by hand.
276 //NOADDITIONAL;
277 
278