Kaydet (Commit) 7192f0dd authored tarafından Fridrich Štrba's avatar Fridrich Štrba

Clean the path pushed to the API as much as possible

Change-Id: I5e68bc5aedc4c6e350e62b30472a1b3f0803c520
üst c2eb9698
......@@ -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:
--- 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);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment