include/tools/poly.hxx    |   13 +++++++++
 include/vcl/metaact.hxx   |    2 -
 vcl/qa/cppunit/outdev.cxx |   66 ++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 80 insertions(+), 1 deletion(-)

New commits:
commit ed92e40aea759d435ec1c05877e6480654a06ab6
Author:     Chris Sherlock <chris.sherloc...@gmail.com>
AuthorDate: Sat Oct 2 14:42:01 2021 +1000
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Mon Oct 18 20:22:39 2021 +0200

    vcl: test OutputDevice::DrawPolyPolygon()
    
    Change-Id: I166f715489ecff3095ccfb485153629050bfca20
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/122977
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>

diff --git a/include/tools/poly.hxx b/include/tools/poly.hxx
index 3c39f2d6c56b..d2ecf644af39 100644
--- a/include/tools/poly.hxx
+++ b/include/tools/poly.hxx
@@ -19,6 +19,7 @@
 #ifndef INCLUDED_TOOLS_POLY_HXX
 #define INCLUDED_TOOLS_POLY_HXX
 
+#include <rtl/ustring.hxx>
 #include <tools/toolsdllapi.h>
 #include <tools/gen.hxx>
 #include <tools/degree.hxx>
@@ -272,6 +273,18 @@ inline std::basic_ostream<charT, traits> & operator <<(
         if (i > 0)
             stream << "--";
         stream << poly.GetPoint(i);
+
+        OUString aFlag;
+        if (poly.GetFlags(i) == PolyFlags::Normal)
+            aFlag = "Normal";
+        else if (poly.GetFlags(i) == PolyFlags::Smooth)
+            aFlag = "Smooth";
+        else if (poly.GetFlags(i) == PolyFlags::Control)
+            aFlag = "Control";
+        else if (poly.GetFlags(i) == PolyFlags::Symmetric)
+            aFlag = "Symmetric";
+
+        stream << ";f=" << aFlag;
     }
     stream << ">";
     return stream;
diff --git a/include/vcl/metaact.hxx b/include/vcl/metaact.hxx
index a80469bca1e5..ed74de84d5cd 100644
--- a/include/vcl/metaact.hxx
+++ b/include/vcl/metaact.hxx
@@ -435,7 +435,7 @@ public:
     void                SetPolygon(const tools::Polygon& rPoly) { maPoly = 
rPoly; }
 };
 
-class UNLESS_MERGELIBS(VCL_DLLPUBLIC) MetaPolyPolygonAction final : public 
MetaAction
+class VCL_DLLPUBLIC MetaPolyPolygonAction final : public MetaAction
 {
 private:
 
diff --git a/vcl/qa/cppunit/outdev.cxx b/vcl/qa/cppunit/outdev.cxx
index 799a7fdc8708..df5d8b2c9bf4 100644
--- a/vcl/qa/cppunit/outdev.cxx
+++ b/vcl/qa/cppunit/outdev.cxx
@@ -13,6 +13,7 @@
 #include <basegfx/matrix/b2dhommatrix.hxx>
 #include <basegfx/numeric/ftools.hxx>
 #include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
 #include <basegfx/vector/b2enums.hxx>
 
 #include <vcl/lineinfo.hxx>
@@ -86,6 +87,7 @@ public:
     void testDrawWaveLine();
     void testDrawPolyLine();
     void testDrawPolygon();
+    void testDrawPolyPolygon();
 
     CPPUNIT_TEST_SUITE(VclOutdevTest);
     CPPUNIT_TEST(testVirtualDevice);
@@ -138,6 +140,7 @@ public:
     CPPUNIT_TEST(testDrawWaveLine);
     CPPUNIT_TEST(testDrawPolyLine);
     CPPUNIT_TEST(testDrawPolygon);
+    CPPUNIT_TEST(testDrawPolyPolygon);
     CPPUNIT_TEST_SUITE_END();
 };
 
@@ -1947,6 +1950,69 @@ void VclOutdevTest::testDrawPolygon()
     }
 }
 
+static tools::PolyPolygon createPolyPolygon()
+{
+    tools::Polygon aPolygon(4);
+
+    aPolygon.SetPoint(Point(1, 8), 0);
+    aPolygon.SetPoint(Point(2, 7), 1);
+    aPolygon.SetPoint(Point(3, 6), 2);
+    aPolygon.SetPoint(Point(4, 5), 3);
+
+    tools::PolyPolygon aPolyPolygon(aPolygon);
+    aPolyPolygon.Optimize(PolyOptimizeFlags::CLOSE);
+
+    return aPolyPolygon;
+}
+
+void VclOutdevTest::testDrawPolyPolygon()
+{
+    {
+        ScopedVclPtrInstance<VirtualDevice> pVDev;
+        GDIMetaFile aMtf;
+        aMtf.Record(pVDev.get());
+
+        pVDev->SetOutputSizePixel(Size(100, 100));
+
+        tools::PolyPolygon aPolyPolygon = createPolyPolygon();
+
+        pVDev->DrawPolyPolygon(aPolyPolygon);
+
+        MetaAction* pAction = aMtf.GetAction(INITIAL_SETUP_ACTION_COUNT);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("Not a polypolygon action", 
MetaActionType::POLYPOLYGON,
+                                     pAction->GetType());
+
+        MetaPolyPolygonAction* pPolyPolygonAction = 
dynamic_cast<MetaPolyPolygonAction*>(pAction);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("Not the same polypolygon in polypolygon 
action", aPolyPolygon,
+                                     pPolyPolygonAction->GetPolyPolygon());
+    }
+
+    {
+        ScopedVclPtrInstance<VirtualDevice> pVDev;
+        GDIMetaFile aMtf;
+        aMtf.Record(pVDev.get());
+
+        pVDev->SetOutputSizePixel(Size(100, 100));
+
+        tools::PolyPolygon aPolyPolygon = createPolyPolygon();
+
+        basegfx::B2DPolyPolygon 
aB2DPolyPolygon(aPolyPolygon.getB2DPolyPolygon());
+
+        pVDev->DrawPolyPolygon(aB2DPolyPolygon);
+
+        MetaAction* pAction = aMtf.GetAction(INITIAL_SETUP_ACTION_COUNT);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("Not a polypolygon action", 
MetaActionType::POLYPOLYGON,
+                                     pAction->GetType());
+
+        /* these should match, but the equality operator does not work on 
PolyPolygon for some reason
+
+        MetaPolyPolygonAction* pPolyPolygonAction = 
dynamic_cast<MetaPolyPolygonAction*>(pAction);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("Not the same polypolygon in polypolygon 
action", aPolyPolygon,
+                                     pPolyPolygonAction->GetPolyPolygon());
+        */
+    }
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(VclOutdevTest);
 
 CPPUNIT_PLUGIN_IMPLEMENT();

Reply via email to