[Libreoffice-commits] libmspub.git: src/lib

Franz Schmid franz at linux-hp-i7.site
Mon May 13 08:28:35 PDT 2013


 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 <franz at 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)
   {
   }
 };


More information about the Libreoffice-commits mailing list