src/lib/CDRCollector.cpp | 3 src/lib/CDRCollector.h | 12 -- src/lib/CDRContentCollector.cpp | 215 +++++++++++++++++++--------------------- src/lib/CDRContentCollector.h | 12 +- src/lib/CDRParser.cpp | 107 +++++++++++++++---- src/lib/CDRParser.h | 5 src/lib/CDRStylesCollector.cpp | 13 -- src/lib/CDRStylesCollector.h | 9 - src/lib/CDRTypes.h | 18 +-- src/lib/CMXParser.cpp | 3 10 files changed, 212 insertions(+), 185 deletions(-)
New commits: commit 2f023df97fb8b3ddf0fb8590d4a13a1f3ef638be Author: Fridrich Å trba <fridrich.st...@bluewin.ch> Date: Sat Apr 13 21:53:02 2013 +0200 Change the way we pass around the line and fill styles diff --git a/src/lib/CDRCollector.cpp b/src/lib/CDRCollector.cpp index 0eca5eb..b4c0be8 100644 --- a/src/lib/CDRCollector.cpp +++ b/src/lib/CDRCollector.cpp @@ -33,8 +33,7 @@ #include "libcdr_utils.h" libcdr::CDRParserState::CDRParserState() - : m_fillStyles(), m_lineStyles(), m_bmps(), m_patterns(), m_vects(), m_pages(), - m_documentPalette(), m_texts(), + : m_bmps(), m_patterns(), m_vects(), m_pages(), m_documentPalette(), m_texts(), m_colorTransformCMYK2RGB(0), m_colorTransformLab2RGB(0), m_colorTransformRGB2RGB(0) { cmsHPROFILE tmpRGBProfile = cmsCreate_sRGBProfile(); diff --git a/src/lib/CDRCollector.h b/src/lib/CDRCollector.h index c81be10..ffbb08e 100644 --- a/src/lib/CDRCollector.h +++ b/src/lib/CDRCollector.h @@ -54,8 +54,6 @@ class CDRParserState public: CDRParserState(); ~CDRParserState(); - std::map<unsigned, CDRFillStyle> m_fillStyles; - std::map<unsigned, CDRLineStyle> m_lineStyles; std::map<unsigned, WPXBinaryData> m_bmps; std::map<unsigned, CDRPattern> m_patterns; std::map<unsigned, WPXBinaryData> m_vects; @@ -98,12 +96,10 @@ public: virtual void collectClosePath() = 0; virtual void collectLevel(unsigned level) = 0; virtual void collectTransform(const CDRTransforms &transforms, bool considerGroupTransform) = 0; - virtual void collectFildId(unsigned id) = 0; - virtual void collectOutlId(unsigned id) = 0; - virtual void collectFild(unsigned id, unsigned short fillType, const CDRColor &color1, const CDRColor &color2, const CDRGradient &gradient, const CDRImageFill &imageFill) = 0; - virtual void collectOutl(unsigned id, unsigned short lineType, unsigned short capsType, unsigned short joinType, double lineWidth, - double stretch, double angle, const CDRColor &color, const std::vector<unsigned> &dashArray, - unsigned startMarkerId, unsigned endMarkerId) = 0; + virtual void collectFillStyle(unsigned short fillType, const CDRColor &color1, const CDRColor &color2, const CDRGradient &gradient, const CDRImageFill &imageFill) = 0; + virtual void collectLineStyle(unsigned short lineType, unsigned short capsType, unsigned short joinType, double lineWidth, + double stretch, double angle, const CDRColor &color, const std::vector<unsigned> &dashArray, + unsigned startMarkerId, unsigned endMarkerId) = 0; virtual void collectRotate(double angle, double cx, double cy) = 0; virtual void collectFlags(unsigned flags, bool considerFlags) = 0; virtual void collectPageSize(double width, double height, double offsetX, double offsetY) = 0; diff --git a/src/lib/CDRContentCollector.cpp b/src/lib/CDRContentCollector.cpp index ea43090..a4fbbcd 100644 --- a/src/lib/CDRContentCollector.cpp +++ b/src/lib/CDRContentCollector.cpp @@ -50,7 +50,7 @@ libcdr::CDRContentCollector::CDRContentCollector(libcdr::CDRParserState &ps, libwpg::WPGPaintInterface *painter) : m_painter(painter), m_isPageProperties(false), m_isPageStarted(false), m_ignorePage(false), - m_page(ps.m_pages[0]), m_pageIndex(0), m_currentFildId(0), m_currentOutlId(0), m_spnd(0), + m_page(ps.m_pages[0]), m_pageIndex(0), m_currentFillStyle(), m_currentLineStyle(), m_spnd(0), m_currentObjectLevel(0), m_currentGroupLevel(0), m_currentVectLevel(0), m_currentPageLevel(0), m_currentImage(), m_currentText(0), m_currentBBox(), m_currentTextBox(), m_currentPath(), m_currentTransforms(), m_fillTransforms(), m_polygon(0), m_isInPolygon(false), m_isInSpline(false), @@ -108,8 +108,8 @@ void libcdr::CDRContentCollector::collectObject(unsigned level) if (!m_isPageStarted && !m_currentVectLevel && !m_ignorePage) _startPage(m_page.width, m_page.height); m_currentObjectLevel = level; - m_currentFildId = 0; - m_currentOutlId = 0; + m_currentFillStyle = CDRFillStyle(); + m_currentLineStyle = CDRLineStyle(); m_currentBBox = CDRBox(); } @@ -490,9 +490,8 @@ void libcdr::CDRContentCollector::_flushCurrentPath() spanProps.insert("fo:font-size", fontSize, WPX_POINT); if ((*m_currentText)[i].m_line[j].m_charStyle.m_fontName.len()) spanProps.insert("style:font-name", (*m_currentText)[i].m_line[j].m_charStyle.m_fontName); - std::map<unsigned, CDRFillStyle>::const_iterator iterFill = m_ps.m_fillStyles.find((*m_currentText)[i].m_line[j].m_charStyle.m_fillId); - if (iterFill != m_ps.m_fillStyles.end()) - spanProps.insert("fo:color", m_ps.getRGBColorString(iterFill->second.color1)); + if ((*m_currentText)[i].m_line[j].m_charStyle.m_fillStyle.fillType != (unsigned short)-1) + spanProps.insert("fo:color", m_ps.getRGBColorString((*m_currentText)[i].m_line[j].m_charStyle.m_fillStyle.color1)); outputElement.addStartTextSpan(spanProps); outputElement.addInsertText((*m_currentText)[i].m_line[j].m_text); outputElement.addEndTextSpan(); @@ -593,14 +592,16 @@ void libcdr::CDRContentCollector::collectLevel(unsigned level) } } -void libcdr::CDRContentCollector::collectFildId(unsigned id) +void libcdr::CDRContentCollector::collectFillStyle(unsigned short fillType, const CDRColor &color1, const CDRColor &color2, const CDRGradient &gradient, const CDRImageFill &imageFill) { - m_currentFildId = id; + m_currentFillStyle = CDRFillStyle(fillType, color1, color2, gradient, imageFill); } -void libcdr::CDRContentCollector::collectOutlId(unsigned id) +void libcdr::CDRContentCollector::collectLineStyle(unsigned short lineType, unsigned short capsType, unsigned short joinType, double lineWidth, + double stretch, double angle, const CDRColor &color, const std::vector<unsigned> &dashArray, + unsigned startMarkerId, unsigned endMarkerId) { - m_currentOutlId = id; + m_currentLineStyle = CDRLineStyle(lineType, capsType, joinType, lineWidth, stretch, angle, color, dashArray, startMarkerId, endMarkerId); } void libcdr::CDRContentCollector::collectRotate(double angle, double cx, double cy) @@ -634,43 +635,42 @@ void libcdr::CDRContentCollector::_fillProperties(WPXPropertyList &propList, WPX { if (m_fillOpacity < 1.0) propList.insert("draw:opacity", m_fillOpacity, WPX_PERCENT); - if (m_currentFildId == 0) + if (m_currentFillStyle.fillType == 0) propList.insert("draw:fill", "none"); else { - std::map<unsigned, CDRFillStyle>::iterator iter = m_ps.m_fillStyles.find(m_currentFildId); - if (iter == m_ps.m_fillStyles.end()) + if (m_currentFillStyle.fillType == (unsigned short)-1) propList.insert("draw:fill", "none"); else { - switch (iter->second.fillType) + switch (m_currentFillStyle.fillType) { case 1: // Solid propList.insert("draw:fill", "solid"); - propList.insert("draw:fill-color", m_ps.getRGBColorString(iter->second.color1)); + propList.insert("draw:fill-color", m_ps.getRGBColorString(m_currentFillStyle.color1)); propList.insert("svg:fill-rule", "evenodd"); break; case 2: // Gradient - if (iter->second.gradient.m_stops.empty()) + if (m_currentFillStyle.gradient.m_stops.empty()) propList.insert("draw:fill", "none"); - else if (iter->second.gradient.m_stops.size() == 1) + else if (m_currentFillStyle.gradient.m_stops.size() == 1) { propList.insert("draw:fill", "solid"); - propList.insert("draw:fill-color", m_ps.getRGBColorString(iter->second.gradient.m_stops[0].m_color)); + propList.insert("draw:fill-color", m_ps.getRGBColorString(m_currentFillStyle.gradient.m_stops[0].m_color)); propList.insert("svg:fill-rule", "evenodd"); } - else if (iter->second.gradient.m_stops.size() == 2) + else if (m_currentFillStyle.gradient.m_stops.size() == 2) { - double angle = iter->second.gradient.m_angle; + double angle = m_currentFillStyle.gradient.m_angle; while (angle < 0.0) angle += 360.0; while (angle > 360.0) angle -= 360.0; propList.insert("draw:fill", "gradient"); - propList.insert("draw:start-color", m_ps.getRGBColorString(iter->second.gradient.m_stops[0].m_color)); - propList.insert("draw:end-color", m_ps.getRGBColorString(iter->second.gradient.m_stops[1].m_color)); + propList.insert("draw:start-color", m_ps.getRGBColorString(m_currentFillStyle.gradient.m_stops[0].m_color)); + propList.insert("draw:end-color", m_ps.getRGBColorString(m_currentFillStyle.gradient.m_stops[1].m_color)); propList.insert("draw:angle", (int)angle); - switch (iter->second.gradient.m_type) + switch (m_currentFillStyle.gradient.m_type) { case 1: // linear case 3: // conical @@ -681,19 +681,19 @@ void libcdr::CDRContentCollector::_fillProperties(WPXPropertyList &propList, WPX while (angle > 360.0) angle -= 360.0; propList.insert("draw:angle", (int)angle); - propList.insert("draw:border", (double)(iter->second.gradient.m_edgeOffset)/100.0, WPX_PERCENT); + propList.insert("draw:border", (double)(m_currentFillStyle.gradient.m_edgeOffset)/100.0, WPX_PERCENT); break; case 2: // radial - propList.insert("draw:border", (2.0 * (double)(iter->second.gradient.m_edgeOffset)/100.0), WPX_PERCENT); + propList.insert("draw:border", (2.0 * (double)(m_currentFillStyle.gradient.m_edgeOffset)/100.0), WPX_PERCENT); propList.insert("draw:style", "radial"); - propList.insert("svg:cx", (double)(0.5 + iter->second.gradient.m_centerXOffset/200.0), WPX_PERCENT); - propList.insert("svg:cy", (double)(0.5 + iter->second.gradient.m_centerXOffset/200.0), WPX_PERCENT); + propList.insert("svg:cx", (double)(0.5 + m_currentFillStyle.gradient.m_centerXOffset/200.0), WPX_PERCENT); + propList.insert("svg:cy", (double)(0.5 + m_currentFillStyle.gradient.m_centerXOffset/200.0), WPX_PERCENT); break; case 4: // square - propList.insert("draw:border", (2.0 * (double)(iter->second.gradient.m_edgeOffset)/100.0), WPX_PERCENT); + propList.insert("draw:border", (2.0 * (double)(m_currentFillStyle.gradient.m_edgeOffset)/100.0), WPX_PERCENT); propList.insert("draw:style", "square"); - propList.insert("svg:cx", (double)(0.5 + iter->second.gradient.m_centerXOffset/200.0), WPX_PERCENT); - propList.insert("svg:cy", (double)(0.5 + iter->second.gradient.m_centerXOffset/200.0), WPX_PERCENT); + propList.insert("svg:cx", (double)(0.5 + m_currentFillStyle.gradient.m_centerXOffset/200.0), WPX_PERCENT); + propList.insert("svg:cy", (double)(0.5 + m_currentFillStyle.gradient.m_centerXOffset/200.0), WPX_PERCENT); break; default: propList.insert("draw:style", "linear"); @@ -703,9 +703,9 @@ void libcdr::CDRContentCollector::_fillProperties(WPXPropertyList &propList, WPX while (angle > 360.0) angle -= 360.0; propList.insert("draw:angle", (int)angle); - for (unsigned i = 0; i < iter->second.gradient.m_stops.size(); i++) + for (unsigned i = 0; i < m_currentFillStyle.gradient.m_stops.size(); i++) { - libcdr::CDRGradientStop &gradStop = iter->second.gradient.m_stops[i]; + libcdr::CDRGradientStop &gradStop = m_currentFillStyle.gradient.m_stops[i]; WPXPropertyList stopElement; stopElement.insert("svg:offset", gradStop.m_offset, WPX_PERCENT); stopElement.insert("svg:stop-color", m_ps.getRGBColorString(gradStop.m_color)); @@ -719,16 +719,16 @@ void libcdr::CDRContentCollector::_fillProperties(WPXPropertyList &propList, WPX { propList.insert("draw:fill", "gradient"); propList.insert("draw:style", "linear"); - double angle = iter->second.gradient.m_angle; + double angle = m_currentFillStyle.gradient.m_angle; angle += 90.0; while (angle < 0.0) angle += 360.0; while (angle > 360.0) angle -= 360.0; propList.insert("draw:angle", (int)angle); - for (unsigned i = 0; i < iter->second.gradient.m_stops.size(); i++) + for (unsigned i = 0; i < m_currentFillStyle.gradient.m_stops.size(); i++) { - libcdr::CDRGradientStop &gradStop = iter->second.gradient.m_stops[i]; + libcdr::CDRGradientStop &gradStop = m_currentFillStyle.gradient.m_stops[i]; WPXPropertyList stopElement; stopElement.insert("svg:offset", gradStop.m_offset, WPX_PERCENT); stopElement.insert("svg:stop-color", m_ps.getRGBColorString(gradStop.m_color)); @@ -739,15 +739,15 @@ void libcdr::CDRContentCollector::_fillProperties(WPXPropertyList &propList, WPX break; case 7: // Pattern { - std::map<unsigned, CDRPattern>::iterator iterPattern = m_ps.m_patterns.find(iter->second.imageFill.id); + std::map<unsigned, CDRPattern>::iterator iterPattern = m_ps.m_patterns.find(m_currentFillStyle.imageFill.id); if (iterPattern != m_ps.m_patterns.end()) { propList.insert("draw:fill", "bitmap"); WPXBinaryData image; - _generateBitmapFromPattern(image, iterPattern->second, iter->second.color1, iter->second.color2); + _generateBitmapFromPattern(image, iterPattern->second, m_currentFillStyle.color1, m_currentFillStyle.color2); #if DUMP_PATTERN WPXString filename; - filename.sprintf("pattern%.8x.bmp", iter->second.imageFill.id); + filename.sprintf("pattern%.8x.bmp", m_currentFillStyle.imageFill.id); FILE *f = fopen(filename.cstr(), "wb"); if (f) { @@ -760,36 +760,36 @@ void libcdr::CDRContentCollector::_fillProperties(WPXPropertyList &propList, WPX propList.insert("draw:fill-image", image.getBase64Data()); propList.insert("libwpg:mime-type", "image/bmp"); propList.insert("style:repeat", "repeat"); - if (iter->second.imageFill.isRelative) + if (m_currentFillStyle.imageFill.isRelative) { - propList.insert("svg:width", iter->second.imageFill.width, WPX_PERCENT); - propList.insert("svg:height", iter->second.imageFill.height, WPX_PERCENT); + propList.insert("svg:width", m_currentFillStyle.imageFill.width, WPX_PERCENT); + propList.insert("svg:height", m_currentFillStyle.imageFill.height, WPX_PERCENT); } else { double scaleX = 1.0; double scaleY = 1.0; - if (iter->second.imageFill.flags & 0x04) // scale fill with image + if (m_currentFillStyle.imageFill.flags & 0x04) // scale fill with image { scaleX = m_currentTransforms.getScaleX(); scaleY = m_currentTransforms.getScaleY(); } - propList.insert("svg:width", iter->second.imageFill.width * scaleX); - propList.insert("svg:height", iter->second.imageFill.height * scaleY); + propList.insert("svg:width", m_currentFillStyle.imageFill.width * scaleX); + propList.insert("svg:height", m_currentFillStyle.imageFill.height * scaleY); } propList.insert("draw:fill-image-ref-point", "bottom-left"); - if (iter->second.imageFill.isRelative) + if (m_currentFillStyle.imageFill.isRelative) { - if (iter->second.imageFill.xOffset != 0.0 && iter->second.imageFill.xOffset != 1.0) - propList.insert("draw:fill-image-ref-point-x", iter->second.imageFill.xOffset, WPX_PERCENT); - if (iter->second.imageFill.yOffset != 0.0 && iter->second.imageFill.yOffset != 1.0) - propList.insert("draw:fill-image-ref-point-y", iter->second.imageFill.yOffset, WPX_PERCENT); + if (m_currentFillStyle.imageFill.xOffset != 0.0 && m_currentFillStyle.imageFill.xOffset != 1.0) + propList.insert("draw:fill-image-ref-point-x", m_currentFillStyle.imageFill.xOffset, WPX_PERCENT); + if (m_currentFillStyle.imageFill.yOffset != 0.0 && m_currentFillStyle.imageFill.yOffset != 1.0) + propList.insert("draw:fill-image-ref-point-y", m_currentFillStyle.imageFill.yOffset, WPX_PERCENT); } else { if (m_fillTransforms.getTranslateX() != 0.0) { - double xOffset = m_fillTransforms.getTranslateX() / iter->second.imageFill.width; + double xOffset = m_fillTransforms.getTranslateX() / m_currentFillStyle.imageFill.width; while (xOffset < 0.0) xOffset += 1.0; while (xOffset > 1.0) @@ -798,7 +798,7 @@ void libcdr::CDRContentCollector::_fillProperties(WPXPropertyList &propList, WPX } if (m_fillTransforms.getTranslateY() != 0.0) { - double yOffset = m_fillTransforms.getTranslateY() / iter->second.imageFill.width; + double yOffset = m_fillTransforms.getTranslateY() / m_currentFillStyle.imageFill.width; while (yOffset < 0.0) yOffset += 1.0; while (yOffset > 1.0) @@ -811,7 +811,7 @@ void libcdr::CDRContentCollector::_fillProperties(WPXPropertyList &propList, WPX { // We did not find the pattern, so fill solid with the background colour propList.insert("draw:fill", "solid"); - propList.insert("draw:fill-color", m_ps.getRGBColorString(iter->second.color2)); + propList.insert("draw:fill-color", m_ps.getRGBColorString(m_currentFillStyle.color2)); propList.insert("svg:fill-rule", "evenodd"); } } @@ -819,43 +819,43 @@ void libcdr::CDRContentCollector::_fillProperties(WPXPropertyList &propList, WPX case 9: // Bitmap case 11: // Texture { - std::map<unsigned, WPXBinaryData>::iterator iterBmp = m_ps.m_bmps.find(iter->second.imageFill.id); + std::map<unsigned, WPXBinaryData>::iterator iterBmp = m_ps.m_bmps.find(m_currentFillStyle.imageFill.id); if (iterBmp != m_ps.m_bmps.end()) { propList.insert("libwpg:mime-type", "image/bmp"); propList.insert("draw:fill", "bitmap"); propList.insert("draw:fill-image", iterBmp->second.getBase64Data()); propList.insert("style:repeat", "repeat"); - if (iter->second.imageFill.isRelative) + if (m_currentFillStyle.imageFill.isRelative) { - propList.insert("svg:width", iter->second.imageFill.width, WPX_PERCENT); - propList.insert("svg:height", iter->second.imageFill.height, WPX_PERCENT); + propList.insert("svg:width", m_currentFillStyle.imageFill.width, WPX_PERCENT); + propList.insert("svg:height", m_currentFillStyle.imageFill.height, WPX_PERCENT); } else { double scaleX = 1.0; double scaleY = 1.0; - if (iter->second.imageFill.flags & 0x04) // scale fill with image + if (m_currentFillStyle.imageFill.flags & 0x04) // scale fill with image { scaleX = m_currentTransforms.getScaleX(); scaleY = m_currentTransforms.getScaleY(); } - propList.insert("svg:width", iter->second.imageFill.width * scaleX); - propList.insert("svg:height", iter->second.imageFill.height * scaleY); + propList.insert("svg:width", m_currentFillStyle.imageFill.width * scaleX); + propList.insert("svg:height", m_currentFillStyle.imageFill.height * scaleY); } propList.insert("draw:fill-image-ref-point", "bottom-left"); - if (iter->second.imageFill.isRelative) + if (m_currentFillStyle.imageFill.isRelative) { - if (iter->second.imageFill.xOffset != 0.0 && iter->second.imageFill.xOffset != 1.0) - propList.insert("draw:fill-image-ref-point-x", iter->second.imageFill.xOffset, WPX_PERCENT); - if (iter->second.imageFill.yOffset != 0.0 && iter->second.imageFill.yOffset != 1.0) - propList.insert("draw:fill-image-ref-point-y", iter->second.imageFill.yOffset, WPX_PERCENT); + if (m_currentFillStyle.imageFill.xOffset != 0.0 && m_currentFillStyle.imageFill.xOffset != 1.0) + propList.insert("draw:fill-image-ref-point-x", m_currentFillStyle.imageFill.xOffset, WPX_PERCENT); + if (m_currentFillStyle.imageFill.yOffset != 0.0 && m_currentFillStyle.imageFill.yOffset != 1.0) + propList.insert("draw:fill-image-ref-point-y", m_currentFillStyle.imageFill.yOffset, WPX_PERCENT); } else { if (m_fillTransforms.getTranslateX() != 0.0) { - double xOffset = m_fillTransforms.getTranslateX() / iter->second.imageFill.width; + double xOffset = m_fillTransforms.getTranslateX() / m_currentFillStyle.imageFill.width; while (xOffset < 0.0) xOffset += 1.0; while (xOffset > 1.0) @@ -864,7 +864,7 @@ void libcdr::CDRContentCollector::_fillProperties(WPXPropertyList &propList, WPX } if (m_fillTransforms.getTranslateY() != 0.0) { - double yOffset = m_fillTransforms.getTranslateY() / iter->second.imageFill.width; + double yOffset = m_fillTransforms.getTranslateY() / m_currentFillStyle.imageFill.width; while (yOffset < 0.0) yOffset += 1.0; while (yOffset > 1.0) @@ -879,43 +879,43 @@ void libcdr::CDRContentCollector::_fillProperties(WPXPropertyList &propList, WPX break; case 10: // Full color { - std::map<unsigned, WPXBinaryData>::iterator iterVect = m_ps.m_vects.find(iter->second.imageFill.id); + std::map<unsigned, WPXBinaryData>::iterator iterVect = m_ps.m_vects.find(m_currentFillStyle.imageFill.id); if (iterVect != m_ps.m_vects.end()) { propList.insert("draw:fill", "bitmap"); propList.insert("libwpg:mime-type", "image/svg+xml"); propList.insert("draw:fill-image", iterVect->second.getBase64Data()); propList.insert("style:repeat", "repeat"); - if (iter->second.imageFill.isRelative) + if (m_currentFillStyle.imageFill.isRelative) { - propList.insert("svg:width", iter->second.imageFill.width, WPX_PERCENT); - propList.insert("svg:height", iter->second.imageFill.height, WPX_PERCENT); + propList.insert("svg:width", m_currentFillStyle.imageFill.width, WPX_PERCENT); + propList.insert("svg:height", m_currentFillStyle.imageFill.height, WPX_PERCENT); } else { double scaleX = 1.0; double scaleY = 1.0; - if (iter->second.imageFill.flags & 0x04) // scale fill with image + if (m_currentFillStyle.imageFill.flags & 0x04) // scale fill with image { scaleX = m_currentTransforms.getScaleX(); scaleY = m_currentTransforms.getScaleY(); } - propList.insert("svg:width", iter->second.imageFill.width * scaleX); - propList.insert("svg:height", iter->second.imageFill.height * scaleY); + propList.insert("svg:width", m_currentFillStyle.imageFill.width * scaleX); + propList.insert("svg:height", m_currentFillStyle.imageFill.height * scaleY); } propList.insert("draw:fill-image-ref-point", "bottom-left"); - if (iter->second.imageFill.isRelative) + if (m_currentFillStyle.imageFill.isRelative) { - if (iter->second.imageFill.xOffset != 0.0 && iter->second.imageFill.xOffset != 1.0) - propList.insert("draw:fill-image-ref-point-x", iter->second.imageFill.xOffset, WPX_PERCENT); - if (iter->second.imageFill.yOffset != 0.0 && iter->second.imageFill.yOffset != 1.0) - propList.insert("draw:fill-image-ref-point-y", iter->second.imageFill.yOffset, WPX_PERCENT); + if (m_currentFillStyle.imageFill.xOffset != 0.0 && m_currentFillStyle.imageFill.xOffset != 1.0) + propList.insert("draw:fill-image-ref-point-x", m_currentFillStyle.imageFill.xOffset, WPX_PERCENT); + if (m_currentFillStyle.imageFill.yOffset != 0.0 && m_currentFillStyle.imageFill.yOffset != 1.0) + propList.insert("draw:fill-image-ref-point-y", m_currentFillStyle.imageFill.yOffset, WPX_PERCENT); } else { if (m_fillTransforms.getTranslateX() != 0.0) { - double xOffset = m_fillTransforms.getTranslateX() / iter->second.imageFill.width; + double xOffset = m_fillTransforms.getTranslateX() / m_currentFillStyle.imageFill.width; while (xOffset < 0.0) xOffset += 1.0; while (xOffset > 1.0) @@ -924,7 +924,7 @@ void libcdr::CDRContentCollector::_fillProperties(WPXPropertyList &propList, WPX } if (m_fillTransforms.getTranslateY() != 0.0) { - double yOffset = m_fillTransforms.getTranslateY() / iter->second.imageFill.width; + double yOffset = m_fillTransforms.getTranslateY() / m_currentFillStyle.imageFill.width; while (yOffset < 0.0) yOffset += 1.0; while (yOffset > 1.0) @@ -947,7 +947,7 @@ void libcdr::CDRContentCollector::_fillProperties(WPXPropertyList &propList, WPX void libcdr::CDRContentCollector::_lineProperties(WPXPropertyList &propList) { - if (m_currentOutlId == 0) + if (m_currentLineStyle.lineType == (unsigned short)-1) { propList.insert("draw:stroke", "solid"); propList.insert("svg:stroke-width", 0.0); @@ -955,34 +955,27 @@ void libcdr::CDRContentCollector::_lineProperties(WPXPropertyList &propList) } else { - std::map<unsigned, CDRLineStyle>::iterator iter = m_ps.m_lineStyles.find(m_currentOutlId); - if (iter == m_ps.m_lineStyles.end()) - { - propList.insert("draw:stroke", "solid"); - propList.insert("svg:stroke-width", 0.0); - propList.insert("svg:stroke-color", "#000000"); - } - else if (iter->second.lineType & 0x1) + if (m_currentLineStyle.lineType & 0x1) propList.insert("draw:stroke", "none"); - else if (iter->second.lineType & 0x6) + else if (m_currentLineStyle.lineType & 0x6) { - if (iter->second.dashArray.size() && (iter->second.lineType & 0x4)) + if (m_currentLineStyle.dashArray.size() && (m_currentLineStyle.lineType & 0x4)) propList.insert("draw:stroke", "dash"); else propList.insert("draw:stroke", "solid"); double scale = 1.0; - if (iter->second.lineType & 0x20) // scale line with image + if (m_currentLineStyle.lineType & 0x20) // scale line with image { scale = m_currentTransforms.getScaleX(); double scaleY = m_currentTransforms.getScaleY(); if (scaleY > scale) scale = scaleY; } - scale *= iter->second.stretch; - propList.insert("svg:stroke-width", iter->second.lineWidth * scale); - propList.insert("svg:stroke-color", m_ps.getRGBColorString(iter->second.color)); + scale *= m_currentLineStyle.stretch; + propList.insert("svg:stroke-width", m_currentLineStyle.lineWidth * scale); + propList.insert("svg:stroke-color", m_ps.getRGBColorString(m_currentLineStyle.color)); - switch (iter->second.capsType) + switch (m_currentLineStyle.capsType) { case 1: propList.insert("svg:stroke-linecap", "round"); @@ -994,7 +987,7 @@ void libcdr::CDRContentCollector::_lineProperties(WPXPropertyList &propList) propList.insert("svg:stroke-linecap", "butt"); } - switch (iter->second.joinType) + switch (m_currentLineStyle.joinType) { case 1: propList.insert("svg:stroke-linejoin", "round"); @@ -1006,7 +999,7 @@ void libcdr::CDRContentCollector::_lineProperties(WPXPropertyList &propList) propList.insert("svg:stroke-linejoin", "miter"); } - if (iter->second.dashArray.size()) + if (m_currentLineStyle.dashArray.size()) { int dots1 = 0; int dots2 = 0; @@ -1014,35 +1007,35 @@ void libcdr::CDRContentCollector::_lineProperties(WPXPropertyList &propList) unsigned dots2len = 0; unsigned gap = 0; - if (iter->second.dashArray.size() >= 2) + if (m_currentLineStyle.dashArray.size() >= 2) { - dots1len = iter->second.dashArray[0]; - gap = iter->second.dashArray[1]; + dots1len = m_currentLineStyle.dashArray[0]; + gap = m_currentLineStyle.dashArray[1]; } - unsigned long count = iter->second.dashArray.size() / 2; + unsigned long count = m_currentLineStyle.dashArray.size() / 2; unsigned i = 0; for (; i < count;) { - if (dots1len == iter->second.dashArray[2*i]) + if (dots1len == m_currentLineStyle.dashArray[2*i]) dots1++; else break; - gap = gap < iter->second.dashArray[2*i+1] ? iter->second.dashArray[2*i+1] : gap; + gap = gap < m_currentLineStyle.dashArray[2*i+1] ? m_currentLineStyle.dashArray[2*i+1] : gap; i++; } if (i < count) { - dots2len = iter->second.dashArray[2*i]; - gap = gap < iter->second.dashArray[2*i+1] ? iter->second.dashArray[2*i+1] : gap; + dots2len = m_currentLineStyle.dashArray[2*i]; + gap = gap < m_currentLineStyle.dashArray[2*i+1] ? m_currentLineStyle.dashArray[2*i+1] : gap; } for (; i < count;) { - if (dots2len == iter->second.dashArray[2*i]) + if (dots2len == m_currentLineStyle.dashArray[2*i]) dots2++; else break; - gap = gap < iter->second.dashArray[2*i+1] ? iter->second.dashArray[2*i+1] : gap; + gap = gap < m_currentLineStyle.dashArray[2*i+1] ? m_currentLineStyle.dashArray[2*i+1] : gap; i++; } if (!dots2) @@ -1051,10 +1044,10 @@ void libcdr::CDRContentCollector::_lineProperties(WPXPropertyList &propList) dots2len = dots1len; } propList.insert("draw:dots1", dots1); - propList.insert("draw:dots1-length", 72.0*(iter->second.lineWidth * scale)*dots1len, WPX_POINT); + propList.insert("draw:dots1-length", 72.0*(m_currentLineStyle.lineWidth * scale)*dots1len, WPX_POINT); propList.insert("draw:dots2", dots2); - propList.insert("draw:dots2-length", 72.0*(iter->second.lineWidth * scale)*dots2len, WPX_POINT); - propList.insert("draw:distance", 72.0*(iter->second.lineWidth * scale)*gap, WPX_POINT); + propList.insert("draw:dots2-length", 72.0*(m_currentLineStyle.lineWidth * scale)*dots2len, WPX_POINT); + propList.insert("draw:distance", 72.0*(m_currentLineStyle.lineWidth * scale)*gap, WPX_POINT); } } else diff --git a/src/lib/CDRContentCollector.h b/src/lib/CDRContentCollector.h index 5a53418..5bca65f 100644 --- a/src/lib/CDRContentCollector.h +++ b/src/lib/CDRContentCollector.h @@ -63,11 +63,10 @@ public: void collectClosePath(); void collectLevel(unsigned level); void collectTransform(const CDRTransforms &transforms, bool considerGroupTransform); - void collectFildId(unsigned id); - void collectOutlId(unsigned id); - void collectFild(unsigned, unsigned short, const CDRColor &, const CDRColor &, const CDRGradient &, const CDRImageFill &) {} - void collectOutl(unsigned, unsigned short, unsigned short, unsigned short, double, double, double, const CDRColor &, - const std::vector<unsigned> &, unsigned, unsigned) {} + void collectFillStyle(unsigned short fillType, const CDRColor &color1, const CDRColor &color2, const CDRGradient &gradient, const CDRImageFill &imageFill); + void collectLineStyle(unsigned short lineType, unsigned short capsType, unsigned short joinType, double lineWidth, + double stretch, double angle, const CDRColor &color, const std::vector<unsigned> &dashArray, + unsigned startMarkerId, unsigned endMarkerId); void collectRotate(double angle, double cx, double cy); void collectFlags(unsigned flags, bool considerFlags); void collectPageSize(double, double, double, double) {} @@ -113,7 +112,8 @@ private: CDRPage m_page; unsigned m_pageIndex; - unsigned m_currentFildId, m_currentOutlId; + CDRFillStyle m_currentFillStyle; + CDRLineStyle m_currentLineStyle; unsigned m_spnd; unsigned m_currentObjectLevel, m_currentGroupLevel, m_currentVectLevel, m_currentPageLevel; CDRImage m_currentImage; diff --git a/src/lib/CDRParser.cpp b/src/lib/CDRParser.cpp index 604a98c..35b0393 100644 --- a/src/lib/CDRParser.cpp +++ b/src/lib/CDRParser.cpp @@ -205,9 +205,8 @@ static void _readX6StyleString(WPXInputStream *input, unsigned length, libcdr::C } // anonymous namespace libcdr::CDRParser::CDRParser(const std::vector<WPXInputStream *> &externalStreams, libcdr::CDRCollector *collector) - : CommonParser(collector), - m_externalStreams(externalStreams), m_fonts(), - m_version(0), m_fillId(0), m_outlId(0) {} + : CommonParser(collector), m_externalStreams(externalStreams), + m_fonts(), m_fillStyles(), m_lineStyles(), m_version(0) {} libcdr::CDRParser::~CDRParser() { @@ -1513,8 +1512,7 @@ void libcdr::CDRParser::readWaldoOutl(WPXInputStream *input) unsigned short capsType = readU16(input); unsigned startMarkerId = readU32(input); unsigned endMarkerId = readU32(input); - m_collector->collectOutl(++m_outlId, lineType, capsType, joinType, lineWidth, stretch, angle, color, dashArray, startMarkerId, endMarkerId); - m_collector->collectOutlId(m_outlId); + m_collector->collectLineStyle(lineType, capsType, joinType, lineWidth, stretch, angle, color, dashArray, startMarkerId, endMarkerId); } void libcdr::CDRParser::readWaldoFill(WPXInputStream *input) @@ -1607,8 +1605,7 @@ void libcdr::CDRParser::readWaldoFill(WPXInputStream *input) default: break; } - m_collector->collectFild(++m_fillId, fillType, color1, color2, gradient, imageFill); - m_collector->collectFildId(m_fillId); + m_collector->collectFillStyle(fillType, color1, color2, gradient, imageFill); } void libcdr::CDRParser::readTrfd(WPXInputStream *input, unsigned length) @@ -1958,7 +1955,7 @@ void libcdr::CDRParser::readFild(WPXInputStream *input, unsigned length) default: break; } - m_collector->collectFild(fillId, fillType, color1, color2, gradient, imageFill); + m_fillStyles[fillId] = CDRFillStyle(fillType, color1, color2, gradient, imageFill); } void libcdr::CDRParser::readOutl(WPXInputStream *input, unsigned length) @@ -2007,7 +2004,7 @@ void libcdr::CDRParser::readOutl(WPXInputStream *input, unsigned length) input->seek(fixPosition + 22, WPX_SEEK_SET); unsigned startMarkerId = readU32(input); unsigned endMarkerId = readU32(input); - m_collector->collectOutl(lineId, lineType, capsType, joinType, lineWidth, stretch, angle, color, dashArray, startMarkerId, endMarkerId); + m_lineStyles[lineId] = CDRLineStyle(lineType, capsType, joinType, lineWidth, stretch, angle, color, dashArray, startMarkerId, endMarkerId); } void libcdr::CDRParser::readLoda(WPXInputStream *input, unsigned length) @@ -2059,14 +2056,27 @@ void libcdr::CDRParser::readLoda(WPXInputStream *input, unsigned length) if (m_version < 400) readWaldoFill(input); else - m_collector->collectFildId(readU32(input)); + { + unsigned fillId = readU32(input); + std::map<unsigned, CDRFillStyle>::const_iterator iter = m_fillStyles.find(fillId); + if (iter != m_fillStyles.end()) + m_collector->collectFillStyle(iter->second.fillType, iter->second.color1, iter->second.color2, + iter->second.gradient, iter->second.imageFill); + } } else if (argTypes[i] == 0x0a) { if (m_version < 400) readWaldoOutl(input); else - m_collector->collectOutlId(readU32(input)); + { + unsigned outlId = readU32(input); + std::map<unsigned, CDRLineStyle>::const_iterator iter = m_lineStyles.find(outlId); + if (iter != m_lineStyles.end()) + m_collector->collectLineStyle(iter->second.lineType, iter->second.capsType, iter->second.joinType, iter->second.lineWidth, + iter->second.stretch, iter->second.angle, iter->second.color, iter->second.dashArray, + iter->second.startMarkerId, iter->second.endMarkerId); + } } else if (argTypes[i] == 0x2af8) readPolygonTransform(input); @@ -2709,16 +2719,24 @@ void libcdr::CDRParser::readStlt(WPXInputStream *input, unsigned length) unsigned fillId = iter->second.fillId; if (fillId) { - std::map<unsigned, unsigned>::const_iterator iterFill = fillIds.find(fillId); - if (iterFill != fillIds.end()) - tmpCharStyle.m_fillId = iterFill->second; + std::map<unsigned, unsigned>::const_iterator iterFillId = fillIds.find(fillId); + if (iterFillId != fillIds.end()) + { + std::map<unsigned, CDRFillStyle>::const_iterator iterFillStyle = m_fillStyles.find(iterFillId->second); + if (iterFillStyle != m_fillStyles.end()) + tmpCharStyle.m_fillStyle = iterFillStyle->second; + } } unsigned outlId = iter->second.outlId; if (outlId) { - std::map<unsigned, unsigned>::const_iterator iterOutl = outlIds.find(outlId); - if (iterOutl != outlIds.end()) - tmpCharStyle.m_outlId = iterOutl->second; + std::map<unsigned, unsigned>::const_iterator iterOutlId = outlIds.find(outlId); + if (iterOutlId != outlIds.end()) + { + std::map<unsigned, CDRLineStyle>::const_iterator iterLineStyle = m_lineStyles.find(iterOutlId->second); + if (iterLineStyle != m_lineStyles.end()) + tmpCharStyle.m_lineStyle = iterLineStyle->second; + } } unsigned parentId = iter->second.parentId; if (parentId) @@ -2853,13 +2871,20 @@ void libcdr::CDRParser::readTxsm(WPXInputStream *input, unsigned length) input->seek(4, WPX_SEEK_CUR); if (fl2&0x40) // Font Colour { - charStyle.m_fillId = readU32(input); + unsigned fillId = readU32(input); + std::map<unsigned, CDRFillStyle>::const_iterator iter = m_fillStyles.find(fillId); + if (iter != m_fillStyles.end()) + charStyle.m_fillStyle = iter->second; if (m_version >= 1500) input->seek(48, WPX_SEEK_CUR); } if (fl2&0x80) // Font Outl Colour - charStyle.m_outlId = readU32(input); - + { + unsigned outlId = readU32(input); + std::map<unsigned, CDRLineStyle>::const_iterator iter = m_lineStyles.find(outlId); + if (iter != m_lineStyles.end()) + charStyle.m_lineStyle = iter->second; + } if (fl3&8) // Encoding { if (m_version >= 1300) @@ -3053,9 +3078,19 @@ void libcdr::CDRParser::readTxsm6(WPXInputStream *input) input->seek(4, WPX_SEEK_CUR); input->seek(44, WPX_SEEK_CUR); if (flag&0x10) - charStyle.m_fillId = readU32(input); + { + unsigned fillId = readU32(input); + std::map<unsigned, CDRFillStyle>::const_iterator iter = m_fillStyles.find(fillId); + if (iter != m_fillStyles.end()) + charStyle.m_fillStyle = iter->second; + } if (flag&0x20) - charStyle.m_outlId = readU32(input); + { + unsigned outlId = readU32(input); + std::map<unsigned, CDRLineStyle>::const_iterator iter = m_lineStyles.find(outlId); + if (iter != m_lineStyles.end()) + charStyle.m_lineStyle = iter->second; + } charStyles[2*i] = charStyle; } unsigned numChars = readU32(input); @@ -3109,11 +3144,21 @@ void libcdr::CDRParser::readTxsm5(WPXInputStream *input) input->seek(2, WPX_SEEK_CUR); input->seek(2, WPX_SEEK_CUR); if (flag&0x10) - charStyle.m_fillId = readU32(input); + { + unsigned fillId = readU32(input); + std::map<unsigned, CDRFillStyle>::const_iterator iter = m_fillStyles.find(fillId); + if (iter != m_fillStyles.end()) + charStyle.m_fillStyle = iter->second; + } else input->seek(4, WPX_SEEK_CUR); if (flag&0x20) - charStyle.m_outlId = readU32(input); + { + unsigned outlId = readU32(input); + std::map<unsigned, CDRLineStyle>::const_iterator iter = m_lineStyles.find(outlId); + if (iter != m_lineStyles.end()) + charStyle.m_lineStyle = iter->second; + } else input->seek(4, WPX_SEEK_CUR); input->seek(14, WPX_SEEK_CUR); @@ -3168,11 +3213,21 @@ void libcdr::CDRParser::readStyd(WPXInputStream *input) case STYD_NAME: break; case STYD_FILL_ID: - charStyle.m_fillId = readU32(input); + { + unsigned fillId = readU32(input); + std::map<unsigned, CDRFillStyle>::const_iterator iter = m_fillStyles.find(fillId); + if (iter != m_fillStyles.end()) + charStyle.m_fillStyle = iter->second; break; + } case STYD_OUTL_ID: - charStyle.m_outlId = readU32(input); + { + unsigned outlId = readU32(input); + std::map<unsigned, CDRLineStyle>::const_iterator iter = m_lineStyles.find(outlId); + if (iter != m_lineStyles.end()) + charStyle.m_lineStyle = iter->second; break; + } case STYD_FONTS: { if (m_version >= 600) diff --git a/src/lib/CDRParser.h b/src/lib/CDRParser.h index d6a4ad2..fc9116c 100644 --- a/src/lib/CDRParser.h +++ b/src/lib/CDRParser.h @@ -116,12 +116,13 @@ private: std::vector<WPXInputStream *> m_externalStreams; std::map<unsigned, CDRFont> m_fonts; + std::map<unsigned, CDRFillStyle> m_fillStyles; + std::map<unsigned, CDRLineStyle> m_lineStyles; unsigned m_version; - unsigned m_fillId; - unsigned m_outlId; }; + } // namespace libcdr #endif // __CDRPARSER_H__ diff --git a/src/lib/CDRStylesCollector.cpp b/src/lib/CDRStylesCollector.cpp index 08365df..459a362 100644 --- a/src/lib/CDRStylesCollector.cpp +++ b/src/lib/CDRStylesCollector.cpp @@ -51,19 +51,6 @@ libcdr::CDRStylesCollector::~CDRStylesCollector() { } -void libcdr::CDRStylesCollector::collectFild(unsigned id, unsigned short fillType, const libcdr::CDRColor &color1, const libcdr::CDRColor &color2, - const libcdr::CDRGradient &gradient, const libcdr::CDRImageFill &imageFill) -{ - m_ps.m_fillStyles[id] = CDRFillStyle(fillType, color1, color2, gradient, imageFill); -} - -void libcdr::CDRStylesCollector::collectOutl(unsigned id, unsigned short lineType, unsigned short capsType, unsigned short joinType, double lineWidth, - double stretch, double angle, const CDRColor &color, const std::vector<unsigned> &dashArray, - unsigned startMarkerId, unsigned endMarkerId) -{ - m_ps.m_lineStyles[id] = CDRLineStyle(lineType, capsType, joinType, lineWidth, stretch, angle, color, dashArray, startMarkerId, endMarkerId); -} - void libcdr::CDRStylesCollector::collectBmp(unsigned imageId, unsigned colorModel, unsigned width, unsigned height, unsigned bpp, const std::vector<unsigned> &palette, const std::vector<unsigned char> &bitmap) { libcdr::CDRInternalStream stream(bitmap); diff --git a/src/lib/CDRStylesCollector.h b/src/lib/CDRStylesCollector.h index 261b54e..e788e86 100644 --- a/src/lib/CDRStylesCollector.h +++ b/src/lib/CDRStylesCollector.h @@ -64,12 +64,9 @@ public: void collectClosePath() {} void collectLevel(unsigned) {} void collectTransform(const CDRTransforms &, bool) {} - void collectFildId(unsigned) {} - void collectOutlId(unsigned) {} - void collectFild(unsigned id, unsigned short fillType, const CDRColor &color1, const CDRColor &color2, const CDRGradient &gradient, const CDRImageFill &imageFill); - void collectOutl(unsigned id, unsigned short lineType, unsigned short capsType, unsigned short joinType, double lineWidth, - double stretch, double angle, const CDRColor &color, const std::vector<unsigned> &dashArray, - unsigned startMarkerId, unsigned endMarkerId); + void collectFillStyle(unsigned short, const CDRColor &, const CDRColor &, const CDRGradient &, const CDRImageFill &) {} + void collectLineStyle(unsigned short, unsigned short, unsigned short, double, double, double, const CDRColor &, + const std::vector<unsigned> &, unsigned, unsigned) {} void collectRotate(double,double,double) {} void collectFlags(unsigned, bool) {} void collectPageSize(double width, double height, double offsetX, double offsetY); diff --git a/src/lib/CDRTypes.h b/src/lib/CDRTypes.h index 3461e83..6b1228b 100644 --- a/src/lib/CDRTypes.h +++ b/src/lib/CDRTypes.h @@ -123,7 +123,7 @@ struct CDRFillStyle CDRGradient gradient; CDRImageFill imageFill; CDRFillStyle() - : fillType(0), color1(), color2(), gradient(), imageFill() {} + : fillType((unsigned short)-1), color1(), color2(), gradient(), imageFill() {} CDRFillStyle(unsigned short ft, CDRColor c1, CDRColor c2, const CDRGradient &gr, const CDRImageFill &img) : fillType(ft), color1(c1), color2(c2), gradient(gr), imageFill(img) {} }; @@ -141,7 +141,7 @@ struct CDRLineStyle unsigned startMarkerId; unsigned endMarkerId; CDRLineStyle() - : lineType(0), capsType(0), joinType(0), lineWidth(0.0), + : lineType((unsigned short)-1), capsType(0), joinType(0), lineWidth(0.0), stretch(0.0), angle(0.0), color(), dashArray(), startMarkerId(0), endMarkerId(0) {} CDRLineStyle(unsigned short lt, unsigned short ct, unsigned short jt, @@ -159,11 +159,13 @@ struct CDRCharacterStyle double m_fontSize; unsigned m_align; double m_leftIndent, m_firstIndent, m_rightIndent; - unsigned m_outlId, m_fillId, m_parentId; + CDRLineStyle m_lineStyle; + CDRFillStyle m_fillStyle; + unsigned m_parentId; CDRCharacterStyle() : m_charSet((unsigned short)-1), m_fontName(), m_fontSize(0.0), m_align(0), m_leftIndent(0.0), m_firstIndent(0.0), - m_rightIndent(0.0), m_outlId(0), m_fillId(0), m_parentId(0) + m_rightIndent(0.0), m_lineStyle(), m_fillStyle(), m_parentId(0) { m_fontName.clear(); } @@ -184,10 +186,10 @@ struct CDRCharacterStyle m_firstIndent = override.m_firstIndent; m_rightIndent = override.m_rightIndent; } - if (override.m_outlId) - m_outlId = override.m_outlId; - if (override.m_fillId) - m_fillId = override.m_fillId; + if (override.m_lineStyle.lineType != (unsigned short)-1) + m_lineStyle = override.m_lineStyle; + if (override.m_fillStyle.fillType != (unsigned short)-1) + m_fillStyle = override.m_fillStyle; } }; diff --git a/src/lib/CMXParser.cpp b/src/lib/CMXParser.cpp index ce0150a..0f6b17a 100644 --- a/src/lib/CMXParser.cpp +++ b/src/lib/CMXParser.cpp @@ -741,7 +741,6 @@ void libcdr::CMXParser::readRenderingAttributes(WPXInputStream *input) switch (tagId) { case CMX_Tag_RenderAttr_OutlineSpec: - m_collector->collectOutlId(readU16(input, m_bigEndian)); break; default: break; @@ -750,8 +749,6 @@ void libcdr::CMXParser::readRenderingAttributes(WPXInputStream *input) } while (tagId != CMX_Tag_EndTag); } - else if (m_precision == libcdr::PRECISION_16BIT) - m_collector->collectOutlId(readU16(input, m_bigEndian)); } if (bitMask & 0x04) // lens {
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits