vcl/CppunitTest_vcl_bitmap_render_test.mk        |    5 +++
 vcl/qa/cppunit/bitmaprender/BitmapRenderTest.cxx |   34 ++++++++++++++++++-----
 2 files changed, 33 insertions(+), 6 deletions(-)

New commits:
commit d7263d05bdcbe7e219664e198154e31a986c68fc
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Tue Apr 16 13:10:11 2019 +0900
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Tue Apr 16 07:20:00 2019 +0200

    Test drawing BitmapEx with an alpha channel on a VirtualDevice
    
    This adds a test for drawing a BitmapEx which has an alpha channel
    onto a VirtualDevice. Most important is that alpha blending is
    done as we expect it (but it is prone to rounding error).
    
    Change-Id: I41a16ca9da98d7a067ada9aafad8c9fc7c6484d5
    Reviewed-on: https://gerrit.libreoffice.org/70804
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>

diff --git a/vcl/CppunitTest_vcl_bitmap_render_test.mk 
b/vcl/CppunitTest_vcl_bitmap_render_test.mk
index 1d66e6a5aae4..3af9c9fafd51 100644
--- a/vcl/CppunitTest_vcl_bitmap_render_test.mk
+++ b/vcl/CppunitTest_vcl_bitmap_render_test.mk
@@ -13,6 +13,11 @@ $(eval $(call 
gb_CppunitTest_add_exception_objects,vcl_bitmap_render_test, \
     vcl/qa/cppunit/bitmaprender/BitmapRenderTest \
 ))
 
+$(eval $(call gb_CppunitTest_set_include,vcl_bitmap_render_test,\
+    $$(INCLUDE) \
+    -I$(SRCDIR)/vcl/inc \
+))
+
 $(eval $(call gb_CppunitTest_use_libraries,vcl_bitmap_render_test, \
        comphelper \
        cppu \
diff --git a/vcl/qa/cppunit/bitmaprender/BitmapRenderTest.cxx 
b/vcl/qa/cppunit/bitmaprender/BitmapRenderTest.cxx
index 531494205c14..5fc6c5b7b53c 100644
--- a/vcl/qa/cppunit/bitmaprender/BitmapRenderTest.cxx
+++ b/vcl/qa/cppunit/bitmaprender/BitmapRenderTest.cxx
@@ -13,7 +13,7 @@
 #include <vcl/virdev.hxx>
 #include <vcl/salbtype.hxx>
 #include <vcl/bitmapaccess.hxx>
-#include <vcl/wrkwin.hxx>
+#include <vcl/svapp.hxx>
 
 #include <tools/stream.hxx>
 #include <vcl/pngwrite.hxx>
@@ -21,6 +21,9 @@
 #include <vcl/graphicfilter.hxx>
 #include <vcl/filter/PngImageReader.hxx>
 
+#include <svdata.hxx>
+#include <salinst.hxx>
+
 static OUString const gaDataUrl = "/vcl/qa/cppunit/bitmaprender/data/";
 
 class BitmapRenderTest : public test::BootstrapFixture
@@ -38,13 +41,13 @@ public:
 
     void testTdf104141();
     void testTdf113918();
-    void testDrawBitmap32();
+    void testDrawAlphaBitmapEx();
     void testTdf116888();
 
     CPPUNIT_TEST_SUITE(BitmapRenderTest);
     CPPUNIT_TEST(testTdf104141);
     CPPUNIT_TEST(testTdf113918);
-    CPPUNIT_TEST(testDrawBitmap32);
+    CPPUNIT_TEST(testDrawAlphaBitmapEx);
     CPPUNIT_TEST(testTdf116888);
 
     CPPUNIT_TEST_SUITE_END();
@@ -101,7 +104,7 @@ void BitmapRenderTest::testTdf113918()
     CPPUNIT_ASSERT(aColor.GetGreen() > 100);
 }
 
-void BitmapRenderTest::testDrawBitmap32()
+void BitmapRenderTest::testDrawAlphaBitmapEx()
 {
     ScopedVclPtrInstance<VirtualDevice> pVDev;
     pVDev->SetOutputSizePixel(Size(8, 8));
@@ -117,10 +120,29 @@ void BitmapRenderTest::testDrawBitmap32()
     vcl::PngImageReader aPngReader(aFileStream);
     BitmapEx aBitmapEx;
     aPngReader.read(aBitmapEx);
+
+    // Check backend capabilities, if the backend support 32-bit bitmap
+    auto pBackendCapabilities = 
ImplGetSVData()->mpDefInst->GetBackendCapabilities();
+    if (pBackendCapabilities->mbSupportsBitmap32)
+    {
+        CPPUNIT_ASSERT_EQUAL(sal_uInt16(32), 
aBitmapEx.GetBitmap().GetBitCount());
+    }
+    else
+    {
+        CPPUNIT_ASSERT_EQUAL(sal_uInt16(24), 
aBitmapEx.GetBitmap().GetBitCount());
+        CPPUNIT_ASSERT_EQUAL(true, aBitmapEx.IsAlpha());
+        CPPUNIT_ASSERT_EQUAL(sal_uInt16(8), 
aBitmapEx.GetAlpha().GetBitCount());
+    }
+
+    // Check the bitmap has pixels we expect
+    CPPUNIT_ASSERT_EQUAL(Color(0xFF, 0x00, 0x00, 0x00), 
aBitmapEx.GetPixelColor(0, 0));
+    CPPUNIT_ASSERT_EQUAL(Color(0x00, 0xFF, 0xFF, 0x00), 
aBitmapEx.GetPixelColor(1, 1));
+    CPPUNIT_ASSERT_EQUAL(Color(0x7F, 0x00, 0xFF, 0x00), 
aBitmapEx.GetPixelColor(2, 2));
+
     pVDev->DrawBitmapEx(Point(), aBitmapEx);
 
-    CPPUNIT_ASSERT_EQUAL(COL_WHITE, pVDev->GetPixel(Point(0, 0)));
-    CPPUNIT_ASSERT_EQUAL(COL_YELLOW, pVDev->GetPixel(Point(1, 1)));
+    CPPUNIT_ASSERT_EQUAL(Color(0x00, 0xFF, 0xFF, 0xFF), 
pVDev->GetPixel(Point(0, 0)));
+    CPPUNIT_ASSERT_EQUAL(Color(0x00, 0xFF, 0xFF, 0x00), 
pVDev->GetPixel(Point(1, 1)));
 
 // sometimes on Windows we get rounding error in blending so let's ignore this 
on Windows for now.
 #if !defined(_WIN32)
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to