src/lib/EscherFieldIds.h | 5 ++++ src/lib/MSPUBCollector.cpp | 12 +++------ src/lib/MSPUBParser.cpp | 55 ++++++++++++++++++++++----------------------- src/lib/Shadow.h | 10 +++++--- 4 files changed, 44 insertions(+), 38 deletions(-)
New commits: commit 8f69cc15162202efb27cb53cd8a40324122fa200 Author: Franz Schmid <fr...@linux-hp-i7.site> Date: Thu May 9 11:57:09 2013 +0200 Corrected reading of shadow properties. diff --git a/src/lib/EscherFieldIds.h b/src/lib/EscherFieldIds.h index 5dd354a..82497b4 100644 --- a/src/lib/EscherFieldIds.h +++ b/src/lib/EscherFieldIds.h @@ -98,9 +98,12 @@ #define FIELDID_PICTURE_RECOLOR 0x011A #define FIELDID_SHADOW_TYPE 0x0200 #define FIELDID_SHADOW_COLOR 0x0201 +#define FIELDID_SHADOW_HIGHLIGHT 0x0202 #define FIELDID_SHADOW_OPACITY 0x0204 #define FIELDID_SHADOW_OFFSET_X 0x0205 #define FIELDID_SHADOW_OFFSET_Y 0x0206 +#define FIELDID_SHADOW_SECOND_OFFSET_X 0x0207 +#define FIELDID_SHADOW_SECOND_OFFSET_Y 0x0208 #define FIELDID_SHADOW_ORIGIN_X 0x0210 #define FIELDID_SHADOW_ORIGIN_Y 0x0211 #define FIELDID_SHADOW_BOOL_PROPS 0x023F @@ -113,6 +116,8 @@ #define FLAG_LEFT_INSET_PEN_OK (1 << 5) #define FLAG_GEOM_USE_LINE_OK (1 << 12) #define FLAG_GEOM_LINE_OK (1 << 28) +#define FLAG_USE_FSHADOW (1 << 17) +#define FLAG_USE_SHADOW (1 << 1) #endif /* __ESCHERFIELDIDS_H__ */ /* vim:set shiftwidth=2 softtabstop=2 expandtab: */ diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp index c51af2e..e002f93 100644 --- a/src/lib/MSPUBCollector.cpp +++ b/src/lib/MSPUBCollector.cpp @@ -493,14 +493,10 @@ boost::function<void(void)> libmspub::MSPUBCollector::paintShape(const ShapeInfo { shadowPropsInserted = true; graphicsProps.insert("draw:shadow", "visible"); - graphicsProps.insert("draw:shadow-offset-x", - static_cast<double>(s.m_offsetXInEmu) / EMUS_IN_INCH); - graphicsProps.insert("draw:shadow-offset-y", - static_cast<double>(s.m_offsetYInEmu) / EMUS_IN_INCH); - graphicsProps.insert("draw:shadow-color", - getColorString(s.m_color.getFinalColor(m_paletteColors))); - graphicsProps.insert("draw:shadow-opacity", - s.m_opacity, WPX_PERCENT); + graphicsProps.insert("draw:shadow-offset-x", static_cast<double>(s.m_offsetXInEmu) / EMUS_IN_INCH); + graphicsProps.insert("draw:shadow-offset-y", static_cast<double>(s.m_offsetYInEmu) / EMUS_IN_INCH); + graphicsProps.insert("draw:shadow-color", getColorString(s.m_color.getFinalColor(m_paletteColors))); + graphicsProps.insert("draw:shadow-opacity", s.m_opacity, WPX_PERCENT); } // TODO: Emulate shadows that don't conform // to LibreOffice's range of possible shadows. diff --git a/src/lib/MSPUBParser.cpp b/src/lib/MSPUBParser.cpp index e59d059..73a2c40 100644 --- a/src/lib/MSPUBParser.cpp +++ b/src/lib/MSPUBParser.cpp @@ -1744,35 +1744,36 @@ void libmspub::MSPUBParser::parseEscherShape(WPXInputStream *input, const Escher ptr_endArrowHeight ? (ArrowSize)(*ptr_endArrowHeight) : MEDIUM)); - unsigned *ptr_shadowType = getIfExists(foptValues.m_scalarValues, - FIELDID_SHADOW_TYPE); - if (ptr_shadowType) + unsigned *shadowBoolProps = getIfExists(foptValues.m_scalarValues, FIELDID_SHADOW_BOOL_PROPS); + if (shadowBoolProps) { - ShadowType shadowType = static_cast<ShadowType>(*ptr_shadowType); - unsigned *shadowColor = getIfExists(foptValues.m_scalarValues, - FIELDID_SHADOW_COLOR); - unsigned *shadowOpacity = getIfExists(foptValues.m_scalarValues, - FIELDID_SHADOW_OPACITY); - unsigned *shadowOffsetX = getIfExists(foptValues.m_scalarValues, - FIELDID_SHADOW_OFFSET_X); - unsigned *shadowOffsetY = getIfExists(foptValues.m_scalarValues, - FIELDID_SHADOW_OFFSET_Y); - unsigned *shadowOriginX = getIfExists(foptValues.m_scalarValues, - FIELDID_SHADOW_ORIGIN_X); - unsigned *shadowOriginY = getIfExists(foptValues.m_scalarValues, - FIELDID_SHADOW_ORIGIN_Y); - /* unsigned *shadowBoolProps = getIfExists(foptValues.m_scalarValues, - FIELDID_SHADOW_BOOL_PROPS); */ - m_collector->setShapeShadow(*shapeSeqNum, Shadow(shadowType, - shadowOffsetX ? static_cast<int>(*shadowOffsetX) : 0x6338, - shadowOffsetY ? static_cast<int>(*shadowOffsetY) : 0x6338, - shadowOriginX ? toFixedPoint(static_cast<int>(*shadowOriginX)) : 0, - shadowOriginY ? toFixedPoint(static_cast<int>(*shadowOriginY)) : 0, - toFixedPoint(shadowOpacity ? static_cast<int>(*shadowOpacity) - : 0x10000), - ColorReference(shadowColor ? *shadowColor : 0))); - + unsigned shadowProps = *shadowBoolProps; + if ((shadowProps & FLAG_USE_FSHADOW) && (shadowProps & FLAG_USE_SHADOW)) + { + unsigned *ptr_shadowType = getIfExists(foptValues.m_scalarValues, FIELDID_SHADOW_TYPE); + ShadowType shadowType = static_cast<ShadowType>(ptr_shadowType ? *ptr_shadowType : 0); + unsigned *shadowColor = getIfExists(foptValues.m_scalarValues, FIELDID_SHADOW_COLOR); + unsigned *shadowHColor = getIfExists(foptValues.m_scalarValues, FIELDID_SHADOW_HIGHLIGHT); + unsigned *shadowOpacity = getIfExists(foptValues.m_scalarValues, FIELDID_SHADOW_OPACITY); + unsigned *shadowOffsetX = getIfExists(foptValues.m_scalarValues, FIELDID_SHADOW_OFFSET_X); + unsigned *shadowOffsetY = getIfExists(foptValues.m_scalarValues, FIELDID_SHADOW_OFFSET_Y); + unsigned *shadowOffsetX2 = getIfExists(foptValues.m_scalarValues, FIELDID_SHADOW_SECOND_OFFSET_X); + unsigned *shadowOffsetY2 = getIfExists(foptValues.m_scalarValues, FIELDID_SHADOW_SECOND_OFFSET_Y); + unsigned *shadowOriginX = getIfExists(foptValues.m_scalarValues, FIELDID_SHADOW_ORIGIN_X); + unsigned *shadowOriginY = getIfExists(foptValues.m_scalarValues, FIELDID_SHADOW_ORIGIN_Y); + m_collector->setShapeShadow(*shapeSeqNum, Shadow(shadowType, + shadowOffsetX ? static_cast<int>(*shadowOffsetX) : 0x6338, + shadowOffsetY ? static_cast<int>(*shadowOffsetY) : 0x6338, + shadowOffsetX2 ? static_cast<int>(*shadowOffsetX2) : 0, + shadowOffsetY2 ? static_cast<int>(*shadowOffsetY2) : 0, + shadowOriginX ? toFixedPoint(static_cast<int>(*shadowOriginX)) : 0, + shadowOriginY ? toFixedPoint(static_cast<int>(*shadowOriginY)) : 0, + toFixedPoint(shadowOpacity ? static_cast<int>(*shadowOpacity) : 0x10000), + ColorReference(shadowColor ? *shadowColor : 0x00808080), + ColorReference(shadowHColor ? *shadowHColor : 0x00CBCBCB) + )); + } } const std::vector<unsigned char> vertexData = foptValues.m_complexValues[FIELDID_P_VERTICES]; diff --git a/src/lib/Shadow.h b/src/lib/Shadow.h index 5de0a8a..6a754c9 100644 --- a/src/lib/Shadow.h +++ b/src/lib/Shadow.h @@ -47,16 +47,20 @@ struct Shadow ShadowType m_type; int m_offsetXInEmu; int m_offsetYInEmu; + int m_SecondOffsetXInEmu; + int m_SecondOffsetYInEmu; double m_originXInEmu; double m_originYInEmu; double m_opacity; ColorReference m_color; - Shadow(ShadowType type, int offsetXInEmu, int offsetYInEmu, + ColorReference m_highColor; + Shadow(ShadowType type, int offsetXInEmu, int offsetYInEmu, int secondOffsetXInEmu, int secondOffsetYInEmu, double originXInEmu, double originYInEmu, double opacity, - ColorReference color) + ColorReference color, ColorReference colorH) : m_type(type), m_offsetXInEmu(offsetXInEmu), m_offsetYInEmu(offsetYInEmu), + m_SecondOffsetXInEmu(secondOffsetXInEmu), m_SecondOffsetYInEmu(secondOffsetYInEmu), m_originXInEmu(originXInEmu), m_originYInEmu(originYInEmu), - m_opacity(opacity), m_color(color) + m_opacity(opacity), m_color(color), m_highColor(colorH) { } }; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits