You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by le...@apache.org on 2012/08/20 03:48:43 UTC

svn commit: r1374894 - in /incubator/ooo/trunk/main: filter/source/msfilter/msdffimp.cxx sw/source/filter/ww8/wrtw8esh.cxx

Author: leidb
Date: Mon Aug 20 01:48:42 2012
New Revision: 1374894

URL: http://svn.apache.org/viewvc?rev=1374894&view=rev
Log:
#120158# fix picture shadow lost after saved as doc in some case.
Reported by: Yan Ji
Patch by: Chen Zuo Jun
Review by: Lei De Bin 

Modified:
    incubator/ooo/trunk/main/filter/source/msfilter/msdffimp.cxx
    incubator/ooo/trunk/main/sw/source/filter/ww8/wrtw8esh.cxx

Modified: incubator/ooo/trunk/main/filter/source/msfilter/msdffimp.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/filter/source/msfilter/msdffimp.cxx?rev=1374894&r1=1374893&r2=1374894&view=diff
==============================================================================
--- incubator/ooo/trunk/main/filter/source/msfilter/msdffimp.cxx (original)
+++ incubator/ooo/trunk/main/filter/source/msfilter/msdffimp.cxx Mon Aug 20 01:48:42 2012
@@ -2731,7 +2731,7 @@ void DffPropertyReader::ApplyAttributes(
 				break;
 			}
 		}
-		if ( ( ( nLineFlags & 0x08 ) == 0 ) && ( ( nFillFlags & 0x10 ) == 0 ) )	// if there is no fillstyle and linestyle
+		if ( ( ( nLineFlags & 0x08 ) == 0 ) && ( ( nFillFlags & 0x10 ) == 0 ) && ( rObjData.eShapeType != mso_sptPictureFrame ))	// if there is no fillstyle and linestyle
 			bHasShadow = sal_False;												// we are turning shadow off.
 
 		if ( bHasShadow )
@@ -4482,7 +4482,7 @@ SdrObject* SvxMSDffManager::ImportShape(
                             aSet.Put( SvxWeightItem( ( GetPropertyValue( DFF_Prop_gtextFStrikethrough, 0 ) & 0x0020 ) != 0 ? WEIGHT_BOLD : WEIGHT_NORMAL, EE_CHAR_WEIGHT ) );
 
 						// SJ TODO: Vertical Writing is not correct, instead this should be
-						// replaced through "CharacterRotation" by 90°, therefore a new Item has to be
+						// replaced through "CharacterRotation" by 90? therefore a new Item has to be
 						// supported by svx core, api and xml file format
 						((SdrObjCustomShape*)pRet)->SetVerticalWriting( ( GetPropertyValue( DFF_Prop_gtextFStrikethrough, 0 ) & 0x2000 ) != 0 );
 

Modified: incubator/ooo/trunk/main/sw/source/filter/ww8/wrtw8esh.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/sw/source/filter/ww8/wrtw8esh.cxx?rev=1374894&r1=1374893&r2=1374894&view=diff
==============================================================================
--- incubator/ooo/trunk/main/sw/source/filter/ww8/wrtw8esh.cxx (original)
+++ incubator/ooo/trunk/main/sw/source/filter/ww8/wrtw8esh.cxx Mon Aug 20 01:48:42 2012
@@ -102,6 +102,7 @@
 #include <ndtxt.hxx>
 // <--
 #include "WW8FFData.hxx"
+#include <editeng/shaditem.hxx>
 
 using namespace com::sun::star;
 using namespace sw::util;
@@ -1726,7 +1727,61 @@ sal_Int32 SwBasicEscherEx::WriteFlyFrame
         rPropOpt.AddOpt( ESCHER_Prop_dxTextLeft, 0 );
         rPropOpt.AddOpt( ESCHER_Prop_dxTextRight, 0 );
     }
+    const SwAttrSet& rAttrSet = rFmt.GetAttrSet();
+    if (SFX_ITEM_ON == rAttrSet.GetItemState(RES_BOX, false, &pItem))
+    {
+        const SvxBoxItem* pBox = (const SvxBoxItem*)pItem;
+        if( pBox )
+        {
+            const SfxPoolItem* pShadItem;
+            if (SFX_ITEM_ON
+                == rAttrSet.GetItemState(RES_SHADOW, true, &pShadItem))
+            {
+                const SvxShadowItem* pSI = (const SvxShadowItem*)pShadItem;
+
+                const sal_uInt16 nCstScale = 635;        // unit scale between SODC and MS Word
+                const sal_uInt32 nShadowType = 131074;    // shadow type of ms word. need to set the default value.
+
+                sal_uInt32  nColor = (sal_uInt32)(pSI->GetColor().GetColor()) ;
+                sal_uInt32  nOffX = pSI->GetWidth() * nCstScale;
+                sal_uInt32  nOffY = pSI->GetWidth() * nCstScale;
+                sal_uInt32  nShadow = nShadowType;
+
+                SvxShadowLocation eLocation = pSI->GetLocation();
+                if( (eLocation!=SVX_SHADOW_NONE) && (pSI->GetWidth()!=0) )
+                {
+                    switch( eLocation )
+                    {
+                    case SVX_SHADOW_TOPLEFT:
+                        {
+                            nOffX = -nOffX;
+                            nOffY = -nOffY;
+                        }
+                        break;
+                    case SVX_SHADOW_TOPRIGHT:
+                        {
+                            nOffY = -nOffY;
+                        }
+                        break;
+                    case SVX_SHADOW_BOTTOMLEFT:
+                        {
+                            nOffX = -nOffX;
+                        }
+                        break;
+                    case SVX_SHADOW_BOTTOMRIGHT:
+                        break;
+                    default:
+                        break;
+                    }
 
+                    rPropOpt.AddOpt( DFF_Prop_shadowColor,    wwUtility::RGBToBGR((nColor)));
+                    rPropOpt.AddOpt( DFF_Prop_shadowOffsetX,    nOffX );
+                    rPropOpt.AddOpt( DFF_Prop_shadowOffsetY,    nOffY );
+                    rPropOpt.AddOpt( DFF_Prop_fshadowObscured,  nShadow );
+                }
+            }
+    	}
+    }
     SvxBrushItem aBrush(rWrt.TrueFrameBgBrush(rFmt));
     WriteBrushAttr(aBrush, rPropOpt);