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.st...@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;
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits