[Libreoffice-commits] .: libvisio/libvisio-0.0.19.patch libvisio/UnpackedTarball_visio.mk

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Tue Oct 2 14:13:30 PDT 2012


 libvisio/UnpackedTarball_visio.mk |    9 ++
 libvisio/libvisio-0.0.19.patch    |  116 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 125 insertions(+)

New commits:
commit 7192f0ddaa937f6c63bfffed0b35146a0f97943a
Author: Fridrich Å trba <fridrich.strba at bluewin.ch>
Date:   Tue Oct 2 23:12:49 2012 +0200

    Clean the path pushed to the API as much as possible
    
    Change-Id: I5e68bc5aedc4c6e350e62b30472a1b3f0803c520

diff --git a/libvisio/UnpackedTarball_visio.mk b/libvisio/UnpackedTarball_visio.mk
index aa9113b..15429c5 100644
--- a/libvisio/UnpackedTarball_visio.mk
+++ b/libvisio/UnpackedTarball_visio.mk
@@ -11,4 +11,13 @@ $(eval $(call gb_UnpackedTarball_UnpackedTarball,visio))
 
 $(eval $(call gb_UnpackedTarball_set_tarball,visio,$(VISIO_TARBALL)))
 
+$(eval $(call gb_UnpackedTarball_set_patchlevel,visio,0))
+
+visio_patches :=
+# Somehow draw is very picky about what is a closed path
+visio_patches += libvisio-0.0.19.patch
+
+$(eval $(call gb_UnpackedTarball_add_patches,visio,\
+	$(foreach patch,$(visio_patches),libvisio/$(patch)) \
+))
 # vim: set noet sw=4 ts=4:
diff --git a/libvisio/libvisio-0.0.19.patch b/libvisio/libvisio-0.0.19.patch
new file mode 100644
index 0000000..ee3c17f
--- /dev/null
+++ b/libvisio/libvisio-0.0.19.patch
@@ -0,0 +1,116 @@
+--- src/lib/VSDXContentCollector.cpp
++++ src/lib/VSDXContentCollector.cpp
+@@ -676,7 +676,6 @@ double libvisio::VSDXContentCollector::_linePropertiesMarkerScale(unsigned marke
+ 
+ void libvisio::VSDXContentCollector::_flushCurrentPath()
+ {
+-  WPXPropertyListVector path;
+   WPXPropertyList fillPathProps(m_styleProps);
+   fillPathProps.insert("draw:stroke", "none");
+   WPXPropertyList linePathProps(m_styleProps);
+@@ -695,6 +694,7 @@ void libvisio::VSDXContentCollector::_flushCurrentPath()
+   if (needsGroup)
+     m_shapeOutputDrawing->addStartLayer(WPXPropertyList());
+ 
++  std::vector<WPXPropertyList> tmpPath;
+   if (m_styleProps["draw:fill"] && m_styleProps["draw:fill"]->getStr() != "none")
+   {
+     bool firstPoint = true;
+@@ -708,39 +708,84 @@ void libvisio::VSDXContentCollector::_flushCurrentPath()
+       }
+       else if (m_currentFillGeometry[i]["libwpg:path-action"]->getStr() == "M")
+       {
+-        if (path.count() && !wasMove)
++        if (!tmpPath.empty())
+         {
+-          WPXPropertyList closedPath;
+-          closedPath.insert("libwpg:path-action", "Z");
+-          path.append(closedPath);
++          if (!wasMove)
++          {
++            WPXPropertyList closedPath;
++            closedPath.insert("libwpg:path-action", "Z");
++            tmpPath.push_back(closedPath);
++          }
++          else
++          {
++            tmpPath.pop_back();
++          }
+         }
+         wasMove = true;
+       }
+       else
+         wasMove = false;
+-      path.append(m_currentFillGeometry[i]);
++      tmpPath.push_back(m_currentFillGeometry[i]);
+     }
+-    if (path.count() && !wasMove)
++    if (!tmpPath.empty())
+     {
+-      WPXPropertyList closedPath;
+-      closedPath.insert("libwpg:path-action", "Z");
+-      path.append(closedPath);
++      if (!wasMove)
++      {
++        WPXPropertyList closedPath;
++        closedPath.insert("libwpg:path-action", "Z");
++        tmpPath.push_back(closedPath);
++      }
++      else
++        tmpPath.pop_back();
+     }
+-    if (path.count())
++    if (!tmpPath.empty())
+     {
++      WPXPropertyListVector path;
++      for (unsigned i = 0; i < tmpPath.size(); ++i)
++        path.append(tmpPath[i]);
+       m_shapeOutputDrawing->addStyle(fillPathProps, WPXPropertyListVector());
+       m_shapeOutputDrawing->addPath(path);
+     }
+   }
+   m_currentFillGeometry.clear();
+-  path = WPXPropertyListVector();
++  tmpPath.clear();
+ 
+   if (m_styleProps["draw:stroke"] && m_styleProps["draw:stroke"]->getStr() != "none")
+   {
++    bool firstPoint = true;
++    bool wasMove = false;
+     for (unsigned i = 0; i < m_currentLineGeometry.size(); i++)
+-      path.append(m_currentLineGeometry[i]);
+-    if (path.count())
+     {
++      if (firstPoint)
++      {
++        firstPoint = false;
++        wasMove = true;
++      }
++      else if (m_currentLineGeometry[i]["libwpg:path-action"]->getStr() == "M")
++      {
++        if (!tmpPath.empty())
++        {
++          if (wasMove)
++          {
++            tmpPath.pop_back();
++          }
++        }
++        wasMove = true;
++      }
++      else
++        wasMove = false;
++      tmpPath.push_back(m_currentLineGeometry[i]);
++    }
++    if (!tmpPath.empty())
++    {
++      if (wasMove)
++        tmpPath.pop_back();
++    }
++    if (!tmpPath.empty())
++    {
++      WPXPropertyListVector path;
++      for (unsigned i = 0; i < tmpPath.size(); ++i)
++        path.append(tmpPath[i]);
+       m_shapeOutputDrawing->addStyle(linePathProps, WPXPropertyListVector());
+       m_shapeOutputDrawing->addPath(path);
+     }


More information about the Libreoffice-commits mailing list