[Libreoffice-commits] .: oox/inc oox/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Fri Jan 18 06:05:39 PST 2013


 oox/inc/oox/helper/helper.hxx      |    1 +
 oox/inc/oox/vml/vmlformatting.hxx  |   12 ++++++++++++
 oox/inc/oox/vml/vmlshape.hxx       |    1 +
 oox/source/token/properties.txt    |    1 +
 oox/source/vml/vmlformatting.cxx   |   28 ++++++++++++++++++++++++++++
 oox/source/vml/vmlshape.cxx        |    2 ++
 oox/source/vml/vmlshapecontext.cxx |    8 ++++++++
 7 files changed, 53 insertions(+)

New commits:
commit 01d059c13e39f4fba75e2152b4db6b0b746bca71
Author: Miklos Vajna <vmiklos at suse.cz>
Date:   Fri Jan 18 14:42:16 2013 +0100

    oox: import VML's v:shadow to Writer
    
    Change-Id: I48ea2dcf81c91c0fe476ecff6cd074cb699af533

diff --git a/oox/inc/oox/helper/helper.hxx b/oox/inc/oox/helper/helper.hxx
index bfe2796..e82cea7 100644
--- a/oox/inc/oox/helper/helper.hxx
+++ b/oox/inc/oox/helper/helper.hxx
@@ -82,6 +82,7 @@ const sal_uInt8 WINDOWS_CHARSET_OEM         = 255;
 
 const sal_Int32 API_RGB_TRANSPARENT         = -1;       ///< Transparent color for API calls.
 const sal_Int32 API_RGB_BLACK               = 0x000000;  ///< Black color for API calls.
+const sal_Int32 API_RGB_GRAY                = 0x808080;  ///< Gray color for API calls.
 const sal_Int32 API_RGB_WHITE               = 0xFFFFFF;  ///< White color for API calls.
 
 const sal_Int16 API_LINE_SOLID              = 0;
diff --git a/oox/inc/oox/vml/vmlformatting.hxx b/oox/inc/oox/vml/vmlformatting.hxx
index 277b358..0d8db16 100644
--- a/oox/inc/oox/vml/vmlformatting.hxx
+++ b/oox/inc/oox/vml/vmlformatting.hxx
@@ -225,6 +225,18 @@ struct FillModel
 
 // ============================================================================
 
+/** The shadow model structure contains all shape shadow properties. */
+struct ShadowModel
+{
+    OptValue<bool>     moHasShadow;               ///< Specifies whether to show a shadow.
+    OptValue<OUString> moColor;                   ///< Specifies the color of the shadow.
+    OptValue<OUString> moOffset;                  ///< Specifies the shadow's offset from the shape's location.
+    OptValue<double>   moOpacity;                 ///< Specifies the opacity of the shadow.
+
+    /** Writes the properties to the passed property map. */
+    void pushToPropMap(oox::drawingml::ShapePropertyMap& rPropMap, const GraphicHelper& rGraphicHelper) const;
+};
+
 } // namespace vml
 } // namespace oox
 
diff --git a/oox/inc/oox/vml/vmlshape.hxx b/oox/inc/oox/vml/vmlshape.hxx
index 2f4ab6f..1ef3058 100644
--- a/oox/inc/oox/vml/vmlshape.hxx
+++ b/oox/inc/oox/vml/vmlshape.hxx
@@ -87,6 +87,7 @@ struct OOX_DLLPUBLIC ShapeTypeModel
 
     StrokeModel         maStrokeModel;          ///< Border line formatting.
     FillModel           maFillModel;            ///< Shape fill formatting.
+    ShadowModel         maShadowModel;          ///< Shape shadow formatting.
 
     OptValue< ::rtl::OUString > moGraphicPath;  ///< Path to a graphic for this shape.
     OptValue< ::rtl::OUString > moGraphicTitle; ///< Title of the graphic.
diff --git a/oox/source/token/properties.txt b/oox/source/token/properties.txt
index a252bb2..2430580 100644
--- a/oox/source/token/properties.txt
+++ b/oox/source/token/properties.txt
@@ -414,6 +414,7 @@ SelectedItems
 SelectedPage
 Shadow
 ShadowColor
+ShadowFormat
 ShadowTransparence
 ShadowXDistance
 ShadowYDistance
diff --git a/oox/source/vml/vmlformatting.cxx b/oox/source/vml/vmlformatting.cxx
index 528cc06..3113d57 100644
--- a/oox/source/vml/vmlformatting.cxx
+++ b/oox/source/vml/vmlformatting.cxx
@@ -18,6 +18,7 @@
  */
 #include "oox/vml/vmlformatting.hxx"
 
+#include <com/sun/star/table/ShadowFormat.hpp>
 #include <rtl/strbuf.hxx>
 #include "oox/drawingml/color.hxx"
 #include "oox/drawingml/drawingmltypes.hxx"
@@ -32,6 +33,7 @@ namespace vml {
 
 // ============================================================================
 
+using namespace ::com::sun::star;
 using namespace ::com::sun::star::geometry;
 
 using ::oox::drawingml::Color;
@@ -712,6 +714,32 @@ void FillModel::pushToPropMap( ShapePropertyMap& rPropMap, const GraphicHelper&
 
 // ============================================================================
 
+void ShadowModel::pushToPropMap(ShapePropertyMap& rPropMap, const GraphicHelper& rGraphicHelper) const
+{
+    if (moHasShadow.has() && !moHasShadow.get())
+        return;
+
+    drawingml::Color aColor = ConversionHelper::decodeColor(rGraphicHelper, moColor, moOpacity, API_RGB_GRAY);
+    // nOffset* is in mm100, default value is 35 twips, see DffPropertyReader::ApplyAttributes() in msfilter.
+    sal_Int32 nOffsetX = 62, nOffsetY = 62;
+    if (moOffset.has())
+    {
+        OUString aOffsetX, aOffsetY;
+        ConversionHelper::separatePair(aOffsetX, aOffsetY, moOffset.get(), ',');
+        if (!aOffsetX.isEmpty())
+            nOffsetX = ConversionHelper::decodeMeasureToHmm(rGraphicHelper, aOffsetX, 0, false, false );
+        if (!aOffsetY.isEmpty())
+            nOffsetY = ConversionHelper::decodeMeasureToHmm(rGraphicHelper, aOffsetY, 0, false, false );
+    }
+
+    table::ShadowFormat aFormat;
+    aFormat.Color = aColor.getColor(rGraphicHelper);
+    aFormat.Location = table::ShadowLocation_BOTTOM_RIGHT;
+    // The width of the shadow is the average of the x and y values, see SwWW8ImplReader::MatchSdrItemsIntoFlySet().
+    aFormat.ShadowWidth = ((nOffsetX + nOffsetY) / 2);
+    rPropMap.setProperty(PROP_ShadowFormat, uno::makeAny(aFormat));
+}
+
 } // namespace vml
 } // namespace oox
 
diff --git a/oox/source/vml/vmlshape.cxx b/oox/source/vml/vmlshape.cxx
index e36d98e..8341f19 100644
--- a/oox/source/vml/vmlshape.cxx
+++ b/oox/source/vml/vmlshape.cxx
@@ -365,6 +365,8 @@ void ShapeBase::convertShapeProperties( const Reference< XShape >& rxShape ) con
     uno::Reference<lang::XServiceInfo> xSInfo(rxShape, uno::UNO_QUERY_THROW);
     if (xSInfo->supportsService("com.sun.star.text.TextFrame"))
     {
+        // Any other service supporting the ShadowFormat property?
+        maTypeModel.maShadowModel.pushToPropMap(aPropMap, rGraphicHelper);
         // TextFrames have BackColor, not FillColor
         if (aPropMap.hasProperty(PROP_FillColor))
         {
diff --git a/oox/source/vml/vmlshapecontext.cxx b/oox/source/vml/vmlshapecontext.cxx
index cb3daa6..fc5ad9f 100644
--- a/oox/source/vml/vmlshapecontext.cxx
+++ b/oox/source/vml/vmlshapecontext.cxx
@@ -333,6 +333,14 @@ ContextHandlerRef ShapeTypeContext::onCreateContext( sal_Int32 nElement, const A
             mrTypeModel.moWrapAnchorX = rAttribs.getString(XML_anchorx);
             mrTypeModel.moWrapAnchorY = rAttribs.getString(XML_anchory);
         break;
+        case VML_TOKEN( shadow ):
+        {
+            mrTypeModel.maShadowModel.moHasShadow.assignIfUsed(lclDecodeBool(rAttribs, XML_on));
+            mrTypeModel.maShadowModel.moColor.assignIfUsed(rAttribs.getString(XML_color));
+            mrTypeModel.maShadowModel.moOffset.assignIfUsed(rAttribs.getString(XML_offset));
+            mrTypeModel.maShadowModel.moOpacity = lclDecodePercent(rAttribs, XML_opacity, 1.0);
+        }
+        break;
     }
     return 0;
 }


More information about the Libreoffice-commits mailing list