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 "gtest/gtest.h" 28 #include "postextstl.h" 29 30 #include <basegfx/vector/b2isize.hxx> 31 #include <basegfx/range/b2drange.hxx> 32 #include <basegfx/point/b2ipoint.hxx> 33 #include <basegfx/polygon/b2dpolygon.hxx> 34 #include <basegfx/polygon/b2dpolygontools.hxx> 35 #include <basegfx/polygon/b2dpolypolygon.hxx> 36 #include <basegfx/polygon/b2dpolypolygontools.hxx> 37 38 #include <basebmp/color.hxx> 39 #include <basebmp/scanlineformats.hxx> 40 #include <basebmp/bitmapdevice.hxx> 41 #include <basebmp/debug.hxx> 42 #include "tools.hxx" 43 44 #include <iostream> 45 #include <fstream> 46 47 using namespace ::basebmp; 48 49 namespace 50 { 51 /* 52 std::ofstream output("32bpp_test.dump"); 53 debugDump( mpDevice32bpp, output ); 54 */ 55 56 class FillTest : public ::testing::Test 57 { 58 protected: 59 BitmapDeviceSharedPtr mpDevice1bpp; 60 BitmapDeviceSharedPtr mpDevice32bpp; 61 62 void implTestRectFill(const BitmapDeviceSharedPtr& rDevice) 63 { 64 rDevice->clear(Color(0)); 65 66 const basegfx::B2DRange aRect(1,1,10,10); 67 68 const Color aCol(0xFFFFFFFF); 69 rDevice->fillPolyPolygon( 70 basegfx::B2DPolyPolygon( 71 basegfx::tools::createPolygonFromRect( aRect )), 72 aCol, 73 DrawMode_PAINT ); 74 75 const basegfx::B2IPoint aPt1(1,1); 76 ASSERT_TRUE(rDevice->getPixel(aPt1) == aCol) << "first pixel set"; 77 const basegfx::B2IPoint aPt2(9,9); 78 ASSERT_TRUE(rDevice->getPixel(aPt2) == aCol) << "last pixel set"; 79 const basegfx::B2IPoint aPt3(0,0); 80 ASSERT_TRUE(rDevice->getPixel(aPt3) != aCol) << "topmost pixel not set"; 81 const basegfx::B2IPoint aPt4(10,10); 82 ASSERT_TRUE(rDevice->getPixel(aPt4) != aCol) << "bottommost pixel not set"; 83 84 ASSERT_TRUE(countPixel( rDevice, aCol ) == 81) << "number of rendered pixel is not 81"; 85 } 86 87 void implTestCornerCases(const BitmapDeviceSharedPtr& rDevice) 88 { 89 rDevice->clear(Color(0)); 90 91 const basegfx::B2DRange aEmpty1(0,0,0,11); 92 const basegfx::B2DRange aEmpty2(0,0,11,0); 93 const basegfx::B2DRange aVertLineLeft(0,0,1,11); 94 const basegfx::B2DRange aVertLineRight(10,0,11,11); 95 const basegfx::B2DRange aHorzLineTop(0,0,11,1); 96 const basegfx::B2DRange aHorzLineBottom(0,10,11,11); 97 98 const Color aCol(0xFFFFFFFF); 99 rDevice->fillPolyPolygon( 100 basegfx::B2DPolyPolygon( 101 basegfx::tools::createPolygonFromRect( aEmpty1 )), 102 aCol, 103 DrawMode_PAINT ); 104 ASSERT_TRUE(countPixel( rDevice, aCol ) == 0) << "number of rendered pixel is not 0"; 105 106 rDevice->fillPolyPolygon( 107 basegfx::B2DPolyPolygon( 108 basegfx::tools::createPolygonFromRect( aEmpty2 )), 109 aCol, 110 DrawMode_PAINT ); 111 ASSERT_TRUE(countPixel( rDevice, aCol ) == 0) << "number of rendered pixel is not 0"; 112 113 rDevice->fillPolyPolygon( 114 basegfx::B2DPolyPolygon( 115 basegfx::tools::createPolygonFromRect( aVertLineLeft )), 116 aCol, 117 DrawMode_PAINT ); 118 ASSERT_TRUE(countPixel( rDevice, aCol ) == 11) << "number of rendered pixel is not 11"; 119 const basegfx::B2IPoint aPt1(0,0); 120 ASSERT_TRUE(rDevice->getPixel(aPt1) == aCol) << "first pixel set"; 121 122 rDevice->fillPolyPolygon( 123 basegfx::B2DPolyPolygon( 124 basegfx::tools::createPolygonFromRect( aVertLineRight )), 125 aCol, 126 DrawMode_PAINT ); 127 ASSERT_TRUE(countPixel( rDevice, aCol ) == 22) << "number of rendered pixel is not 22"; 128 const basegfx::B2IPoint aPt2(10,10); 129 ASSERT_TRUE(rDevice->getPixel(aPt2) == aCol) << "last pixel set"; 130 131 rDevice->fillPolyPolygon( 132 basegfx::B2DPolyPolygon( 133 basegfx::tools::createPolygonFromRect( aHorzLineTop )), 134 aCol, 135 DrawMode_PAINT ); 136 ASSERT_TRUE(countPixel( rDevice, aCol ) == 31) << "number of rendered pixel is not 31"; 137 const basegfx::B2IPoint aPt3(5,0); 138 ASSERT_TRUE(rDevice->getPixel(aPt3) == aCol) << "top-middle pixel set"; 139 140 rDevice->fillPolyPolygon( 141 basegfx::B2DPolyPolygon( 142 basegfx::tools::createPolygonFromRect( aHorzLineBottom )), 143 aCol, 144 DrawMode_PAINT ); 145 ASSERT_TRUE(countPixel( rDevice, aCol ) == 40) << "number of rendered pixel is not 40"; 146 const basegfx::B2IPoint aPt4(5,10); 147 ASSERT_TRUE(rDevice->getPixel(aPt4) == aCol) << "bottom-middle pixel set"; 148 149 ::rtl::OUString aSvg = ::rtl::OUString::createFromAscii( 150 "m 0 0l7 7h-1z" ); 151 152 basegfx::B2DPolyPolygon aPoly; 153 basegfx::tools::importFromSvgD( aPoly, aSvg, false, NULL ); 154 rDevice->fillPolyPolygon( 155 aPoly, 156 aCol, 157 DrawMode_PAINT ); 158 ASSERT_TRUE(countPixel( rDevice, aCol ) == 43) << "number of rendered pixel is not 43"; 159 } 160 161 void implTestClipping(const BitmapDeviceSharedPtr& rDevice) 162 { 163 rDevice->clear(Color(0)); 164 165 const basegfx::B2DRange aLeftTop(-10,-10,1,1); 166 const basegfx::B2DRange aRightTop(10,-10,20,1); 167 const basegfx::B2DRange aLeftBottom(-10,10,1,20); 168 const basegfx::B2DRange aRightBottom(10,10,20,20); 169 const basegfx::B2DRange aAllOver(-10,-10,20,20); 170 171 const Color aCol(0xFFFFFFFF); 172 rDevice->fillPolyPolygon( basegfx::B2DPolyPolygon( 173 basegfx::tools::createPolygonFromRect(aLeftTop)), 174 aCol, 175 DrawMode_PAINT ); 176 ASSERT_TRUE(countPixel( rDevice, aCol ) == 1) << "number of rendered pixel is not 1"; 177 178 rDevice->fillPolyPolygon( basegfx::B2DPolyPolygon( 179 basegfx::tools::createPolygonFromRect(aRightTop)), 180 aCol, 181 DrawMode_PAINT ); 182 ASSERT_TRUE(countPixel( rDevice, aCol ) == 2) << "number of rendered pixel is not 2"; 183 184 rDevice->fillPolyPolygon( basegfx::B2DPolyPolygon( 185 basegfx::tools::createPolygonFromRect(aLeftBottom)), 186 aCol, 187 DrawMode_PAINT ); 188 ASSERT_TRUE(countPixel( rDevice, aCol ) == 3) << "number of rendered pixel is not 3"; 189 190 rDevice->fillPolyPolygon( basegfx::B2DPolyPolygon( 191 basegfx::tools::createPolygonFromRect(aRightBottom)), 192 aCol, 193 DrawMode_PAINT ); 194 ASSERT_TRUE(countPixel( rDevice, aCol ) == 4) << "number of rendered pixel is not 4"; 195 196 rDevice->fillPolyPolygon( basegfx::B2DPolyPolygon( 197 basegfx::tools::createPolygonFromRect(aAllOver)), 198 aCol, 199 DrawMode_PAINT ); 200 ASSERT_TRUE(countPixel( rDevice, aCol ) == 121) << "number of rendered pixel is not 121"; 201 } 202 203 public: 204 virtual void SetUp() 205 { 206 const basegfx::B2ISize aSize(11,11); 207 mpDevice1bpp = createBitmapDevice( aSize, 208 true, 209 Format::ONE_BIT_MSB_PAL ); 210 mpDevice32bpp = createBitmapDevice( aSize, 211 true, 212 Format::THIRTYTWO_BIT_TC_MASK ); 213 } 214 }; 215 216 TEST_F(FillTest, testRectFill) 217 { 218 implTestRectFill( mpDevice1bpp ); 219 implTestRectFill( mpDevice32bpp ); 220 } 221 222 TEST_F(FillTest, testClipping) 223 { 224 implTestClipping( mpDevice1bpp ); 225 implTestClipping( mpDevice32bpp ); 226 } 227 228 TEST_F(FillTest, testCornerCases) 229 { 230 implTestCornerCases( mpDevice1bpp ); 231 implTestCornerCases( mpDevice32bpp ); 232 } 233 234 235 } 236