Kaydet (Commit) ee0ecef8 authored tarafından Lei De Bin's avatar Lei De Bin Kaydeden (comit) Caolán McNamara

Resolves: #i120158# 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 (cherry picked from commit fe549458)

Conflicts:
	filter/source/msfilter/msdffimp.cxx
	sw/source/filter/ww8/wrtw8esh.cxx

Change-Id: I863ea7193f3dee563a892a6d857ee2385f58a862
üst 17f21e6b
...@@ -2616,7 +2616,7 @@ void DffPropertyReader::ApplyAttributes( SvStream& rIn, SfxItemSet& rSet, DffObj ...@@ -2616,7 +2616,7 @@ void DffPropertyReader::ApplyAttributes( SvStream& rIn, SfxItemSet& rSet, DffObj
break; 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. bHasShadow = sal_False; // we are turning shadow off.
if ( bHasShadow ) if ( bHasShadow )
......
...@@ -44,6 +44,7 @@ ...@@ -44,6 +44,7 @@
#include <svx/svdoole2.hxx> #include <svx/svdoole2.hxx>
#include <editeng/editeng.hxx> #include <editeng/editeng.hxx>
#include <editeng/flditem.hxx> #include <editeng/flditem.hxx>
#include <editeng/shaditem.hxx>
#include <unotools/ucbstreamhelper.hxx> #include <unotools/ucbstreamhelper.hxx>
#include <svx/fmglob.hxx> #include <svx/fmglob.hxx>
#include <svx/svdouno.hxx> #include <svx/svdouno.hxx>
...@@ -92,7 +93,6 @@ ...@@ -92,7 +93,6 @@
#include <fstream> #include <fstream>
#include <unotools/streamwrap.hxx> #include <unotools/streamwrap.hxx>
using ::editeng::SvxBorderLine; using ::editeng::SvxBorderLine;
using namespace com::sun::star; using namespace com::sun::star;
using namespace sw::util; using namespace sw::util;
...@@ -1793,6 +1793,61 @@ sal_Int32 SwBasicEscherEx::WriteFlyFrameAttr(const SwFrmFmt& rFmt, ...@@ -1793,6 +1793,61 @@ sal_Int32 SwBasicEscherEx::WriteFlyFrameAttr(const SwFrmFmt& rFmt,
rPropOpt.AddOpt( ESCHER_Prop_dxTextLeft, 0 ); rPropOpt.AddOpt( ESCHER_Prop_dxTextLeft, 0 );
rPropOpt.AddOpt( ESCHER_Prop_dxTextRight, 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 );
}
}
}
}
// SwWW8ImplReader::Read_GrafLayer() imports these as opaque // SwWW8ImplReader::Read_GrafLayer() imports these as opaque
// unconditionally, so if both are true, don't export the property. // unconditionally, so if both are true, don't export the property.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment