[Libreoffice-commits] libvisio.git: src/lib
Fridrich Štrba
fridrich.strba at bluewin.ch
Fri Dec 11 10:54:47 PST 2015
src/lib/VSDContentCollector.cpp | 12 ++++++++++--
src/lib/VSDLayerList.cpp | 25 +++++++++++++++++++++++++
src/lib/VSDLayerList.h | 1 +
3 files changed, 36 insertions(+), 2 deletions(-)
New commits:
commit 69ae3cb64d39575cb1875acc705763e3dabfb99a
Author: Fridrich Štrba <fridrich.strba at bluewin.ch>
Date: Fri Dec 11 19:54:24 2015 +0100
Account for layer membership for stroke colour and for text colour
Change-Id: I137c039f548b42003f2b0de94d6efd09d8f1a212
diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index 48d483f..aee5456 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -517,7 +517,11 @@ void libvisio::VSDContentCollector::_flushText()
if (m_charFormats[charIndex].superscript) textProps.insert("style:text-position", "super");
if (m_charFormats[charIndex].subscript) textProps.insert("style:text-position", "sub");
textProps.insert("fo:font-size", m_charFormats[charIndex].size*72.0, librevenge::RVNG_POINT);
- textProps.insert("fo:color", getColourString(m_charFormats[charIndex].colour));
+ Colour colour = m_charFormats[charIndex].colour;
+ const Colour *pColour = m_currentLayerList.getColour(m_currentLayerMem);
+ if (pColour)
+ colour = *pColour;
+ textProps.insert("fo:color", getColourString(colour));
double opacity = 1.0;
if (m_charFormats[charIndex].colour.a)
opacity -= (double)(m_charFormats[charIndex].colour.a)/255.0;
@@ -2237,7 +2241,11 @@ void libvisio::VSDContentCollector::_lineProperties(const VSDLineStyle &style, l
}
styleProps.insert("svg:stroke-width", m_scale*style.width);
- styleProps.insert("svg:stroke-color", getColourString(style.colour));
+ libvisio::Colour colour = style.colour;
+ const Colour *pColour = m_currentLayerList.getColour(m_currentLayerMem);
+ if (pColour)
+ colour = *pColour;
+ styleProps.insert("svg:stroke-color", getColourString(colour));
if (style.colour.a)
styleProps.insert("svg:stroke-opacity", (1 - style.colour.a/255.0), librevenge::RVNG_PERCENT);
else
diff --git a/src/lib/VSDLayerList.cpp b/src/lib/VSDLayerList.cpp
index 73fd233..ca638d4 100644
--- a/src/lib/VSDLayerList.cpp
+++ b/src/lib/VSDLayerList.cpp
@@ -86,4 +86,29 @@ unsigned libvisio::VSDLayerList::getColourId(const std::vector<unsigned> &ids)
return colourId;
}
+const libvisio::Colour *libvisio::VSDLayerList::getColour(const std::vector<unsigned> &ids)
+{
+ unsigned colourId = MINUS_ONE;
+ std::map<unsigned, libvisio::VSDLayer>::const_iterator iterColour = m_elements.end();
+ for (std::vector<unsigned>::const_iterator iter = ids.begin(); iter != ids.end(); ++iter)
+ {
+ std::map<unsigned, libvisio::VSDLayer>::const_iterator iterMap = m_elements.find(*iter);
+ // It is enough that one layer does not override colour and the original colour is used
+ if (iterMap->second.m_colourId == MINUS_ONE)
+ return 0;
+ // This means we are reading the first layer and it overrides colour
+ else if (iterColour == m_elements.end())
+ {
+ colourId = iterMap->second.m_colourId;
+ iterColour = iterMap;
+ }
+ // If two layers override colour to two different values, the original colour is used
+ else if (colourId != iterMap->second.m_colourId)
+ return 0;
+ }
+ if (iterColour == m_elements.end())
+ return 0;
+ return &(iterColour->second.m_colour);
+}
+
/* vim:set shiftwidth=2 softtabstop=2 expandtab: */
diff --git a/src/lib/VSDLayerList.h b/src/lib/VSDLayerList.h
index 7267c2a..aa45e14 100644
--- a/src/lib/VSDLayerList.h
+++ b/src/lib/VSDLayerList.h
@@ -41,6 +41,7 @@ public:
void addLayer(unsigned id, const VSDLayer &layer);
unsigned getColourId(const std::vector<unsigned> &ids);
+ const Colour *getColour(const std::vector<unsigned> &ids);
private:
std::map<unsigned, VSDLayer> m_elements;
More information about the Libreoffice-commits
mailing list