src/lib/VDXParser.cpp | 8 ++-- src/lib/VSD5Parser.cpp | 6 +-- src/lib/VSD6Parser.cpp | 2 - src/lib/VSDCollector.h | 11 +++-- src/lib/VSDContentCollector.cpp | 22 ++++++----- src/lib/VSDContentCollector.h | 11 +++-- src/lib/VSDParser.cpp | 13 +++---- src/lib/VSDStyles.h | 74 +++++++++++++++++++++++----------------- src/lib/VSDStylesCollector.cpp | 10 +++-- src/lib/VSDStylesCollector.h | 11 +++-- src/lib/VSDXMLParserBase.cpp | 5 +- src/lib/VSDXParser.cpp | 48 ++++++++++++++++--------- src/lib/tokens.txt | 8 ++++ 13 files changed, 138 insertions(+), 91 deletions(-)
New commits: commit 90bdec7116f35886a4a3bb687945e3ebbf9a9433 Author: Fridrich Å trba <[email protected]> Date: Mon Feb 6 11:36:58 2017 +0100 Some more reading of theme references Change-Id: Ic9dd48b086eef11e82ecac6b19b66669aea07844 diff --git a/src/lib/VDXParser.cpp b/src/lib/VDXParser.cpp index cfdb1f1..e81ef0c 100644 --- a/src/lib/VDXParser.cpp +++ b/src/lib/VDXParser.cpp @@ -372,9 +372,9 @@ void libvisio::VDXParser::readLine(xmlTextReaderPtr reader) while ((XML_LINE != tokenId || XML_READER_TYPE_END_ELEMENT != tokenType) && 1 == ret && (!m_watcher || !m_watcher->isError())); if (m_isInStyles) - m_collector->collectLineStyle(level, strokeWidth, colour, linePattern, startMarker, endMarker, lineCap, rounding); + m_collector->collectLineStyle(level, strokeWidth, colour, linePattern, startMarker, endMarker,lineCap, rounding, -1, -1); else - m_shape.m_lineStyle.override(VSDOptionalLineStyle(strokeWidth, colour, linePattern, startMarker, endMarker, lineCap, rounding)); + m_shape.m_lineStyle.override(VSDOptionalLineStyle(strokeWidth, colour, linePattern, startMarker, endMarker, lineCap, rounding, -1, -1)); } void libvisio::VDXParser::readFillAndShadow(xmlTextReaderPtr reader) @@ -453,7 +453,7 @@ void libvisio::VDXParser::readFillAndShadow(xmlTextReaderPtr reader) if (m_isInStyles) m_collector->collectFillStyle(level, fillColourFG, fillColourBG, fillPattern, fillFGTransparency, - fillBGTransparency, shadowPattern, shadowColourFG, shadowOffsetX, shadowOffsetY, -1, -1); + fillBGTransparency, shadowPattern, shadowColourFG, shadowOffsetX, shadowOffsetY, -1, -1, -1); else { if (m_isStencilStarted) @@ -461,7 +461,7 @@ void libvisio::VDXParser::readFillAndShadow(xmlTextReaderPtr reader) VSD_DEBUG_MSG(("Found stencil fill\n")); } m_shape.m_fillStyle.override(VSDOptionalFillStyle(fillColourFG, fillColourBG, fillPattern, fillFGTransparency, fillBGTransparency, - shadowColourFG, shadowPattern, shadowOffsetX, shadowOffsetY, -1, -1)); + shadowColourFG, shadowPattern, shadowOffsetX, shadowOffsetY, -1, -1, 1)); } } diff --git a/src/lib/VSD5Parser.cpp b/src/lib/VSD5Parser.cpp index 94dbbed..3d9edcf 100644 --- a/src/lib/VSD5Parser.cpp +++ b/src/lib/VSD5Parser.cpp @@ -213,9 +213,9 @@ void libvisio::VSD5Parser::readLine(librevenge::RVNGInputStream *input) unsigned char lineCap = readU8(input); if (m_isInStyles) - m_collector->collectLineStyle(m_header.level, strokeWidth, c, linePattern, startMarker, endMarker, lineCap, rounding); + m_collector->collectLineStyle(m_header.level, strokeWidth, c, linePattern, startMarker, endMarker, lineCap, rounding, -1, -1); else - m_shape.m_lineStyle.override(VSDOptionalLineStyle(strokeWidth, c, linePattern, startMarker, endMarker, lineCap, rounding)); + m_shape.m_lineStyle.override(VSDOptionalLineStyle(strokeWidth, c, linePattern, startMarker, endMarker, lineCap, rounding, -1, -1)); } void libvisio::VSD5Parser::readParaIX(librevenge::RVNGInputStream *input) @@ -356,7 +356,7 @@ void libvisio::VSD5Parser::readFillAndShadow(librevenge::RVNGInputStream *input) } m_shape.m_fillStyle.override(VSDOptionalFillStyle(colourFG, colourBG, fillPattern, 0.0, 0.0, shfgc, shadowPattern, shadowOffsetX, - shadowOffsetY, -1, -1)); + shadowOffsetY, -1, -1, -1)); } } diff --git a/src/lib/VSD6Parser.cpp b/src/lib/VSD6Parser.cpp index 9979895..745de2f 100644 --- a/src/lib/VSD6Parser.cpp +++ b/src/lib/VSD6Parser.cpp @@ -305,7 +305,7 @@ void libvisio::VSD6Parser::readFillAndShadow(librevenge::RVNGInputStream *input) } m_shape.m_fillStyle.override(VSDOptionalFillStyle(colourFG, colourBG, fillPattern, fillFGTransparency, fillBGTransparency, shadowFG, shadowPattern, - shadowOffsetX, shadowOffsetY, -1, -1)); + shadowOffsetX, shadowOffsetY, -1, -1, -1)); } } diff --git a/src/lib/VSDCollector.h b/src/lib/VSDCollector.h index 4012d37..7286d1c 100644 --- a/src/lib/VSDCollector.h +++ b/src/lib/VSDCollector.h @@ -31,12 +31,13 @@ public: virtual void collectEllipse(unsigned id, unsigned level, double cx, double cy, double xleft, double yleft, double xtop, double ytop) = 0; virtual void collectLine(unsigned level, const boost::optional<double> &strokeWidth, const boost::optional<Colour> &c, const boost::optional<unsigned char> &linePattern, const boost::optional<unsigned char> &startMarker, const boost::optional<unsigned char> &endMarker, - const boost::optional<unsigned char> &lineCap, const boost::optional<double> &rounding) = 0; + const boost::optional<unsigned char> &lineCap, const boost::optional<double> &rounding, + const boost::optional<long> &qsLineColour, const boost::optional<long> &qsLineMatrix) = 0; virtual void collectFillAndShadow(unsigned level, const boost::optional<Colour> &colourFG, const boost::optional<Colour> &colourBG, const boost::optional<unsigned char> &fillPattern, const boost::optional<double> &fillFGTransparency, const boost::optional<double> &fillBGTransparency, const boost::optional<unsigned char> &shadowPattern, const boost::optional<Colour> &shfgc, const boost::optional<double> &shadowOffsetX, const boost::optional<double> &shadowOffsetY, - const boost::optional<long> &qsFc, const boost::optional<long> &qsSc) = 0; + const boost::optional<long> &qsFc, const boost::optional<long> &qsSc, const boost::optional<long> &qsLm) = 0; virtual void collectFillAndShadow(unsigned level, const boost::optional<Colour> &colourFG, const boost::optional<Colour> &colourBG, const boost::optional<unsigned char> &fillPattern, const boost::optional<double> &fillFGTransparency, const boost::optional<double> &fillBGTransparency, const boost::optional<unsigned char> &shadowPattern, @@ -116,12 +117,14 @@ public: virtual void collectStyleSheet(unsigned id, unsigned level,unsigned parentLineStyle, unsigned parentFillStyle, unsigned parentTextStyle) = 0; virtual void collectLineStyle(unsigned level, const boost::optional<double> &strokeWidth, const boost::optional<Colour> &c, const boost::optional<unsigned char> &linePattern, const boost::optional<unsigned char> &startMarker, const boost::optional<unsigned char> &endMarker, - const boost::optional<unsigned char> &lineCap, const boost::optional<double> &rounding) = 0; + const boost::optional<unsigned char> &lineCap, const boost::optional<double> &rounding, + const boost::optional<long> &qsLineColour, const boost::optional<long> &qsLineMatrix) = 0; virtual void collectFillStyle(unsigned level, const boost::optional<Colour> &colourFG, const boost::optional<Colour> &colourBG, const boost::optional<unsigned char> &fillPattern, const boost::optional<double> &fillFGTransparency, const boost::optional<double> &fillBGTransparency, const boost::optional<unsigned char> &shadowPattern, const boost::optional<Colour> &shfgc, const boost::optional<double> &shadowOffsetX, const boost::optional<double> &shadowOffsetY, - const boost::optional<long> &qsFillColour, const boost::optional<long> &qsShadowColour) = 0; + const boost::optional<long> &qsFillColour, const boost::optional<long> &qsShadowColour, + const boost::optional<long> &qsFillMatrix) = 0; virtual void collectFillStyle(unsigned level, const boost::optional<Colour> &colourFG, const boost::optional<Colour> &colourBG, const boost::optional<unsigned char> &fillPattern, const boost::optional<double> &fillFGTransparency, const boost::optional<double> &fillBGTransparency, const boost::optional<unsigned char> &shadowPattern, diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp index 56cf440..b4db6fe 100644 --- a/src/lib/VSDContentCollector.cpp +++ b/src/lib/VSDContentCollector.cpp @@ -1611,20 +1611,21 @@ void libvisio::VSDContentCollector::collectRelQuadBezTo(unsigned /* id */, unsig void libvisio::VSDContentCollector::collectLine(unsigned level, const boost::optional<double> &strokeWidth, const boost::optional<Colour> &c, const boost::optional<unsigned char> &linePattern, const boost::optional<unsigned char> &startMarker, const boost::optional<unsigned char> &endMarker, const boost::optional<unsigned char> &lineCap, - const boost::optional<double> &rounding) + const boost::optional<double> &rounding, const boost::optional<long> &qsLineColour, const boost::optional<long> &qsLineMatrix) { _handleLevelChange(level); - m_lineStyle.override(VSDOptionalLineStyle(strokeWidth, c, linePattern, startMarker, endMarker, lineCap, rounding), m_documentTheme); + m_lineStyle.override(VSDOptionalLineStyle(strokeWidth, c, linePattern, startMarker, endMarker, lineCap, rounding, qsLineColour, qsLineMatrix), m_documentTheme); } void libvisio::VSDContentCollector::collectFillAndShadow(unsigned level, const boost::optional<Colour> &colourFG, const boost::optional<Colour> &colourBG, const boost::optional<unsigned char> &fillPattern, const boost::optional<double> &fillFGTransparency, const boost::optional<double> &fillBGTransparency, const boost::optional<unsigned char> &shadowPattern, const boost::optional<Colour> &shfgc, const boost::optional<double> &shadowOffsetX, - const boost::optional<double> &shadowOffsetY, const boost::optional<long> &qsFillColour, const boost::optional<long> &qsShadowColour) + const boost::optional<double> &shadowOffsetY, const boost::optional<long> &qsFillColour, const boost::optional<long> &qsShadowColour, + const boost::optional<long> &qsFillMatrix) { _handleLevelChange(level); m_fillStyle.override(VSDOptionalFillStyle(colourFG, colourBG, fillPattern, fillFGTransparency, fillBGTransparency, shfgc, - shadowPattern, shadowOffsetX, shadowOffsetY, qsFillColour, qsShadowColour), m_documentTheme); + shadowPattern, shadowOffsetX, shadowOffsetY, qsFillColour, qsShadowColour, qsFillMatrix), m_documentTheme); } void libvisio::VSDContentCollector::collectFillAndShadow(unsigned level, const boost::optional<Colour> &colourFG, const boost::optional<Colour> &colourBG, @@ -1632,7 +1633,7 @@ void libvisio::VSDContentCollector::collectFillAndShadow(unsigned level, const b const boost::optional<double> &fillBGTransparency, const boost::optional<unsigned char> &shadowPattern, const boost::optional<Colour> &shfgc) { - collectFillAndShadow(level, colourFG, colourBG, fillPattern, fillFGTransparency, fillBGTransparency, shadowPattern, shfgc, m_shadowOffsetX, m_shadowOffsetY, -1, -1); + collectFillAndShadow(level, colourFG, colourBG, fillPattern, fillFGTransparency, fillBGTransparency, shadowPattern, shfgc, m_shadowOffsetX, m_shadowOffsetY, -1, -1, -1); } void libvisio::VSDContentCollector::collectForeignData(unsigned level, const librevenge::RVNGBinaryData &binaryData) @@ -2791,9 +2792,10 @@ void libvisio::VSDContentCollector::collectStyleSheet(unsigned id, unsigned leve void libvisio::VSDContentCollector::collectLineStyle(unsigned /* level */, const boost::optional<double> &strokeWidth, const boost::optional<Colour> &c, const boost::optional<unsigned char> &linePattern, const boost::optional<unsigned char> &startMarker, const boost::optional<unsigned char> &endMarker, const boost::optional<unsigned char> &lineCap, - const boost::optional<double> &rounding) + const boost::optional<double> &rounding, const boost::optional<long> &qsLineColour, + const boost::optional<long> &qsLineMatrix) { - VSDOptionalLineStyle lineStyle(strokeWidth, c, linePattern, startMarker, endMarker, lineCap, rounding); + VSDOptionalLineStyle lineStyle(strokeWidth, c, linePattern, startMarker, endMarker, lineCap, rounding, qsLineColour, qsLineMatrix); m_styles.addLineStyle(m_currentStyleSheet, lineStyle); } @@ -2802,10 +2804,10 @@ void libvisio::VSDContentCollector::collectFillStyle(unsigned /* level */, const const boost::optional<double> &fillBGTransparency, const boost::optional<unsigned char> &shadowPattern, const boost::optional<Colour> &shfgc, const boost::optional<double> &shadowOffsetX, const boost::optional<double> &shadowOffsetY, const boost::optional<long> &qsFillColour, - const boost::optional<long> &qsShadowColour) + const boost::optional<long> &qsShadowColour, const boost::optional<long> &qsFillMatrix) { VSDOptionalFillStyle fillStyle(colourFG, colourBG, fillPattern, fillFGTransparency, fillBGTransparency, shfgc, shadowPattern, - shadowOffsetX, shadowOffsetY, qsFillColour, qsShadowColour); + shadowOffsetX, shadowOffsetY, qsFillColour, qsShadowColour, qsFillMatrix); m_styles.addFillStyle(m_currentStyleSheet, fillStyle); } @@ -2816,7 +2818,7 @@ void libvisio::VSDContentCollector::collectFillStyle(unsigned level, const boost const boost::optional<Colour> &shfgc) { collectFillStyle(level, colourFG, colourBG, fillPattern, fillFGTransparency, fillBGTransparency, shadowPattern, shfgc, - m_shadowOffsetX, m_shadowOffsetY, -1, -1); + m_shadowOffsetX, m_shadowOffsetY, -1, -1, -1); } void libvisio::VSDContentCollector::collectParaIXStyle(unsigned /* id */, unsigned /* level */, unsigned charCount, diff --git a/src/lib/VSDContentCollector.h b/src/lib/VSDContentCollector.h index 55655eb..d40b72f 100644 --- a/src/lib/VSDContentCollector.h +++ b/src/lib/VSDContentCollector.h @@ -50,12 +50,13 @@ public: void collectEllipse(unsigned id, unsigned level, double cx, double cy, double xleft, double yleft, double xtop, double ytop); void collectLine(unsigned level, const boost::optional<double> &strokeWidth, const boost::optional<Colour> &c, const boost::optional<unsigned char> &linePattern, const boost::optional<unsigned char> &startMarker, const boost::optional<unsigned char> &endMarker, - const boost::optional<unsigned char> &lineCap, const boost::optional<double> &rounding); + const boost::optional<unsigned char> &lineCap, const boost::optional<double> &rounding, + const boost::optional<long> &qsLineColour, const boost::optional<long> &qsLineMatrix); void collectFillAndShadow(unsigned level, const boost::optional<Colour> &colourFG, const boost::optional<Colour> &colourBG, const boost::optional<unsigned char> &fillPattern, const boost::optional<double> &fillFGTransparency, const boost::optional<double> &fillBGTransparency, const boost::optional<unsigned char> &shadowPattern, const boost::optional<Colour> &shfgc, const boost::optional<double> &shadowOffsetX, const boost::optional<double> &shadowOffsetY, - const boost::optional<long> &qsFc, const boost::optional<long> &qsSc); + const boost::optional<long> &qsFc, const boost::optional<long> &qsSc, const boost::optional<long> &qsLm); void collectFillAndShadow(unsigned level, const boost::optional<Colour> &colourFG, const boost::optional<Colour> &colourBG, const boost::optional<unsigned char> &fillPattern, const boost::optional<double> &fillFGTransparency, const boost::optional<double> &fillBGTransparency, const boost::optional<unsigned char> &shadowPattern, @@ -136,12 +137,14 @@ public: void collectStyleSheet(unsigned id, unsigned level, unsigned parentLineStyle, unsigned parentFillStyle, unsigned parentTextStyle); void collectLineStyle(unsigned level, const boost::optional<double> &strokeWidth, const boost::optional<Colour> &c, const boost::optional<unsigned char> &linePattern, const boost::optional<unsigned char> &startMarker, const boost::optional<unsigned char> &endMarker, - const boost::optional<unsigned char> &lineCap, const boost::optional<double> &rounding); + const boost::optional<unsigned char> &lineCap, const boost::optional<double> &rounding, + const boost::optional<long> &qsLineColour, const boost::optional<long> &qsLineMatrix); void collectFillStyle(unsigned level, const boost::optional<Colour> &colourFG, const boost::optional<Colour> &colourBG, const boost::optional<unsigned char> &fillPattern, const boost::optional<double> &fillFGTransparency, const boost::optional<double> &fillBGTransparency, const boost::optional<unsigned char> &shadowPattern, const boost::optional<Colour> &shfgc, const boost::optional<double> &shadowOffsetX, const boost::optional<double> &shadowOffsetY, - const boost::optional<long> &qsFillColour, const boost::optional<long> &qsShadowColour); + const boost::optional<long> &qsFillColour, const boost::optional<long> &qsShadowColour, + const boost::optional<long> &qsFillMatrix); void collectFillStyle(unsigned level, const boost::optional<Colour> &colourFG, const boost::optional<Colour> &colourBG, const boost::optional<unsigned char> &fillPattern, const boost::optional<double> &fillFGTransparency, const boost::optional<double> &fillBGTransparency, const boost::optional<unsigned char> &shadowPattern, diff --git a/src/lib/VSDParser.cpp b/src/lib/VSDParser.cpp index 822090c..8ac21eb 100644 --- a/src/lib/VSDParser.cpp +++ b/src/lib/VSDParser.cpp @@ -631,12 +631,13 @@ void libvisio::VSDParser::_flushShape() m_collector->collectTxtXForm(m_currentShapeLevel+2, *(m_shape.m_txtxform)); m_collector->collectLine(m_currentShapeLevel+2, m_shape.m_lineStyle.width, m_shape.m_lineStyle.colour, m_shape.m_lineStyle.pattern, - m_shape.m_lineStyle.startMarker, m_shape.m_lineStyle.endMarker, m_shape.m_lineStyle.cap, m_shape.m_lineStyle.rounding); + m_shape.m_lineStyle.startMarker, m_shape.m_lineStyle.endMarker, m_shape.m_lineStyle.cap, m_shape.m_lineStyle.rounding, + m_shape.m_lineStyle.qsLineColour, m_shape.m_lineStyle.qsLineMatrix); m_collector->collectFillAndShadow(m_currentShapeLevel+2, m_shape.m_fillStyle.fgColour, m_shape.m_fillStyle.bgColour, m_shape.m_fillStyle.pattern, m_shape.m_fillStyle.fgTransparency, m_shape.m_fillStyle.bgTransparency, m_shape.m_fillStyle.shadowPattern, m_shape.m_fillStyle.shadowFgColour, m_shape.m_fillStyle.shadowOffsetX, m_shape.m_fillStyle.shadowOffsetY, - m_shape.m_fillStyle.qsFillColour, m_shape.m_fillStyle.qsShadowColour); + m_shape.m_fillStyle.qsFillColour, m_shape.m_fillStyle.qsShadowColour, m_shape.m_fillStyle.qsFillMatrix); m_collector->collectTextBlock(m_currentShapeLevel+2, m_shape.m_textBlockStyle.leftMargin, m_shape.m_textBlockStyle.rightMargin, m_shape.m_textBlockStyle.topMargin, m_shape.m_textBlockStyle.bottomMargin, m_shape.m_textBlockStyle.verticalAlign, @@ -862,9 +863,9 @@ void libvisio::VSDParser::readLine(librevenge::RVNGInputStream *input) unsigned char lineCap = readU8(input); if (m_isInStyles) - m_collector->collectLineStyle(m_header.level, strokeWidth, c, linePattern, startMarker, endMarker, lineCap, rounding); + m_collector->collectLineStyle(m_header.level, strokeWidth, c, linePattern, startMarker, endMarker, lineCap, rounding, -1, -1); else - m_shape.m_lineStyle.override(VSDOptionalLineStyle(strokeWidth, c, linePattern, startMarker, endMarker, lineCap, rounding)); + m_shape.m_lineStyle.override(VSDOptionalLineStyle(strokeWidth, c, linePattern, startMarker, endMarker, lineCap, rounding, -1, -1)); } void libvisio::VSDParser::readTextBlock(librevenge::RVNGInputStream *input) @@ -2090,7 +2091,7 @@ void libvisio::VSDParser::readFillAndShadow(librevenge::RVNGInputStream *input) if (m_isInStyles) m_collector->collectFillStyle(m_header.level, colourFG, colourBG, fillPattern, fillFGTransparency, fillBGTransparency, shadowPattern, shadowFG, - shadowOffsetX, shadowOffsetY, -1, -1); + shadowOffsetX, shadowOffsetY, -1, -1, -1); else { if (m_isStencilStarted) @@ -2099,7 +2100,7 @@ void libvisio::VSDParser::readFillAndShadow(librevenge::RVNGInputStream *input) } m_shape.m_fillStyle.override(VSDOptionalFillStyle(colourFG, colourBG, fillPattern, fillFGTransparency, fillBGTransparency, shadowFG, shadowPattern, - shadowOffsetX, shadowOffsetY, -1, -1)); + shadowOffsetX, shadowOffsetY, -1, -1, -1)); } } diff --git a/src/lib/VSDStyles.h b/src/lib/VSDStyles.h index f50946e..5bc020b 100644 --- a/src/lib/VSDStyles.h +++ b/src/lib/VSDStyles.h @@ -23,15 +23,19 @@ namespace libvisio struct VSDOptionalLineStyle { VSDOptionalLineStyle() : - width(), colour(), pattern(), startMarker(), endMarker(), cap(), rounding() {} + width(), colour(), pattern(), startMarker(), endMarker(), cap(), rounding(), + qsLineColour(), qsLineMatrix() {} VSDOptionalLineStyle(const boost::optional<double> &w, const boost::optional<Colour> &col, const boost::optional<unsigned char> &p, const boost::optional<unsigned char> &sm, const boost::optional<unsigned char> &em, const boost::optional<unsigned char> &c, - const boost::optional<double> &r) : - width(w), colour(col), pattern(p), startMarker(sm), endMarker(em), cap(c), rounding(r) {} + const boost::optional<double> &r, const boost::optional<long> &qlc, + const boost::optional<long> &qlm) : + width(w), colour(col), pattern(p), startMarker(sm), endMarker(em), cap(c), rounding(r), + qsLineColour(qlc), qsLineMatrix(qlm) {} VSDOptionalLineStyle(const VSDOptionalLineStyle &style) : width(style.width), colour(style.colour), pattern(style.pattern), startMarker(style.startMarker), - endMarker(style.endMarker), cap(style.cap), rounding(style.rounding) {} + endMarker(style.endMarker), cap(style.cap), rounding(style.rounding), qsLineColour(style.qsLineColour), + qsLineMatrix(style.qsLineMatrix) {} ~VSDOptionalLineStyle() {} void override(const VSDOptionalLineStyle &style) { @@ -42,6 +46,8 @@ struct VSDOptionalLineStyle ASSIGN_OPTIONAL(style.endMarker, endMarker); ASSIGN_OPTIONAL(style.cap, cap); ASSIGN_OPTIONAL(style.rounding, rounding); + ASSIGN_OPTIONAL(style.qsLineColour, qsLineColour); + ASSIGN_OPTIONAL(style.qsLineMatrix, qsLineMatrix); } boost::optional<double> width; @@ -51,18 +57,23 @@ struct VSDOptionalLineStyle boost::optional<unsigned char> endMarker; boost::optional<unsigned char> cap; boost::optional<double> rounding; + boost::optional<long> qsLineColour; + boost::optional<long> qsLineMatrix; }; struct VSDLineStyle { VSDLineStyle() : - width(0.01), colour(), pattern(1), startMarker(0), endMarker(0), cap(0), rounding(0.0) {} + width(0.01), colour(), pattern(1), startMarker(0), endMarker(0), cap(0), rounding(0.0), + qsLineColour(-1), qsLineMatrix(-1) {} VSDLineStyle(double w, Colour col, unsigned char p, unsigned char sm, - unsigned char em, unsigned char c, double r) : - width(w), colour(col), pattern(p), startMarker(sm), endMarker(em), cap(c), rounding(r) {} + unsigned char em, unsigned char c, double r, long qlc, long qlm) : + width(w), colour(col), pattern(p), startMarker(sm), endMarker(em), cap(c), rounding(r), + qsLineColour(qlc), qsLineMatrix(qlm) {} VSDLineStyle(const VSDLineStyle &style) : width(style.width), colour(style.colour), pattern(style.pattern), startMarker(style.startMarker), - endMarker(style.endMarker), cap(style.cap), rounding(style.rounding) {} + endMarker(style.endMarker), cap(style.cap), rounding(style.rounding), qsLineColour(style.qsLineColour), + qsLineMatrix(style.qsLineMatrix) {} ~VSDLineStyle() {} void override(const VSDOptionalLineStyle &style, const VSDXTheme *theme) { @@ -72,14 +83,14 @@ struct VSDLineStyle ASSIGN_OPTIONAL(style.endMarker, endMarker); ASSIGN_OPTIONAL(style.cap, cap); ASSIGN_OPTIONAL(style.rounding, rounding); - if (!theme) - { - ASSIGN_OPTIONAL(style.colour, colour); - } - else + ASSIGN_OPTIONAL(style.qsLineColour, qsLineColour); + ASSIGN_OPTIONAL(style.qsLineMatrix, qsLineMatrix); + if (theme) { - ASSIGN_OPTIONAL(style.colour, colour); + if (!!style.qsLineColour && style.qsLineColour.get() >= 0) + ASSIGN_OPTIONAL(theme->getThemeColour(style.qsLineColour.get()), colour); } + ASSIGN_OPTIONAL(style.colour, colour); } double width; @@ -89,27 +100,30 @@ struct VSDLineStyle unsigned char endMarker; unsigned char cap; double rounding; + long qsLineColour; + long qsLineMatrix; }; struct VSDOptionalFillStyle { VSDOptionalFillStyle() : fgColour(), bgColour(), pattern(), fgTransparency(), bgTransparency(), shadowFgColour(), - shadowPattern(), shadowOffsetX(), shadowOffsetY(), qsFillColour(), qsShadowColour() {} + shadowPattern(), shadowOffsetX(), shadowOffsetY(), qsFillColour(), qsShadowColour(), + qsFillMatrix() {} VSDOptionalFillStyle(const boost::optional<Colour> &fgc, const boost::optional<Colour> &bgc, const boost::optional<unsigned char> &p, const boost::optional<double> &fga, const boost::optional<double> &bga, const boost::optional<Colour> &sfgc, const boost::optional<unsigned char> &shp, const boost::optional<double> &shX, const boost::optional<double> &shY, const boost::optional<long> &qsFc, - const boost::optional<long> &qsSc) : + const boost::optional<long> &qsSc, const boost::optional<long> &qsFm) : fgColour(fgc), bgColour(bgc), pattern(p), fgTransparency(fga), bgTransparency(bga), shadowFgColour(sfgc), shadowPattern(shp), shadowOffsetX(shX), shadowOffsetY(shY), - qsFillColour(qsFc), qsShadowColour(qsSc) {} + qsFillColour(qsFc), qsShadowColour(qsSc), qsFillMatrix(qsFm) {} VSDOptionalFillStyle(const VSDOptionalFillStyle &style) : fgColour(style.fgColour), bgColour(style.bgColour), pattern(style.pattern), fgTransparency(style.fgTransparency), bgTransparency(style.bgTransparency), shadowFgColour(style.shadowFgColour), shadowPattern(style.shadowPattern), shadowOffsetX(style.shadowOffsetX), shadowOffsetY(style.shadowOffsetY), qsFillColour(style.qsFillColour), - qsShadowColour(style.qsShadowColour) {} + qsShadowColour(style.qsShadowColour), qsFillMatrix(style.qsFillMatrix) {} ~VSDOptionalFillStyle() {} void override(const VSDOptionalFillStyle &style) { @@ -121,6 +135,7 @@ struct VSDOptionalFillStyle ASSIGN_OPTIONAL(style.shadowOffsetY, shadowOffsetY); ASSIGN_OPTIONAL(style.qsFillColour, qsFillColour); ASSIGN_OPTIONAL(style.qsShadowColour, qsShadowColour); + ASSIGN_OPTIONAL(style.qsFillMatrix, qsFillMatrix); ASSIGN_OPTIONAL(style.fgColour, fgColour); ASSIGN_OPTIONAL(style.bgColour, bgColour); ASSIGN_OPTIONAL(style.shadowFgColour, shadowFgColour); @@ -137,23 +152,24 @@ struct VSDOptionalFillStyle boost::optional<double> shadowOffsetY; boost::optional<long> qsFillColour; boost::optional<long> qsShadowColour; + boost::optional<long> qsFillMatrix; }; struct VSDFillStyle { VSDFillStyle() : fgColour(), bgColour(0xff, 0xff, 0xff, 0), pattern(0), fgTransparency(0), bgTransparency(0), shadowFgColour(), - shadowPattern(0), shadowOffsetX(0), shadowOffsetY(0), qsFillColour(-1), qsShadowColour(-1) {} + shadowPattern(0), shadowOffsetX(0), shadowOffsetY(0), qsFillColour(-1), qsShadowColour(-1), qsFillMatrix(-1) {} VSDFillStyle(const Colour &fgc, const Colour &bgc, unsigned char p, double fga, double bga, const Colour &sfgc, - unsigned char shp, double shX, double shY, long qsFc, long qsSc) + unsigned char shp, double shX, double shY, long qsFc, long qsSc, long qsFm) : fgColour(fgc), bgColour(bgc), pattern(p), fgTransparency(fga), bgTransparency(bga), shadowFgColour(sfgc), shadowPattern(shp), shadowOffsetX(shX), shadowOffsetY(shY), - qsFillColour(qsFc), qsShadowColour(qsSc) {} + qsFillColour(qsFc), qsShadowColour(qsSc), qsFillMatrix(qsFm) {} VSDFillStyle(const VSDFillStyle &style) : fgColour(style.fgColour), bgColour(style.bgColour), pattern(style.pattern), fgTransparency(style.fgTransparency), bgTransparency(style.bgTransparency), shadowFgColour(style.shadowFgColour), shadowPattern(style.shadowPattern), shadowOffsetX(style.shadowOffsetX), shadowOffsetY(style.shadowOffsetY), qsFillColour(style.qsFillColour), - qsShadowColour(style.qsShadowColour) {} + qsShadowColour(style.qsShadowColour), qsFillMatrix(style.qsFillMatrix) {} ~VSDFillStyle() {} void override(const VSDOptionalFillStyle &style, const VSDXTheme *theme) { @@ -166,26 +182,21 @@ struct VSDFillStyle ASSIGN_OPTIONAL(style.shadowOffsetY, shadowOffsetY); ASSIGN_OPTIONAL(style.qsFillColour, qsFillColour); ASSIGN_OPTIONAL(style.qsShadowColour, qsShadowColour); + ASSIGN_OPTIONAL(style.qsFillMatrix, qsFillMatrix); if (theme) { if (!!style.qsFillColour && style.qsFillColour.get() >= 0) ASSIGN_OPTIONAL(theme->getThemeColour(style.qsFillColour.get()), fgColour); - ASSIGN_OPTIONAL(style.fgColour, fgColour); if (!!style.qsFillColour && style.qsFillColour.get() >= 0) ASSIGN_OPTIONAL(theme->getThemeColour(style.qsFillColour.get()), bgColour); - ASSIGN_OPTIONAL(style.bgColour, bgColour); if (!!style.qsShadowColour && style.qsShadowColour.get() >= 0) ASSIGN_OPTIONAL(theme->getThemeColour(style.qsShadowColour.get()), shadowFgColour); - ASSIGN_OPTIONAL(style.shadowFgColour, shadowFgColour); - } - else - { - ASSIGN_OPTIONAL(style.fgColour, fgColour); - ASSIGN_OPTIONAL(style.bgColour, bgColour); - ASSIGN_OPTIONAL(style.shadowFgColour, shadowFgColour); } + ASSIGN_OPTIONAL(style.fgColour, fgColour); + ASSIGN_OPTIONAL(style.bgColour, bgColour); + ASSIGN_OPTIONAL(style.shadowFgColour, shadowFgColour); } Colour fgColour; @@ -199,6 +210,7 @@ struct VSDFillStyle double shadowOffsetY; long qsFillColour; long qsShadowColour; + long qsFillMatrix; }; struct VSDOptionalCharStyle diff --git a/src/lib/VSDStylesCollector.cpp b/src/lib/VSDStylesCollector.cpp index 2ba74d0..c7ff44d 100644 --- a/src/lib/VSDStylesCollector.cpp +++ b/src/lib/VSDStylesCollector.cpp @@ -55,7 +55,8 @@ void libvisio::VSDStylesCollector::collectEllipse(unsigned /* id */, unsigned le void libvisio::VSDStylesCollector::collectLine(unsigned level, const boost::optional<double> & /* strokeWidth */, const boost::optional<Colour> & /* c */, const boost::optional<unsigned char> & /* linePattern */, const boost::optional<unsigned char> & /* startMarker */, const boost::optional<unsigned char> & /* endMarker */, - const boost::optional<unsigned char> & /* lineCap */, const boost::optional<double> & /* rounding */) + const boost::optional<unsigned char> & /* lineCap */, const boost::optional<double> & /* rounding */, + const boost::optional<long> & /* qsLineColour */, const boost::optional<long> & /* qsLineMatrix */) { _handleLevelChange(level); } @@ -65,7 +66,7 @@ void libvisio::VSDStylesCollector::collectFillAndShadow(unsigned level, const bo const boost::optional<double> & /* fillBGTransparency */, const boost::optional<unsigned char> & /* shadowPattern */, const boost::optional<Colour> & /* shfgc */, const boost::optional<double> & /* shadowOffsetX */, const boost::optional<double> & /* shadowOffsetY */, const boost::optional<long> & /* qsFillColour */, - const boost::optional<long> & /* qsShadowColour */) + const boost::optional<long> & /* qsShadowColour */, const boost::optional<long> & /* qsFillMatrix */) { _handleLevelChange(level); } @@ -339,7 +340,8 @@ void libvisio::VSDStylesCollector::collectStyleSheet(unsigned /* id */, unsigned void libvisio::VSDStylesCollector::collectLineStyle(unsigned level, const boost::optional<double> & /* strokeWidth */, const boost::optional<Colour> & /* c */, const boost::optional<unsigned char> & /* linePattern */, const boost::optional<unsigned char> & /* startMarker */, const boost::optional<unsigned char> & /* endMarker */, const boost::optional<unsigned char> & /* lineCap */, - const boost::optional<double> & /* rounding */) + const boost::optional<double> & /* rounding */, const boost::optional<long> & /* qsLineColour */, + const boost::optional<long> & /* qsLineMatrix */) { _handleLevelChange(level); } @@ -349,7 +351,7 @@ void libvisio::VSDStylesCollector::collectFillStyle(unsigned level, const boost: const boost::optional<double> & /* fillBGTransparency */, const boost::optional<unsigned char> & /* shadowPattern */, const boost::optional<Colour> & /* shfgc */, const boost::optional<double> & /* shadowOffsetX */, const boost::optional<double> & /* shadowOffsetY */, const boost::optional<long> & /* qsFillColour */, - const boost::optional<long> & /* qsShadowColour */) + const boost::optional<long> & /* qsShadowColour */, const boost::optional<long> & /* qsFillMatrix */) { _handleLevelChange(level); } diff --git a/src/lib/VSDStylesCollector.h b/src/lib/VSDStylesCollector.h index 1c2458c..16cf00d 100644 --- a/src/lib/VSDStylesCollector.h +++ b/src/lib/VSDStylesCollector.h @@ -42,12 +42,13 @@ public: void collectEllipse(unsigned id, unsigned level, double cx, double cy, double xleft, double yleft, double xtop, double ytop); void collectLine(unsigned level, const boost::optional<double> &strokeWidth, const boost::optional<Colour> &c, const boost::optional<unsigned char> &linePattern, const boost::optional<unsigned char> &startMarker, const boost::optional<unsigned char> &endMarker, - const boost::optional<unsigned char> &lineCap, const boost::optional<double> &rounding); + const boost::optional<unsigned char> &lineCap, const boost::optional<double> &rounding, + const boost::optional<long> &qsLineColour, const boost::optional<long> &qsLineMatrix); void collectFillAndShadow(unsigned level, const boost::optional<Colour> &colourFG, const boost::optional<Colour> &colourBG, const boost::optional<unsigned char> &fillPattern, const boost::optional<double> &fillFGTransparency, const boost::optional<double> &fillBGTransparency, const boost::optional<unsigned char> &shadowPattern, const boost::optional<Colour> &shfgc, const boost::optional<double> &shadowOffsetX, const boost::optional<double> &shadowOffsetY, - const boost::optional<long> &qsFc, const boost::optional<long> &qsSc); + const boost::optional<long> &qsFc, const boost::optional<long> &qsSc, const boost::optional<long> &qsLm); void collectFillAndShadow(unsigned level, const boost::optional<Colour> &colourFG, const boost::optional<Colour> &colourBG, const boost::optional<unsigned char> &fillPattern, const boost::optional<double> &fillFGTransparency, const boost::optional<double> &fillBGTransparency, const boost::optional<unsigned char> &shadowPattern, @@ -129,12 +130,14 @@ public: void collectStyleSheet(unsigned id, unsigned level,unsigned parentLineStyle, unsigned parentFillStyle, unsigned parentTextStyle); void collectLineStyle(unsigned level, const boost::optional<double> &strokeWidth, const boost::optional<Colour> &c, const boost::optional<unsigned char> &linePattern, const boost::optional<unsigned char> &startMarker, const boost::optional<unsigned char> &endMarker, - const boost::optional<unsigned char> &lineCap, const boost::optional<double> &rounding); + const boost::optional<unsigned char> &lineCap, const boost::optional<double> &rounding, + const boost::optional<long> &qsLineColour, const boost::optional<long> &qsLineMatrix); void collectFillStyle(unsigned level, const boost::optional<Colour> &colourFG, const boost::optional<Colour> &colourBG, const boost::optional<unsigned char> &fillPattern, const boost::optional<double> &fillFGTransparency, const boost::optional<double> &fillBGTransparency, const boost::optional<unsigned char> &shadowPattern, const boost::optional<Colour> &shfgc, const boost::optional<double> &shadowOffsetX, const boost::optional<double> &shadowOffsetY, - const boost::optional<long> &qsFillColour, const boost::optional<long> &qsShadowColour); + const boost::optional<long> &qsFillColour, const boost::optional<long> &qsShadowColour, + const boost::optional<long> &qsFillMatrix); void collectFillStyle(unsigned level, const boost::optional<Colour> &colourFG, const boost::optional<Colour> &colourBG, const boost::optional<unsigned char> &fillPattern, const boost::optional<double> &fillFGTransparency, const boost::optional<double> &fillBGTransparency, const boost::optional<unsigned char> &shadowPattern, diff --git a/src/lib/VSDXMLParserBase.cpp b/src/lib/VSDXMLParserBase.cpp index f6c531a..e06e3af 100644 --- a/src/lib/VSDXMLParserBase.cpp +++ b/src/lib/VSDXMLParserBase.cpp @@ -1763,12 +1763,13 @@ void libvisio::VSDXMLParserBase::_flushShape() m_collector->collectTxtXForm(m_currentShapeLevel+2, *(m_shape.m_txtxform)); m_collector->collectLine(m_currentShapeLevel+2, m_shape.m_lineStyle.width, m_shape.m_lineStyle.colour, m_shape.m_lineStyle.pattern, - m_shape.m_lineStyle.startMarker, m_shape.m_lineStyle.endMarker, m_shape.m_lineStyle.cap, m_shape.m_lineStyle.rounding); + m_shape.m_lineStyle.startMarker, m_shape.m_lineStyle.endMarker, m_shape.m_lineStyle.cap, m_shape.m_lineStyle.rounding, + m_shape.m_lineStyle.qsLineColour, m_shape.m_lineStyle.qsLineMatrix); m_collector->collectFillAndShadow(m_currentShapeLevel+2, m_shape.m_fillStyle.fgColour, m_shape.m_fillStyle.bgColour, m_shape.m_fillStyle.pattern, m_shape.m_fillStyle.fgTransparency, m_shape.m_fillStyle.bgTransparency, m_shape.m_fillStyle.shadowPattern, m_shape.m_fillStyle.shadowFgColour, m_shape.m_fillStyle.shadowOffsetX, m_shape.m_fillStyle.shadowOffsetY, - m_shape.m_fillStyle.qsFillColour, m_shape.m_fillStyle.qsShadowColour); + m_shape.m_fillStyle.qsFillColour, m_shape.m_fillStyle.qsShadowColour, m_shape.m_fillStyle.qsFillMatrix); m_collector->collectTextBlock(m_currentShapeLevel+2, m_shape.m_textBlockStyle.leftMargin, m_shape.m_textBlockStyle.rightMargin, m_shape.m_textBlockStyle.topMargin, m_shape.m_textBlockStyle.bottomMargin, m_shape.m_textBlockStyle.verticalAlign, diff --git a/src/lib/VSDXParser.cpp b/src/lib/VSDXParser.cpp index f9d5d61..26916b5 100644 --- a/src/lib/VSDXParser.cpp +++ b/src/lib/VSDXParser.cpp @@ -718,6 +718,8 @@ void libvisio::VSDXParser::readStyleProperties(xmlTextReaderPtr reader) boost::optional<unsigned char> startMarker; boost::optional<unsigned char> endMarker; boost::optional<unsigned char> lineCap; + boost::optional<long> qsLineColour; + boost::optional<long> qsLineMatrix; // Fill and shadow properties boost::optional<Colour> fillColourFG; @@ -732,6 +734,7 @@ void libvisio::VSDXParser::readStyleProperties(xmlTextReaderPtr reader) boost::optional<double> shadowOffsetY; boost::optional<long> qsFillColour; boost::optional<long> qsShadowColour; + boost::optional<long> qsFillMatrix; // Text block properties boost::optional<double> leftMargin; @@ -871,12 +874,11 @@ void libvisio::VSDXParser::readStyleProperties(xmlTextReaderPtr reader) break; case XML_QUICKSTYLELINECOLOR: if (XML_READER_TYPE_ELEMENT == tokenType) - { - long tmpValue; - ret = readLongData(tmpValue, reader); - if (!strokeColour) - strokeColour = m_currentTheme.getThemeColour((unsigned)tmpValue); - } + ret = readLongData(qsLineColour, reader); + break; + case XML_QUICKSTYLELINEMATRIX: + if (XML_READER_TYPE_ELEMENT == tokenType) + ret = readLongData(qsLineMatrix, reader); break; case XML_QUICKSTYLEFILLCOLOR: if (XML_READER_TYPE_ELEMENT == tokenType) @@ -886,6 +888,10 @@ void libvisio::VSDXParser::readStyleProperties(xmlTextReaderPtr reader) if (XML_READER_TYPE_ELEMENT == tokenType) ret = readLongData(qsShadowColour, reader); break; + case XML_QUICKSTYLEFILLMATRIX: + if (XML_READER_TYPE_ELEMENT == tokenType) + ret = readLongData(qsFillMatrix, reader); + break; default: break; } @@ -907,18 +913,21 @@ void libvisio::VSDXParser::readStyleProperties(xmlTextReaderPtr reader) if (m_isInStyles) { - m_collector->collectLineStyle(level, strokeWidth, strokeColour, linePattern, startMarker, endMarker, lineCap, rounding); + m_collector->collectLineStyle(level, strokeWidth, strokeColour, linePattern, startMarker, endMarker, lineCap, + rounding, qsLineColour, qsLineMatrix); m_collector->collectFillStyle(level, fillColourFG, fillColourBG, fillPattern, fillFGTransparency, - fillBGTransparency, shadowPattern, shadowColourFG, shadowOffsetX, shadowOffsetY, - qsFillColour, qsShadowColour); + fillBGTransparency, shadowPattern, shadowColourFG, shadowOffsetX, + shadowOffsetY, qsFillColour, qsShadowColour, qsFillMatrix); m_collector->collectTextBlockStyle(level, leftMargin, rightMargin, topMargin, bottomMargin, verticalAlign, bgClrId, bgColour, defaultTabStop, textDirection); } else { - m_shape.m_lineStyle.override(VSDOptionalLineStyle(strokeWidth, strokeColour, linePattern, startMarker, endMarker, lineCap, rounding)); - m_shape.m_fillStyle.override(VSDOptionalFillStyle(fillColourFG, fillColourBG, fillPattern, fillFGTransparency, fillBGTransparency, shadowColourFG, - shadowPattern, shadowOffsetX, shadowOffsetY, qsFillColour, qsShadowColour)); + m_shape.m_lineStyle.override(VSDOptionalLineStyle(strokeWidth, strokeColour, linePattern, startMarker, endMarker, lineCap, rounding, + qsLineColour, qsLineMatrix)); + m_shape.m_fillStyle.override(VSDOptionalFillStyle(fillColourFG, fillColourBG, fillPattern, fillFGTransparency, fillBGTransparency, + shadowColourFG, shadowPattern, shadowOffsetX, shadowOffsetY, + qsFillColour, qsShadowColour, qsFillMatrix)); m_shape.m_textBlockStyle.override(VSDOptionalTextBlockStyle(leftMargin, rightMargin, topMargin, bottomMargin, verticalAlign, !!bgClrId, bgColour, defaultTabStop, textDirection)); } @@ -1256,12 +1265,11 @@ void libvisio::VSDXParser::readShapeProperties(xmlTextReaderPtr reader) break; case XML_QUICKSTYLELINECOLOR: if (XML_READER_TYPE_ELEMENT == tokenType) - { - long tmpValue; - ret = readLongData(tmpValue, reader); - if (!m_shape.m_lineStyle.colour) - m_shape.m_lineStyle.colour = m_currentTheme.getThemeColour((unsigned)tmpValue); - } + ret = readLongData(m_shape.m_lineStyle.qsLineColour, reader); + break; + case XML_QUICKSTYLELINEMATRIX: + if (XML_READER_TYPE_ELEMENT == tokenType) + ret = readLongData(m_shape.m_lineStyle.qsLineMatrix, reader); break; case XML_QUICKSTYLEFILLCOLOR: if (XML_READER_TYPE_ELEMENT == tokenType) @@ -1271,6 +1279,10 @@ void libvisio::VSDXParser::readShapeProperties(xmlTextReaderPtr reader) if (XML_READER_TYPE_ELEMENT == tokenType) ret = readLongData(m_shape.m_fillStyle.qsShadowColour, reader); break; + case XML_QUICKSTYLEFILLMATRIX: + if (XML_READER_TYPE_ELEMENT == tokenType) + ret = readLongData(m_shape.m_fillStyle.qsFillMatrix, reader); + break; case XML_LAYERMEMBER: if (XML_READER_TYPE_ELEMENT == tokenType) ret = readStringData(m_shape.m_layerMem, reader); diff --git a/src/lib/tokens.txt b/src/lib/tokens.txt index 70d7042..661093c 100644 --- a/src/lib/tokens.txt +++ b/src/lib/tokens.txt @@ -69,7 +69,9 @@ Character Color ColorEntry Colors +ColorSchemeIndex Company +ConnectorSchemeIndex cp cp:category cp:coreProperties @@ -89,8 +91,10 @@ DefaultTabStop DoubleStrikethrough DrawingScale E +EffectSchemeIndex Ellipse EllipticalArcTo +EmbellishmentIndex EndArrow EndTrigger EndX @@ -108,6 +112,7 @@ FlipX FlipY Font FontScale +FontSchemeIndex Foreign ForeignData Geom @@ -213,6 +218,7 @@ TextBlock TextDirection TextPosAfterBullet TextXForm +ThemeIndex TopMargin tp TxtAngle @@ -222,6 +228,8 @@ TxtLocPinY TxtPinX TxtPinY TxtWidth +VariationColorIndex +VariationStyleIndex VerticalAlign Visible vt:bkgnd
_______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
