[Libreoffice-commits] core.git: 2 commits - sw/CppunitTest_sw_ooxmlimport.mk sw/qa writerfilter/inc writerfilter/Library_writerfilter.mk writerfilter/qa writerfilter/source

Jan Holesovsky kendy at collabora.com
Tue Jul 15 00:16:43 PDT 2014


 sw/CppunitTest_sw_ooxmlimport.mk                   |    1 
 sw/qa/extras/ooxmlimport/data/fdo76803.docx        |binary
 sw/qa/extras/ooxmlimport/ooxmlimport.cxx           |   31 ++++
 writerfilter/Library_writerfilter.mk               |    1 
 writerfilter/inc/resourcemodel/Fraction.hxx        |   54 -------
 writerfilter/qa/cppunittests/misc/misc.cxx         |   17 --
 writerfilter/source/dmapper/WrapPolygonHandler.cxx |   20 +-
 writerfilter/source/dmapper/WrapPolygonHandler.hxx |    4 
 writerfilter/source/resourcemodel/Fraction.cxx     |  143 ---------------------
 9 files changed, 44 insertions(+), 227 deletions(-)

New commits:
commit abc28ffc04067eb24840fbf564c311aaee10f84d
Author: Jan Holesovsky <kendy at collabora.com>
Date:   Tue Jul 15 09:10:10 2014 +0200

    fdo#76803: Unit test so that this never regresses.
    
    Change-Id: Id0b883b7d7b902c1f8e41bcf39220ef74b3488bf

diff --git a/sw/CppunitTest_sw_ooxmlimport.mk b/sw/CppunitTest_sw_ooxmlimport.mk
index 7eff1bc..682b31c 100644
--- a/sw/CppunitTest_sw_ooxmlimport.mk
+++ b/sw/CppunitTest_sw_ooxmlimport.mk
@@ -16,6 +16,7 @@ $(eval $(call gb_CppunitTest_add_exception_objects,sw_ooxmlimport, \
 ))
 
 $(eval $(call gb_CppunitTest_use_libraries,sw_ooxmlimport, \
+    basegfx \
     comphelper \
     cppu \
     cppuhelper \
diff --git a/sw/qa/extras/ooxmlimport/data/fdo76803.docx b/sw/qa/extras/ooxmlimport/data/fdo76803.docx
new file mode 100644
index 0000000..65fad06
Binary files /dev/null and b/sw/qa/extras/ooxmlimport/data/fdo76803.docx differ
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
index 954dae3..8d85f1d 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
@@ -12,6 +12,7 @@
 
 #if !defined(WNT)
 
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
 #include <com/sun/star/awt/XBitmap.hpp>
 #include <com/sun/star/awt/FontUnderline.hpp>
 #include <com/sun/star/awt/FontWeight.hpp>
@@ -19,6 +20,7 @@
 #include <com/sun/star/document/XEmbeddedObjectSupplier2.hpp>
 #include <com/sun/star/drawing/XControlShape.hpp>
 #include <com/sun/star/drawing/EnhancedCustomShapeParameterPair.hpp>
+#include <com/sun/star/drawing/PointSequenceSequence.hpp>
 #include <com/sun/star/drawing/TextVerticalAdjust.hpp>
 #include <com/sun/star/lang/XServiceInfo.hpp>
 #include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
@@ -2245,6 +2247,35 @@ DECLARE_OOXMLIMPORT_TEST(testFdo80555, "fdo80555.docx")
     CPPUNIT_ASSERT_EQUAL(sal_Int32(245), xShape->getPosition().Y);
 }
 
+DECLARE_OOXMLIMPORT_TEST(testFdo76803, "fdo76803.docx")
+{
+    // The ContourPolyPolygon was wrong
+    uno::Reference<beans::XPropertySet> xPropertySet(getShape(1), uno::UNO_QUERY);
+
+    drawing::PointSequenceSequence rContour = getProperty<drawing::PointSequenceSequence>(xPropertySet, "ContourPolyPolygon");
+    basegfx::B2DPolyPolygon aPolyPolygon(basegfx::tools::UnoPointSequenceSequenceToB2DPolyPolygon(rContour));
+
+    // We've got exactly one polygon inside
+    CPPUNIT_ASSERT_EQUAL(sal_uInt32(1), aPolyPolygon.count());
+
+    // Now check it deeply
+    basegfx::B2DPolygon aPolygon(aPolyPolygon.getB2DPolygon(0));
+
+    CPPUNIT_ASSERT_EQUAL(sal_uInt32(4), aPolygon.count());
+
+    CPPUNIT_ASSERT_EQUAL(double(-163), aPolygon.getB2DPoint(0).getX());
+    CPPUNIT_ASSERT_EQUAL(double(0), aPolygon.getB2DPoint(0).getY());
+
+    CPPUNIT_ASSERT_EQUAL(double(-163), aPolygon.getB2DPoint(1).getX());
+    CPPUNIT_ASSERT_EQUAL(double(3661), aPolygon.getB2DPoint(1).getY());
+
+    CPPUNIT_ASSERT_EQUAL(double(16988), aPolygon.getB2DPoint(2).getX());
+    CPPUNIT_ASSERT_EQUAL(double(3661), aPolygon.getB2DPoint(2).getY());
+
+    CPPUNIT_ASSERT_EQUAL(double(16988), aPolygon.getB2DPoint(3).getX());
+    CPPUNIT_ASSERT_EQUAL(double(0), aPolygon.getB2DPoint(3).getY());
+}
+
 #endif
 
 CPPUNIT_PLUGIN_IMPLEMENT();
commit 003434f1e2f4bd7ec08d2428fe2b90c11e680cef
Author: Jan Holesovsky <kendy at collabora.com>
Date:   Tue Jul 15 07:25:38 2014 +0200

    fdo#76803: Kill resourcemodel::Fraction, and use Fraction from tools instead.
    
    Change-Id: I72d336b8aacf80f9ab6472c0948766ee56fda34f

diff --git a/writerfilter/Library_writerfilter.mk b/writerfilter/Library_writerfilter.mk
index 793d810..0cc5ddd 100644
--- a/writerfilter/Library_writerfilter.mk
+++ b/writerfilter/Library_writerfilter.mk
@@ -121,7 +121,6 @@ $(eval $(call gb_Library_add_exception_objects,writerfilter,\
     writerfilter/source/ooxml/OOXMLParserState \
     writerfilter/source/ooxml/OOXMLPropertySetImpl \
     writerfilter/source/ooxml/OOXMLStreamImpl \
-    writerfilter/source/resourcemodel/Fraction \
     writerfilter/source/resourcemodel/LoggedResources \
     writerfilter/source/resourcemodel/ResourceModelHelper \
     writerfilter/source/resourcemodel/TagLogger \
diff --git a/writerfilter/inc/resourcemodel/Fraction.hxx b/writerfilter/inc/resourcemodel/Fraction.hxx
deleted file mode 100644
index 2029376..0000000
--- a/writerfilter/inc/resourcemodel/Fraction.hxx
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef INCLUDED_WRITERFILTER_INC_RESOURCEMODEL_FRACTION_HXX
-#define INCLUDED_WRITERFILTER_INC_RESOURCEMODEL_FRACTION_HXX
-
-#include <sal/types.h>
-
-
-namespace writerfilter {
-namespace resourcemodel {
-
-class Fraction
-{
-public:
-    explicit Fraction(sal_Int32 nNumerator, sal_Int32 nDenominator = 1);
-    virtual ~Fraction();
-
-    void init(sal_Int32 nNumerator, sal_Int32 nDenominator);
-    void assign(const Fraction & rFraction);
-
-    Fraction inverse() const;
-
-    Fraction operator=(const Fraction & rFraction);
-    Fraction operator+(const Fraction & rFraction) const;
-    Fraction operator-(const Fraction & rFraction) const;
-    Fraction operator*(const Fraction & rFraction) const;
-    Fraction operator/(const Fraction & rFraction) const;
-    operator sal_Int32() const;
-    operator float() const;
-
-private:
-    sal_Int32 mnNumerator;
-    sal_Int32 mnDenominator;
-};
-}}
-#endif // INCLUDED_WRITERFILTER_INC_RESOURCEMODEL_FRACTION_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/qa/cppunittests/misc/misc.cxx b/writerfilter/qa/cppunittests/misc/misc.cxx
index 0db80cc..baffe64 100644
--- a/writerfilter/qa/cppunittests/misc/misc.cxx
+++ b/writerfilter/qa/cppunittests/misc/misc.cxx
@@ -22,10 +22,6 @@
 #include <rtl/ustring.hxx>
 #include <dmapper/ConversionHelper.hxx>
 #include <dmapper/DomainMapper_Impl.hxx>
-#define private public
-#include <../../../source/resourcemodel/Fraction.cxx>
-#undef private
-
 
 using namespace std;
 
@@ -39,12 +35,10 @@ public:
     virtual void tearDown() SAL_OVERRIDE;
 
     void testTwipConversions();
-    void testFraction();
     void testFieldParameters();
 
     CPPUNIT_TEST_SUITE(WriterfilterMiscTest);
     CPPUNIT_TEST(testTwipConversions);
-    CPPUNIT_TEST(testFraction);
     CPPUNIT_TEST(testFieldParameters);
     CPPUNIT_TEST_SUITE_END();
 };
@@ -77,17 +71,6 @@ void WriterfilterMiscTest::testTwipConversions()
     CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), convertTwipToMM100Unsigned(40000));
 }
 
-void WriterfilterMiscTest::testFraction()
-{
-    using writerfilter::resourcemodel::Fraction;
-    Fraction f1(-928800, 2717);
-    CPPUNIT_ASSERT_EQUAL(sal_Int32(-928800), f1.mnNumerator); // became positive
-    CPPUNIT_ASSERT_EQUAL(sal_Int32(2717), f1.mnDenominator);
-    Fraction f2(-220869, 1350);
-    CPPUNIT_ASSERT_EQUAL(sal_Int32(-24541), f2.mnNumerator); // became positive
-    CPPUNIT_ASSERT_EQUAL(sal_Int32(150), f2.mnDenominator);
-}
-
 void WriterfilterMiscTest::testFieldParameters()
 {
     using writerfilter::dmapper::lcl_SplitFieldCommand;
diff --git a/writerfilter/source/dmapper/WrapPolygonHandler.cxx b/writerfilter/source/dmapper/WrapPolygonHandler.cxx
index 039bf7f..dfed4fb 100644
--- a/writerfilter/source/dmapper/WrapPolygonHandler.cxx
+++ b/writerfilter/source/dmapper/WrapPolygonHandler.cxx
@@ -88,7 +88,7 @@ WrapPolygon::Pointer_t WrapPolygon::move(const awt::Point & rPoint)
     return pResult;
 }
 
-WrapPolygon::Pointer_t WrapPolygon::scale(const resourcemodel::Fraction & rFractionX, const resourcemodel::Fraction & rFractionY)
+WrapPolygon::Pointer_t WrapPolygon::scale(const Fraction & rFractionX, const Fraction & rFractionY)
 {
     WrapPolygon::Pointer_t pResult(new WrapPolygon);
 
@@ -97,7 +97,7 @@ WrapPolygon::Pointer_t WrapPolygon::scale(const resourcemodel::Fraction & rFract
 
     while (aIt != aItEnd)
     {
-        awt::Point aPoint(resourcemodel::Fraction(aIt->X) * rFractionX, resourcemodel::Fraction(aIt->Y) * rFractionY);
+        awt::Point aPoint((Fraction(long(aIt->X)) * rFractionX).operator long(), (Fraction(long(aIt->Y)) * rFractionY).operator long());
         pResult->addPoint(aPoint);
         ++aIt;
     }
@@ -109,19 +109,19 @@ WrapPolygon::Pointer_t WrapPolygon::correctWordWrapPolygon(const awt::Size & rSr
 {
     WrapPolygon::Pointer_t pResult;
 
-    const sal_uInt32 nWrap100Percent = 21600;
+    const long nWrap100Percent = 21600;
 
-    resourcemodel::Fraction aMove(nWrap100Percent, rSrcSize.Width);
-    aMove = aMove * resourcemodel::Fraction(15, 1);
-    awt::Point aMovePoint(aMove, 0);
+    Fraction aMove(nWrap100Percent, rSrcSize.Width);
+    aMove = aMove * Fraction(15, 1);
+    awt::Point aMovePoint(aMove.operator long(), 0);
     pResult = move(aMovePoint);
 
-    resourcemodel::Fraction aScaleX(nWrap100Percent, resourcemodel::Fraction(nWrap100Percent) + aMove);
-    resourcemodel::Fraction aScaleY(nWrap100Percent, resourcemodel::Fraction(nWrap100Percent) - aMove);
+    Fraction aScaleX(nWrap100Percent, Fraction(nWrap100Percent) + aMove);
+    Fraction aScaleY(nWrap100Percent, Fraction(nWrap100Percent) - aMove);
     pResult = pResult->scale(aScaleX, aScaleY);
 
-    resourcemodel::Fraction aScaleSrcX(rSrcSize.Width, nWrap100Percent);
-    resourcemodel::Fraction aScaleSrcY(rSrcSize.Height, nWrap100Percent);
+    Fraction aScaleSrcX(rSrcSize.Width, nWrap100Percent);
+    Fraction aScaleSrcY(rSrcSize.Height, nWrap100Percent);
     pResult = pResult->scale(aScaleSrcX, aScaleSrcY);
 
     return pResult;
diff --git a/writerfilter/source/dmapper/WrapPolygonHandler.hxx b/writerfilter/source/dmapper/WrapPolygonHandler.hxx
index 9aa4293..e7a470d 100644
--- a/writerfilter/source/dmapper/WrapPolygonHandler.hxx
+++ b/writerfilter/source/dmapper/WrapPolygonHandler.hxx
@@ -23,7 +23,7 @@
 #include <deque>
 #include <com/sun/star/drawing/PointSequenceSequence.hpp>
 #include <resourcemodel/LoggedResources.hxx>
-#include <resourcemodel/Fraction.hxx>
+#include <tools/fract.hxx>
 
 namespace writerfilter {
 namespace dmapper {
@@ -51,7 +51,7 @@ public:
     size_t size() const;
 
     WrapPolygon::Pointer_t move(const css::awt::Point & rMove);
-    WrapPolygon::Pointer_t scale(const resourcemodel::Fraction & rFractionX, const resourcemodel::Fraction & rFractionY);
+    WrapPolygon::Pointer_t scale(const Fraction & rFractionX, const Fraction & rFractionY);
     WrapPolygon::Pointer_t correctWordWrapPolygon(const css::awt::Size & rSrcSize);
     css::drawing::PointSequenceSequence getPointSequenceSequence() const;
 };
diff --git a/writerfilter/source/resourcemodel/Fraction.cxx b/writerfilter/source/resourcemodel/Fraction.cxx
deleted file mode 100644
index ba76985..0000000
--- a/writerfilter/source/resourcemodel/Fraction.cxx
+++ /dev/null
@@ -1,143 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <resourcemodel/Fraction.hxx>
-
-namespace writerfilter {
-namespace resourcemodel {
-
-// Stein's binary GCD for non-negative integers
-// https://en.wikipedia.org/wiki/Binary_GCD_algorithm
-static sal_uInt32 gcd(sal_uInt32 a, sal_uInt32 b)
-{
-    if (a == 0 || b == 0)
-        return a | b;
-
-    sal_uInt32 nShift = 0;
-    while (((a | b) & 1) == 0)
-    {
-        a >>= 1;
-        b >>= 1;
-        ++nShift;
-    }
-
-    while ((a & 1) == 0)
-        a >>= 1;
-
-    do
-    {
-        while ((b & 1) == 0)
-            b >>= 1;
-
-        if (a < b)
-        {
-            b -= a;
-        }
-        else
-        {
-            sal_uInt32 nDiff = a - b;
-            a = b;
-            b = nDiff;
-        }
-
-        b >>= 1;
-    }
-    while (b != 0);
-
-    return a << nShift;
-}
-
-static sal_uInt32 lcm(sal_Int32 a, sal_Int32 b)
-{
-    return abs(a * b) / gcd(abs(a), abs(b));
-}
-
-Fraction::Fraction(sal_Int32 nNumerator, sal_Int32 nDenominator)
-{
-    init(nNumerator, nDenominator);
-}
-
-Fraction::~Fraction()
-{
-}
-
-void Fraction::init(sal_Int32 nNumerator, sal_Int32 nDenominator)
-{
-    // fdo#41068 pass non-negative numbers to gcd
-    sal_Int32 const nGCD = gcd(abs(nNumerator), abs(nDenominator));
-
-    // fdo#76803 do signed division
-    mnNumerator = nNumerator / nGCD;
-    mnDenominator = nDenominator / nGCD;
-}
-
-void Fraction::assign(const Fraction & rFraction)
-{
-    init(rFraction.mnNumerator, rFraction.mnDenominator);
-}
-
-Fraction Fraction::inverse() const
-{
-    return Fraction(mnDenominator, mnNumerator);
-}
-
-Fraction Fraction::operator + (const Fraction & rFraction) const
-{
-    sal_uInt32 nLCM = lcm(mnDenominator, rFraction.mnDenominator);
-
-    return Fraction(mnNumerator * nLCM / mnDenominator + rFraction.mnNumerator * nLCM / rFraction.mnDenominator, nLCM);
-}
-
-Fraction Fraction::operator - (const Fraction & rFraction) const
-{
-    sal_uInt32 nLCM = lcm(mnDenominator, rFraction.mnDenominator);
-
-    return Fraction(mnNumerator * nLCM / mnDenominator - rFraction.mnNumerator * nLCM / rFraction.mnDenominator, nLCM);
-}
-
-Fraction Fraction::operator * (const Fraction & rFraction) const
-{
-    return Fraction(mnNumerator * rFraction.mnNumerator, mnDenominator * rFraction.mnDenominator);
-}
-
-Fraction Fraction::operator / (const Fraction & rFraction) const
-{
-    return *this * rFraction.inverse();
-}
-
-Fraction Fraction::operator = (const Fraction & rFraction)
-{
-    assign(rFraction);
-
-    return *this;
-}
-
-Fraction::operator sal_Int32() const
-{
-    return mnNumerator / mnDenominator;
-}
-
-Fraction::operator float() const
-{
-    return static_cast<float>(mnNumerator) / static_cast<float>(mnDenominator);
-}
-
-}}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */


More information about the Libreoffice-commits mailing list