You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by al...@apache.org on 2014/07/07 17:19:08 UTC
svn commit: r1608485 - in /openoffice/trunk/main/svx/source/svdraw:
svdfmtf.cxx svdfmtf.hxx
Author: alg
Date: Mon Jul 7 15:19:08 2014
New Revision: 1608485
URL: http://svn.apache.org/r1608485
Log:
i125211 corrected beaking metafiles with gradient actions
Modified:
openoffice/trunk/main/svx/source/svdraw/svdfmtf.cxx
openoffice/trunk/main/svx/source/svdraw/svdfmtf.hxx
Modified: openoffice/trunk/main/svx/source/svdraw/svdfmtf.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/svx/source/svdraw/svdfmtf.cxx?rev=1608485&r1=1608484&r2=1608485&view=diff
==============================================================================
--- openoffice/trunk/main/svx/source/svdraw/svdfmtf.cxx (original)
+++ openoffice/trunk/main/svx/source/svdraw/svdfmtf.cxx Mon Jul 7 15:19:08 2014
@@ -180,7 +180,10 @@ void ImpSdrGDIMetaFileImport::DoLoopActi
case META_PUSH_ACTION : DoAction((MetaPushAction &)*pAct); break;
case META_POP_ACTION : DoAction((MetaPopAction &)*pAct); break;
case META_HATCH_ACTION : DoAction((MetaHatchAction &)*pAct); break;
- case META_COMMENT_ACTION : DoAction((MetaCommentAction &)*pAct, &rMtf); break;
+
+ // #i125211# MetaCommentAction may change index, thus hand it over
+ case META_COMMENT_ACTION : DoAction((MetaCommentAction&)*pAct, rMtf, a);
+ break;
// missing actions added
case META_TEXTRECT_ACTION : DoAction((MetaTextRectAction&)*pAct); break;
@@ -1159,7 +1162,8 @@ void ImpSdrGDIMetaFileImport::DoAction(
{
const Hatch& rHatch = rAct.GetHatch();
SdrPathObj* pPath = new SdrPathObj(OBJ_POLY, aSource);
- SfxItemSet aHatchAttr(mpModel->GetItemPool(), XATTR_FILLSTYLE, XATTR_FILLSTYLE, XATTR_FILLHATCH, XATTR_FILLHATCH, 0, 0);
+ // #i125211# Use the ranges from the SdrObject to create a new empty SfxItemSet
+ SfxItemSet aHatchAttr(mpModel->GetItemPool(), pPath->GetMergedItemSet().GetRanges());
XHatchStyle eStyle;
switch(rHatch.GetStyle())
@@ -1231,13 +1235,14 @@ void ImpSdrGDIMetaFileImport::MapScaling
////////////////////////////////////////////////////////////////////////////////////////////////////
-void ImpSdrGDIMetaFileImport::DoAction( MetaCommentAction& rAct, GDIMetaFile* pMtf )
+void ImpSdrGDIMetaFileImport::DoAction( MetaCommentAction& rAct, GDIMetaFile& rMtf, sal_uLong& a) // GDIMetaFile* pMtf )
{
ByteString aSkipComment;
- if( rAct.GetComment().CompareIgnoreCaseToAscii( "XGRAD_SEQ_BEGIN" ) == COMPARE_EQUAL )
+ if( a < rMtf.GetActionCount() && rAct.GetComment().CompareIgnoreCaseToAscii( "XGRAD_SEQ_BEGIN" ) == COMPARE_EQUAL )
{
- MetaGradientExAction* pAct = (MetaGradientExAction*) pMtf->NextAction();
+ // #i125211# Check if next action is a MetaGradientExAction
+ MetaGradientExAction* pAct = dynamic_cast< MetaGradientExAction* >(rMtf.GetAction(a + 1));
if( pAct && pAct->GetType() == META_GRADIENTEX_ACTION )
{
@@ -1250,7 +1255,8 @@ void ImpSdrGDIMetaFileImport::DoAction(
{
const Gradient& rGrad = pAct->GetGradient();
SdrPathObj* pPath = new SdrPathObj(OBJ_POLY, aSource);
- SfxItemSet aGradAttr(mpModel->GetItemPool(), XATTR_FILLSTYLE, XATTR_FILLSTYLE, XATTR_FILLGRADIENT, XATTR_FILLGRADIENT, 0, 0);
+ // #i125211# Use the ranges from the SdrObject to create a new empty SfxItemSet
+ SfxItemSet aGradAttr(mpModel->GetItemPool(), pPath->GetMergedItemSet().GetRanges());
XGradient aXGradient;
aXGradient.SetGradientStyle((XGradientStyle)rGrad.GetStyle());
@@ -1288,13 +1294,14 @@ void ImpSdrGDIMetaFileImport::DoAction(
if(aSkipComment.Len())
{
- MetaAction* pSkipAct = pMtf->NextAction();
+ // #i125211# forward until closing MetaCommentAction
+ MetaAction* pSkipAct = rMtf.GetAction(++a);
while( pSkipAct
&& ((pSkipAct->GetType() != META_COMMENT_ACTION )
|| (((MetaCommentAction*)pSkipAct)->GetComment().CompareIgnoreCaseToAscii(aSkipComment.GetBuffer()) != COMPARE_EQUAL)))
{
- pSkipAct = pMtf->NextAction();
+ pSkipAct = rMtf.GetAction(++a);
}
}
}
@@ -1422,7 +1429,8 @@ void ImpSdrGDIMetaFileImport::DoAction(M
floor(aRange.getMinY()),
ceil(aRange.getMaxX()),
ceil(aRange.getMaxY())));
- SfxItemSet aGradientAttr(mpModel->GetItemPool(), XATTR_FILLSTYLE, XATTR_FILLSTYLE, XATTR_FILLGRADIENT, XATTR_FILLGRADIENT, 0, 0);
+ // #i125211# Use the ranges from the SdrObject to create a new empty SfxItemSet
+ SfxItemSet aGradientAttr(mpModel->GetItemPool(), pRect->GetMergedItemSet().GetRanges());
const XGradientStyle aXGradientStyle(getXGradientStyleFromGradientStyle(rGradient.GetStyle()));
const XFillGradientItem aXFillGradientItem(
&mpModel->GetItemPool(),
@@ -1439,7 +1447,7 @@ void ImpSdrGDIMetaFileImport::DoAction(M
rGradient.GetSteps()));
SetAttributes(pRect);
- aGradientAttr.Put(XFillStyleItem(XFILL_HATCH));
+ aGradientAttr.Put(XFillStyleItem(XFILL_GRADIENT)); // #i125211#
aGradientAttr.Put(aXFillGradientItem);
pRect->SetMergedItemSet(aGradientAttr);
@@ -1492,7 +1500,8 @@ void ImpSdrGDIMetaFileImport::DoAction(M
{
const Gradient& rGradient = rAct.GetGradient();
SdrPathObj* pPath = new SdrPathObj(OBJ_POLY, aSource);
- SfxItemSet aGradientAttr(mpModel->GetItemPool(), XATTR_FILLSTYLE, XATTR_FILLSTYLE, XATTR_FILLGRADIENT, XATTR_FILLGRADIENT, 0, 0);
+ // #i125211# Use the ranges from the SdrObject to create a new empty SfxItemSet
+ SfxItemSet aGradientAttr(mpModel->GetItemPool(), pPath->GetMergedItemSet().GetRanges());
const XGradientStyle aXGradientStyle(getXGradientStyleFromGradientStyle(rGradient.GetStyle()));
const XFillGradientItem aXFillGradientItem(
&mpModel->GetItemPool(),
@@ -1509,7 +1518,7 @@ void ImpSdrGDIMetaFileImport::DoAction(M
rGradient.GetSteps()));
SetAttributes(pPath);
- aGradientAttr.Put(XFillStyleItem(XFILL_HATCH));
+ aGradientAttr.Put(XFillStyleItem(XFILL_GRADIENT)); // #i125211#
aGradientAttr.Put(aXFillGradientItem);
pPath->SetMergedItemSet(aGradientAttr);
Modified: openoffice/trunk/main/svx/source/svdraw/svdfmtf.hxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/svx/source/svdraw/svdfmtf.hxx?rev=1608485&r1=1608484&r2=1608485&view=diff
==============================================================================
--- openoffice/trunk/main/svx/source/svdraw/svdfmtf.hxx (original)
+++ openoffice/trunk/main/svx/source/svdraw/svdfmtf.hxx Mon Jul 7 15:19:08 2014
@@ -122,7 +122,10 @@ protected:
void DoAction(MetaMoveClipRegionAction & rAct) { rAct.Execute(&maVD); checkClip(); }
void DoAction(MetaISectRectClipRegionAction& rAct) { rAct.Execute(&maVD); checkClip(); }
void DoAction(MetaISectRegionClipRegionAction& rAct) { rAct.Execute(&maVD); checkClip(); }
- void DoAction(MetaCommentAction& rAct, GDIMetaFile* pMtf);
+
+ // #i125211# The MetaCommentAction needs to advance (if used), thus
+ // give current metafile and index which may be changed
+ void DoAction(MetaCommentAction& rAct, GDIMetaFile& rMtf, sal_uLong& a);
// missing actions added
void DoAction(MetaTextRectAction& rAct);