diff options
author | Luboš Luňák <l.lunak@collabora.com> | 2021-03-17 16:03:12 +0100 |
---|---|---|
committer | Luboš Luňák <l.lunak@collabora.com> | 2021-03-17 18:01:00 +0100 |
commit | ff1cfaf87ce0aa9673e1c3f92308cde6a2c6aa69 (patch) | |
tree | 1558cd4414e6bd42dacd10ee62c3395dfb3e3869 /vcl/qa | |
parent | d7ed130f537a81b900c55d222004cc9e88c0b355 (diff) |
round polygon points before merging them for Skia drawing (tdf#140848)
basegfx::utils::mergeToSinglePolyPolygon() appears to have rounding
problems. Point coordinates are in pixels anyway.
Change-Id: I9880cc32f934a08923a5c59278f6aa07852c05f9
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112647
Tested-by: Jenkins
Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
Diffstat (limited to 'vcl/qa')
-rw-r--r-- | vcl/qa/cppunit/skia/skia.cxx | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/vcl/qa/cppunit/skia/skia.cxx b/vcl/qa/cppunit/skia/skia.cxx index d8e103d1a431..6ed0b884955d 100644 --- a/vcl/qa/cppunit/skia/skia.cxx +++ b/vcl/qa/cppunit/skia/skia.cxx @@ -43,6 +43,7 @@ public: void testMatrixQuality(); void testDelayedScale(); void testTdf137329(); + void testTdf140848(); CPPUNIT_TEST_SUITE(SkiaTest); CPPUNIT_TEST(testBitmapErase); @@ -53,6 +54,7 @@ public: CPPUNIT_TEST(testMatrixQuality); CPPUNIT_TEST(testDelayedScale); CPPUNIT_TEST(testTdf137329); + CPPUNIT_TEST(testTdf140848); CPPUNIT_TEST_SUITE_END(); private: @@ -395,6 +397,34 @@ void SkiaTest::testTdf137329() CPPUNIT_ASSERT_EQUAL(COL_BLACK, device->GetPixel(Point(4, 4))); } +void SkiaTest::testTdf140848() +{ + if (!SkiaHelper::isVCLSkiaEnabled()) + return; + ScopedVclPtr<VirtualDevice> device = VclPtr<VirtualDevice>::Create(DeviceFormat::DEFAULT); + device->SetOutputSizePixel(Size(1300, 400)); + device->SetBackground(Wallpaper(COL_BLACK)); + device->SetAntialiasing(AntialiasingFlags::Enable); + device->Erase(); + device->SetLineColor(); + device->SetFillColor(COL_WHITE); + basegfx::B2DPolygon p1 = { { 952.73121259842514519, 102.4599685039370911 }, + { 952.73121259842514519, 66.55445669291347599 }, + { 1239.9753070866140661, 66.554456692913390725 }, + { 1239.9753070866140661, 138.36548031496062094 }, + { 952.73121259842514519, 138.36548031496070621 } }; + basegfx::B2DPolygon p2 = { { 1168.1642834645670064, 210.17650393700790801 }, + { 1168.1642834645670064, 66.554456692913404936 }, + { 1239.9753070866140661, 66.554456692913390725 }, + { 1239.9753070866142934, 353.79855118110236845 }, + { 1168.1642834645670064, 353.79855118110236845 } }; + device->DrawPolyPolygon(basegfx::B2DPolyPolygon(p1)); + device->DrawPolyPolygon(basegfx::B2DPolyPolygon(p2)); + //savePNG("/tmp/tdf140848.png", device); + // Rounding errors caused the overlapping part not to be drawn. + CPPUNIT_ASSERT_EQUAL(COL_WHITE, device->GetPixel(Point(1200, 100))); +} + } // namespace CPPUNIT_TEST_SUITE_REGISTRATION(SkiaTest); |