summaryrefslogtreecommitdiff
path: root/libvisio
diff options
context:
space:
mode:
authorFridrich Štrba <fridrich.strba@bluewin.ch>2012-10-02 23:12:49 +0200
committerFridrich Štrba <fridrich.strba@bluewin.ch>2012-10-02 23:13:10 +0200
commit7192f0ddaa937f6c63bfffed0b35146a0f97943a (patch)
treeb6917bd46acf2dd8242c4f60be3f2730a984419f /libvisio
parentc2eb9698eff7412e6973e659f26e7e39eeaf2887 (diff)
Clean the path pushed to the API as much as possible
Change-Id: I5e68bc5aedc4c6e350e62b30472a1b3f0803c520
Diffstat (limited to 'libvisio')
-rw-r--r--libvisio/UnpackedTarball_visio.mk9
-rw-r--r--libvisio/libvisio-0.0.19.patch116
2 files changed, 125 insertions, 0 deletions
diff --git a/libvisio/UnpackedTarball_visio.mk b/libvisio/UnpackedTarball_visio.mk
index aa9113bafd6d..15429c546290 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 000000000000..ee3c17f51af2
--- /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);
+ }