Kaydet (Commit) fe549458 authored tarafından Lei De Bin's avatar Lei De Bin

#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 
üst 189fe5d0
...@@ -2731,7 +2731,7 @@ void DffPropertyReader::ApplyAttributes( SvStream& rIn, SfxItemSet& rSet, DffObj ...@@ -2731,7 +2731,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 )
...@@ -4482,7 +4482,7 @@ SdrObject* SvxMSDffManager::ImportShape( const DffRecordHeader& rHd, SvStream& r ...@@ -4482,7 +4482,7 @@ SdrObject* SvxMSDffManager::ImportShape( const DffRecordHeader& rHd, SvStream& r
aSet.Put( SvxWeightItem( ( GetPropertyValue( DFF_Prop_gtextFStrikethrough, 0 ) & 0x0020 ) != 0 ? WEIGHT_BOLD : WEIGHT_NORMAL, EE_CHAR_WEIGHT ) ); 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 // 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 // supported by svx core, api and xml file format
((SdrObjCustomShape*)pRet)->SetVerticalWriting( ( GetPropertyValue( DFF_Prop_gtextFStrikethrough, 0 ) & 0x2000 ) != 0 ); ((SdrObjCustomShape*)pRet)->SetVerticalWriting( ( GetPropertyValue( DFF_Prop_gtextFStrikethrough, 0 ) & 0x2000 ) != 0 );
......
...@@ -102,6 +102,7 @@ ...@@ -102,6 +102,7 @@
#include <ndtxt.hxx> #include <ndtxt.hxx>
// <-- // <--
#include "WW8FFData.hxx" #include "WW8FFData.hxx"
#include <editeng/shaditem.hxx>
using namespace com::sun::star; using namespace com::sun::star;
using namespace sw::util; using namespace sw::util;
...@@ -1726,7 +1727,61 @@ sal_Int32 SwBasicEscherEx::WriteFlyFrameAttr(const SwFrmFmt& rFmt, ...@@ -1726,7 +1727,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 );
}
}
}
}
SvxBrushItem aBrush(rWrt.TrueFrameBgBrush(rFmt)); SvxBrushItem aBrush(rWrt.TrueFrameBgBrush(rFmt));
WriteBrushAttr(aBrush, rPropOpt); WriteBrushAttr(aBrush, rPropOpt);
......
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