[Libreoffice-commits] libmspub.git: 3 commits - src/lib

David Tardon dtardon at redhat.com
Mon Mar 12 11:58:36 UTC 2018


 src/lib/Coordinate.cpp     |   36 ++++++++++++++++++++++++++++++++++++
 src/lib/Coordinate.h       |    5 ++++-
 src/lib/MSPUBCollector.cpp |   14 +++++++++-----
 src/lib/MSPUBParser.cpp    |    1 +
 src/lib/Makefile.am        |    1 +
 src/lib/PolygonUtils.cpp   |   17 -----------------
 src/lib/PolygonUtils.h     |    2 --
 7 files changed, 51 insertions(+), 25 deletions(-)

New commits:
commit 28c545e7d04d58af998bcf4af5d1bb326d29836c
Author: David Tardon <dtardon at redhat.com>
Date:   Mon Mar 12 11:23:48 2018 +0100

    ofz#6469 ensure coords are in correct order
    
    I.e., xs <= xe and ys <= ye. The previous situation could lead to
    surprises like negative width/height.
    
    Change-Id: I23fc2786292d9eebe713870a69e577c9324da09f

diff --git a/src/lib/Coordinate.cpp b/src/lib/Coordinate.cpp
new file mode 100644
index 0000000..b865632
--- /dev/null
+++ b/src/lib/Coordinate.cpp
@@ -0,0 +1,36 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * This file is part of the libmspub 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/.
+ */
+
+#include "Coordinate.h"
+
+#include <utility>
+
+namespace libmspub
+{
+
+Coordinate::Coordinate(int xs, int ys, int xe, int ye)
+  : m_xs(xs)
+  , m_ys(ys)
+  , m_xe(xe)
+  , m_ye(ye)
+{
+  arrange();
+}
+
+void Coordinate::arrange()
+{
+  if (m_xs > m_xe)
+    std::swap(m_xs, m_xe);
+  if (m_ys > m_ye)
+    std::swap(m_ys, m_ye);
+}
+
+}
+
+/* vim:set shiftwidth=2 softtabstop=2 expandtab: */
diff --git a/src/lib/Coordinate.h b/src/lib/Coordinate.h
index bec3fe2..4471f86 100644
--- a/src/lib/Coordinate.h
+++ b/src/lib/Coordinate.h
@@ -10,14 +10,17 @@
 #ifndef INCLUDED_COORDINATE_H
 #define INCLUDED_COORDINATE_H
 
+#include <boost/cstdint.hpp>
+
 #include "MSPUBConstants.h"
 
 namespace libmspub
 {
 struct Coordinate
 {
-  Coordinate(int xs, int ys, int xe, int ye) : m_xs(xs), m_ys(ys), m_xe(xe), m_ye(ye) { }
+  Coordinate(int xs, int ys, int xe, int ye);
   Coordinate() : m_xs(0), m_ys(0), m_xe(0), m_ye(0) { }
+  void arrange();
   int m_xs, m_ys, m_xe, m_ye;
   double getXIn(double pageWidth) const
   {
diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp
index c050930..a2efb2c 100644
--- a/src/lib/MSPUBCollector.cpp
+++ b/src/lib/MSPUBCollector.cpp
@@ -459,10 +459,14 @@ Coordinate getFudgedCoordinates(Coordinate coord, const std::vector<Line> &lines
   }
   else
   {
-    fudged.m_xs += leftFudge;
-    fudged.m_xe -= rightFudge;
-    fudged.m_ys += topFudge;
-    fudged.m_ye -= bottomFudge;
+    if (unsigned(fudged.m_xe - fudged.m_xs) > leftFudge)
+      fudged.m_xs += leftFudge;
+    if (unsigned(fudged.m_xe - fudged.m_xs) > rightFudge)
+      fudged.m_xe -= rightFudge;
+    if (unsigned(fudged.m_ye - fudged.m_ys) > topFudge)
+      fudged.m_ys += topFudge;
+    if (unsigned(fudged.m_ye - fudged.m_ys) > bottomFudge)
+      fudged.m_ye -= bottomFudge;
   }
   return fudged;
 }
diff --git a/src/lib/MSPUBParser.cpp b/src/lib/MSPUBParser.cpp
index 883cf67..b13bb47 100644
--- a/src/lib/MSPUBParser.cpp
+++ b/src/lib/MSPUBParser.cpp
@@ -1622,6 +1622,7 @@ void MSPUBParser::parseEscherShape(librevenge::RVNGInputStream *input, const Esc
     parentCoordinateSystem.m_ys = readU32(input);
     parentCoordinateSystem.m_xe = readU32(input);
     parentCoordinateSystem.m_ye = readU32(input);
+    parentCoordinateSystem.arrange();
     definesRelativeCoordinates = true;
   }
   input->seek(sp.contentsOffset, librevenge::RVNG_SEEK_SET);
diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
index 2573363..bd8a68a 100644
--- a/src/lib/Makefile.am
+++ b/src/lib/Makefile.am
@@ -16,6 +16,7 @@ libmspub_ at MSPUB_MAJOR_VERSION@_ at MSPUB_MINOR_VERSION@_la_SOURCES = \
 	BorderArtInfo.h \
 	ColorReference.cpp \
 	ColorReference.h \
+	Coordinate.cpp \
 	Coordinate.h \
 	Dash.cpp \
 	Dash.h \
commit fc3a3285a47433d599627b64c8b97aa16569663a
Author: David Tardon <dtardon at redhat.com>
Date:   Mon Mar 12 11:10:41 2018 +0100

    drop unused function
    
    Change-Id: I5a64871e16d755496b69f749cc2a4a11d833bc00

diff --git a/src/lib/PolygonUtils.cpp b/src/lib/PolygonUtils.cpp
index b5e47e9..7738809 100644
--- a/src/lib/PolygonUtils.cpp
+++ b/src/lib/PolygonUtils.cpp
@@ -5680,23 +5680,6 @@ double getSpecialIfNecessary(std::function<double(unsigned index)> calculator, i
   return special ? calculator(val ^ 0x80000000) : val;
 }
 
-Coordinate CustomShape::getTextRectangle(double x, double y, double width, double height, std::function<double(unsigned index)> calculator) const
-{
-  double scaleX = width * m_coordWidth;
-  double scaleY = height * m_coordHeight;
-  if (m_numTextRectangles == 0)
-  {
-    return Coordinate(x, y, x + width, y + height);
-  }
-  const Vertex &start = mp_textRectangles[0].first;
-  const Vertex &end = mp_textRectangles[0].second;
-  double startX = x + scaleX * getSpecialIfNecessary(calculator, start.m_x);
-  double startY = y + scaleY * getSpecialIfNecessary(calculator, start.m_y);
-  double endX = x + scaleX * getSpecialIfNecessary(calculator, end.m_x);
-  double endY = y + scaleY * getSpecialIfNecessary(calculator, end.m_y);
-  return Coordinate(startX, startY, endX, endY);
-}
-
 namespace
 {
 
diff --git a/src/lib/PolygonUtils.h b/src/lib/PolygonUtils.h
index bf956d3..df0e05e 100644
--- a/src/lib/PolygonUtils.h
+++ b/src/lib/PolygonUtils.h
@@ -74,8 +74,6 @@ struct CustomShape
   unsigned m_numGluePoints;
   unsigned char m_adjustShiftMask;
 
-  Coordinate getTextRectangle(double x, double y, double width, double height, std::function<double(unsigned index)> calculator) const;
-
   CustomShape(const Vertex *p_vertices, unsigned numVertices, const unsigned short *p_elements, unsigned numElements, const Calculation *p_calculations, unsigned numCalculations, const int *p_defaultAdjustValues, unsigned numDefaultAdjustValues, const TextRectangle *p_textRectangles, unsigned numTextRectangles, unsigned coordWidth, unsigned coordHeight, const Vertex *p_gluePoints, unsigned numGluePoints, unsigned char adjustShiftMask = 0) :
     mp_vertices(p_vertices), m_numVertices(numVertices),
     mp_elements(p_elements), m_numElements(numElements),
commit b16a16cdb63c811dc860417bc8db9b012b7dd19f
Author: David Tardon <dtardon at redhat.com>
Date:   Wed Mar 7 09:56:06 2018 +0100

    ofz#6777 fix division by zero
    
    Change-Id: I62bd09260b448a585ef5864181b2c6bceb5b361c

diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp
index 405470e..c050930 100644
--- a/src/lib/MSPUBCollector.cpp
+++ b/src/lib/MSPUBCollector.cpp
@@ -1352,7 +1352,7 @@ double MSPUBCollector::getSpecialValue(const ShapeInfo &info, const CustomShape
   if (arg == ASPECT_RATIO)
   {
     const Coordinate coord = info.m_coordinates.get_value_or(Coordinate());
-    return (double)coord.getWidthIn() / coord.getHeightIn();
+    return coord.getHeightIn() != 0 ? double(coord.getWidthIn()) / coord.getHeightIn() : 0;
   }
   if (arg & OTHER_CALC_VAL)
   {


More information about the Libreoffice-commits mailing list