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/b2irange.hxx> 32 #include <basegfx/point/b2ipoint.hxx> 33 #include <basegfx/matrix/b2dhommatrix.hxx> 34 #include <basegfx/polygon/b2dpolygon.hxx> 35 #include <basegfx/polygon/b2dpolygontools.hxx> 36 #include <basegfx/polygon/b2dpolypolygon.hxx> 37 #include <basegfx/polygon/b2dpolypolygontools.hxx> 38 39 #include <basebmp/color.hxx> 40 #include <basebmp/scanlineformats.hxx> 41 #include <basebmp/bitmapdevice.hxx> 42 #include <basebmp/debug.hxx> 43 #include "tools.hxx" 44 45 #include <iostream> 46 #include <fstream> 47 48 using namespace ::basebmp; 49 50 namespace 51 { 52 /* 53 std::ofstream output("32bpp_test.dump"); 54 debugDump( rDevice, output ); 55 */ 56 57 class PolyTest : public ::testing::Test 58 { 59 protected: 60 BitmapDeviceSharedPtr mpDevice1bpp; 61 BitmapDeviceSharedPtr mpDevice32bpp; 62 63 void implTestEmpty(const BitmapDeviceSharedPtr& rDevice) 64 { 65 const Color aCol(0xFFFFFFFF); 66 const Color aBgCol(0); 67 rDevice->clear(aBgCol); 68 basegfx::B2DPolyPolygon aPoly; 69 ::rtl::OUString aSvg; 70 71 basegfx::tools::importFromSvgD( 72 aPoly, 73 rtl::OUString::createFromAscii( 74 "M2 2 l7 7 z" ), 75 false, NULL); 76 rDevice->fillPolyPolygon( 77 aPoly, 78 aCol, 79 DrawMode_PAINT ); 80 ASSERT_TRUE(countPixel( rDevice, aCol ) == 0) << "number of rendered pixel is not 0"; 81 82 // -------------------------------------------------- 83 84 rDevice->clear(aBgCol); 85 aPoly.clear(); 86 basegfx::tools::importFromSvgD( 87 aPoly, 88 rtl::OUString::createFromAscii( 89 "M7 2 l-6 6 z" ), 90 false, NULL); 91 rDevice->fillPolyPolygon( 92 aPoly, 93 aCol, 94 DrawMode_PAINT ); 95 ASSERT_TRUE(countPixel( rDevice, aCol ) == 0) << "number of rendered pixel is not 0(b)"; 96 } 97 98 void implTestHairline(const BitmapDeviceSharedPtr& rDevice) 99 { 100 const Color aCol(0xFFFFFFFF); 101 const Color aBgCol(0); 102 rDevice->clear(aBgCol); 103 basegfx::B2DPolyPolygon aPoly; 104 ::rtl::OUString aSvg; 105 106 basegfx::tools::importFromSvgD( 107 aPoly, 108 rtl::OUString::createFromAscii( 109 "M2 2 h1 l7 7 h-1 z" ), 110 false, NULL); 111 rDevice->fillPolyPolygon( 112 aPoly, 113 aCol, 114 DrawMode_PAINT ); 115 ASSERT_TRUE(countPixel( rDevice, aCol ) == 7) << "number of rendered pixel is not 7"; 116 117 // -------------------------------------------------- 118 119 rDevice->clear(aBgCol); 120 aPoly.clear(); 121 basegfx::tools::importFromSvgD( 122 aPoly, 123 rtl::OUString::createFromAscii( 124 "M7 2 h-1 l-6 6 h1 z" ), 125 false, NULL); 126 rDevice->fillPolyPolygon( 127 aPoly, 128 aCol, 129 DrawMode_PAINT ); 130 ASSERT_TRUE(countPixel( rDevice, aCol ) == 6) << "number of rendered pixel is not 6"; 131 132 // -------------------------------------------------- 133 134 rDevice->clear(aBgCol); 135 aPoly.clear(); 136 basegfx::tools::importFromSvgD( 137 aPoly, 138 rtl::OUString::createFromAscii( 139 "M0 0 l7 7 h-1 l-5-7 z" ), 140 false, NULL); 141 rDevice->fillPolyPolygon( 142 aPoly, 143 aCol, 144 DrawMode_PAINT ); 145 ASSERT_TRUE(countPixel( rDevice, aCol ) == 3) << "number of rendered pixel is not 3"; 146 } 147 148 void implTestPolyPoly(const BitmapDeviceSharedPtr& rDevice) 149 { 150 const Color aCol(0xFFFFFFFF); 151 const Color aBgCol(0); 152 rDevice->clear(aBgCol); 153 basegfx::B2DPolyPolygon aPoly; 154 ::rtl::OUString aSvg; 155 156 basegfx::tools::importFromSvgD( aPoly, 157 ::rtl::OUString::createFromAscii( 158 "M0 0 h7 v7 h-7 z M2 2 v3 h3 v-3 z" ), 159 false, NULL ); 160 161 rDevice->fillPolyPolygon( 162 aPoly, 163 aCol, 164 DrawMode_PAINT ); 165 ASSERT_TRUE(countPixel( rDevice, aCol ) == 40) << "number of rendered pixel is not 40"; 166 } 167 168 void implTestPolyPolyClip(const BitmapDeviceSharedPtr& rDevice) 169 { 170 const Color aCol(0xFFFFFFFF); 171 const Color aBgCol(0); 172 rDevice->clear(aBgCol); 173 basegfx::B2DPolyPolygon aPoly; 174 ::rtl::OUString aSvg; 175 176 basegfx::tools::importFromSvgD( aPoly, 177 ::rtl::OUString::createFromAscii( 178 "M0 0 h7 v7 h-7 z M2 2 v3 h3 v-3 z" ), 179 false, NULL ); 180 basegfx::B2DHomMatrix aMat; 181 aMat.translate(-3,-3); 182 aMat.rotate( 1.7 ); 183 aMat.translate(6,5); 184 aPoly.transform(aMat); 185 186 rDevice->fillPolyPolygon( 187 aPoly, 188 aCol, 189 DrawMode_PAINT ); 190 191 ASSERT_TRUE(countPixel( rDevice, aCol ) == 39) << "number of rendered pixel is not 39"; 192 193 BitmapDeviceSharedPtr pClippedDevice( 194 subsetBitmapDevice( rDevice, 195 basegfx::B2IRange(3,3,5,8) )); 196 197 rDevice->clear(aBgCol); 198 pClippedDevice->fillPolyPolygon( 199 aPoly, 200 aCol, 201 DrawMode_PAINT ); 202 ASSERT_TRUE(countPixel( rDevice, aCol ) == 7) << "number of rendered pixel is not 7"; 203 } 204 205 void implTestPolyPolyCrissCross(const BitmapDeviceSharedPtr& rDevice) 206 { 207 const Color aCol(0xFFFFFFFF); 208 const Color aBgCol(0); 209 rDevice->clear(aBgCol); 210 basegfx::B2DPolyPolygon aPoly; 211 ::rtl::OUString aSvg; 212 213 basegfx::tools::importFromSvgD( aPoly, 214 ::rtl::OUString::createFromAscii( 215 "M0 0 v2 l10 2 v-2 z" 216 "M10 6 v-2 l-10 2 v2 z" 217 "M1 0 h1 v10 h-1 z" 218 "M4 0 h1 v10 h-1 z" 219 "M8 0 h1 v10 h-1 z" ), 220 false, NULL ); 221 rDevice->fillPolyPolygon( 222 aPoly, 223 aCol, 224 DrawMode_PAINT ); 225 ASSERT_TRUE(countPixel( rDevice, aCol ) == 46) << "number of rendered pixel is not 46"; 226 } 227 228 229 public: 230 virtual void SetUp() 231 { 232 const basegfx::B2ISize aSize(10,10); 233 mpDevice1bpp = createBitmapDevice( aSize, 234 true, 235 Format::ONE_BIT_MSB_PAL ); 236 mpDevice32bpp = createBitmapDevice( aSize, 237 true, 238 Format::THIRTYTWO_BIT_TC_MASK ); 239 } 240 }; 241 242 243 TEST_F(PolyTest, testEmpty) 244 { 245 implTestEmpty( mpDevice1bpp ); 246 implTestEmpty( mpDevice32bpp ); 247 } 248 249 TEST_F(PolyTest, testHairline) 250 { 251 implTestHairline( mpDevice1bpp ); 252 implTestHairline( mpDevice32bpp ); 253 } 254 255 TEST_F(PolyTest, testPolyPoly) 256 { 257 implTestPolyPoly( mpDevice1bpp ); 258 implTestPolyPoly( mpDevice32bpp ); 259 } 260 261 TEST_F(PolyTest, testPolyPolyClip) 262 { 263 implTestPolyPolyClip(mpDevice1bpp); 264 implTestPolyPolyClip(mpDevice32bpp); 265 } 266 267 TEST_F(PolyTest, testPolyPolyCrissCross) 268 { 269 implTestPolyPolyCrissCross(mpDevice1bpp); 270 implTestPolyPolyCrissCross(mpDevice32bpp); 271 } 272 273 274 } 275