From 7192f0ddaa937f6c63bfffed0b35146a0f97943a Mon Sep 17 00:00:00 2001 From: Fridrich Štrba Date: Tue, 2 Oct 2012 23:12:49 +0200 Subject: Clean the path pushed to the API as much as possible Change-Id: I5e68bc5aedc4c6e350e62b30472a1b3f0803c520 --- libvisio/UnpackedTarball_visio.mk | 9 +++ libvisio/libvisio-0.0.19.patch | 116 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 125 insertions(+) create mode 100644 libvisio/libvisio-0.0.19.patch (limited to 'libvisio') 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 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); + } -- cgit