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/point/b2ipoint.hxx> 32 #include <basegfx/range/b2drange.hxx> 33 #include <basegfx/range/b2irange.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( mpDevice32bpp, output ); 55 */ 56 57 class ClipTest : public ::testing::Test 58 { 59 protected: 60 BitmapDeviceSharedPtr mpClipMask; 61 BitmapDeviceSharedPtr mpDevice1bpp; 62 BitmapDeviceSharedPtr mpDevice32bpp; 63 64 void implTestPixelClip(const BitmapDeviceSharedPtr& rDevice) 65 { 66 const Color aBgCol(0); 67 rDevice->clear(aBgCol); 68 69 const basegfx::B2IPoint aPt(0,0); 70 const Color aCol(0xFFFFFFFF); 71 rDevice->setPixel( aPt, aCol, DrawMode_PAINT, mpClipMask ); 72 ASSERT_TRUE(rDevice->getPixel(aPt) == aBgCol) << "get/setPixel clip #1"; 73 74 const basegfx::B2IPoint aPt2(10,10); 75 rDevice->setPixel( aPt2, aCol, DrawMode_PAINT, mpClipMask ); 76 ASSERT_TRUE(rDevice->getPixel(aPt2) == aBgCol) << "get/setPixel clip #2"; 77 78 const basegfx::B2IPoint aPt1(10,0); 79 rDevice->setPixel( aPt1, aCol, DrawMode_PAINT, mpClipMask ); 80 ASSERT_TRUE(rDevice->getPixel(aPt1) != aBgCol) << "get/setPixel clip #3"; 81 82 const basegfx::B2IPoint aPt3(0,10); 83 rDevice->setPixel( aPt3, aCol, DrawMode_PAINT, mpClipMask ); 84 ASSERT_TRUE(rDevice->getPixel(aPt3) != aBgCol) << "get/setPixel clip #4"; 85 } 86 87 void implTestLineClip(const BitmapDeviceSharedPtr& rDevice) 88 { 89 const Color aBgCol(0); 90 rDevice->clear(aBgCol); 91 92 const basegfx::B2IPoint aPt1(0,0); 93 const basegfx::B2IPoint aPt2(1,9); 94 const Color aCol(0xFFFFFFFF); 95 rDevice->drawLine( aPt1, aPt2, aCol, DrawMode_PAINT, mpClipMask ); 96 97 const basegfx::B2IPoint aPt3(1,5); 98 ASSERT_TRUE(rDevice->getPixel(aPt3) != aBgCol) << "get line pixel"; 99 ASSERT_TRUE(countPixel( rDevice, rDevice->getPixel(aPt3) ) == 4) 100 << "number of rendered line pixel is not 4"; 101 102 rDevice->drawLine( aPt1, aPt2, aCol, DrawMode_XOR, mpClipMask ); 103 ASSERT_TRUE(countPixel( rDevice, rDevice->getPixel(aPt3) ) == 121) 104 << "number of xor-rendered line pixel is not 0"; 105 } 106 107 void implTestFillClip(const BitmapDeviceSharedPtr& rDevice) 108 { 109 rDevice->clear(Color(0)); 110 111 const basegfx::B2DRange aAllOver(-10,-10,20,20); 112 const Color aCol(0xFFFFFFFF); 113 rDevice->fillPolyPolygon( basegfx::B2DPolyPolygon( 114 basegfx::tools::createPolygonFromRect(aAllOver)), 115 aCol, 116 DrawMode_PAINT, 117 mpClipMask ); 118 const basegfx::B2IPoint aPt(0,10); 119 ASSERT_TRUE(countPixel( rDevice, rDevice->getPixel(aPt) ) == 121-30) 120 << "number of clipped pixel is not 30"; 121 122 rDevice->fillPolyPolygon( basegfx::B2DPolyPolygon( 123 basegfx::tools::createPolygonFromRect(aAllOver)), 124 aCol, 125 DrawMode_PAINT ); 126 ASSERT_TRUE(countPixel( rDevice, rDevice->getPixel(aPt) ) == 121) 127 << "number of filled pixel is not 121"; 128 129 rDevice->fillPolyPolygon( basegfx::B2DPolyPolygon( 130 basegfx::tools::createPolygonFromRect(aAllOver)), 131 aCol, 132 DrawMode_XOR, 133 mpClipMask ); 134 ASSERT_TRUE(countPixel( rDevice, rDevice->getPixel(aPt) ) == 121-30) 135 << "number of xor-cleared pixel is not 91"; 136 } 137 138 void implTestBmpClip(const BitmapDeviceSharedPtr& rDevice) 139 { 140 BitmapDeviceSharedPtr pBmp( cloneBitmapDevice( 141 basegfx::B2IVector(3,3), 142 rDevice )); 143 Color aCol1(0); 144 Color aCol2(0xFFFFFFFF); 145 pBmp->clear(aCol1); 146 pBmp->setPixel(basegfx::B2IPoint(0,0),aCol2,DrawMode_PAINT); 147 pBmp->setPixel(basegfx::B2IPoint(1,1),aCol2,DrawMode_PAINT); 148 pBmp->setPixel(basegfx::B2IPoint(2,2),aCol2,basebmp::DrawMode_PAINT); 149 150 rDevice->clear(aCol1); 151 rDevice->drawBitmap(pBmp, 152 basegfx::B2IRange(0,0,3,3), 153 basegfx::B2IRange(-1,-1,4,4), 154 DrawMode_PAINT, 155 mpClipMask); 156 157 const basegfx::B2IPoint aPt(1,1); 158 ASSERT_TRUE(countPixel( rDevice, rDevice->getPixel(aPt) ) == 5) 159 << "number of clipped pixel is not 5"; 160 } 161 162 void implTestMaskColorClip(const BitmapDeviceSharedPtr& rDevice) 163 { 164 BitmapDeviceSharedPtr pBmp( createBitmapDevice( rDevice->getSize(), 165 true, 166 Format::EIGHT_BIT_GREY )); 167 168 ::rtl::OUString aSvg = ::rtl::OUString::createFromAscii( 169 "m 0 0h5v10h5v-5h-10z" ); 170 171 basegfx::B2DPolyPolygon aPoly; 172 basegfx::tools::importFromSvgD( aPoly, aSvg, false, NULL ); 173 const basebmp::Color aCol(0xFF); 174 pBmp->clear( basebmp::Color(0) ); 175 pBmp->fillPolyPolygon( 176 aPoly, 177 aCol, 178 basebmp::DrawMode_PAINT ); 179 180 const basegfx::B2IRange aSourceRect(0,0,10,10); 181 const basegfx::B2IPoint aDestLeftTop(0,0); 182 const Color aCol2(0xF0F0F0F0); 183 rDevice->drawMaskedColor( 184 aCol2, 185 pBmp, 186 aSourceRect, 187 aDestLeftTop, 188 mpClipMask ); 189 const basegfx::B2IPoint aPt(1,1); 190 ASSERT_TRUE(countPixel( rDevice, rDevice->getPixel(aPt) ) == 41) 191 << "number of rendered pixel is not 41"; 192 193 } 194 195 public: 196 virtual void SetUp() 197 { 198 const basegfx::B2ISize aSize(11,11); 199 mpClipMask = createBitmapDevice( aSize, 200 true, 201 Format::ONE_BIT_MSB_GREY ); 202 mpDevice1bpp = createBitmapDevice( aSize, 203 true, 204 Format::ONE_BIT_MSB_PAL ); 205 mpDevice32bpp = createBitmapDevice( aSize, 206 true, 207 Format::THIRTYTWO_BIT_TC_MASK ); 208 209 ::rtl::OUString aSvg = ::rtl::OUString::createFromAscii( 210 "m 0 0 h5 l5 5 v5 h-5 l-5-5 z" ); 211 basegfx::B2DPolyPolygon aPoly; 212 basegfx::tools::importFromSvgD( aPoly, aSvg, false, NULL ); 213 mpClipMask->clear(Color(0)); 214 mpClipMask->drawPolygon( 215 aPoly.getB2DPolygon(0), 216 Color(0xFFFFFFFF), 217 DrawMode_PAINT ); 218 } 219 }; 220 221 TEST_F(ClipTest, testPixelClip) 222 { 223 implTestPixelClip( mpDevice1bpp ); 224 implTestPixelClip( mpDevice32bpp ); 225 } 226 227 TEST_F(ClipTest, testLineClip) 228 { 229 implTestLineClip( mpDevice1bpp ); 230 implTestLineClip( mpDevice32bpp ); 231 } 232 233 TEST_F(ClipTest, testFillClip) 234 { 235 implTestFillClip( mpDevice1bpp ); 236 implTestFillClip( mpDevice32bpp ); 237 } 238 239 TEST_F(ClipTest, testBmpClip) 240 { 241 implTestBmpClip( mpDevice1bpp ); 242 implTestBmpClip( mpDevice32bpp ); 243 } 244 245 TEST_F(ClipTest, testMaskColorClip) 246 { 247 implTestMaskColorClip( mpDevice1bpp ); 248 implTestMaskColorClip( mpDevice32bpp ); 249 } 250 251 252 } 253