Kaydet (Commit) 6db02671 authored tarafından Bartosz Kosiorek's avatar Bartosz Kosiorek Kaydeden (comit) Mark Page

tdf#113758 EMF+ Add support to OffsetClip record

OffsetClip record applies a translation transform
on the current clipping region for the world space.

Change-Id: Iac024a3c2eaba58edc5bb59d817796b6022f559f
Reviewed-on: https://gerrit.libreoffice.org/44597Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarMark Page <aptitude@btconnect.com>
üst 4b334e45
......@@ -89,6 +89,7 @@ namespace emfplushelper
case EmfPlusRecordTypeSetClipRect: return "EmfPlusRecordTypeSetClipRect";
case EmfPlusRecordTypeSetClipPath: return "EmfPlusRecordTypeSetClipPath";
case EmfPlusRecordTypeSetClipRegion: return "EmfPlusRecordTypeSetClipRegion";
case EmfPlusRecordTypeOffsetClip: return "EmfPlusRecordTypeOffsetClip";
case EmfPlusRecordTypeDrawDriverString: return "EmfPlusRecordTypeDrawDriverString";
}
return "";
......@@ -1506,7 +1507,7 @@ namespace emfplushelper
float eAngle;
rMS.ReadFloat(eAngle);
SAL_INFO("drawinglayer", "EMF+ EmfPlusRecordTypeRotateWorldTransform Angle: " << eAngle <<
SAL_INFO("drawinglayer", "EMF+ RotateWorldTransform Angle: " << eAngle <<
", post multiply: " << (flags & 0x2000));
// Skipping flags & 0x2000
// For rotation transformation there is no difference between post and pre multiply
......@@ -1519,7 +1520,7 @@ namespace emfplushelper
}
case EmfPlusRecordTypeResetClip:
{
SAL_INFO("drawinglayer", "EMF+ EmfPlusRecordTypeResetClip");
SAL_INFO("drawinglayer", "EMF+ ResetClip");
// We don't need to read anything more, as Size needs to be set 0x0000000C
// and DataSize must be set to 0.
......@@ -1584,6 +1585,23 @@ namespace emfplushelper
}
break;
}
case EmfPlusRecordTypeOffsetClip:
{
float dx, dy;
rMS.ReadFloat(dx).ReadFloat(dy);
SAL_INFO("drawinglayer", "EMF+ OffsetClip, Offset x:" << dx << ", y:" << dy);
basegfx::B2DPolyPolygon aPolyPolygon(
mrPropertyHolders.Current().getClipPolyPolygon());
basegfx::B2DHomMatrix transformMatrix;
transformMatrix.set(0, 2, dx);
transformMatrix.set(1, 2, dy);
aPolyPolygon.transform(transformMatrix);
HandleNewClipRegion(aPolyPolygon, mrTargetHolders, mrPropertyHolders);
break;
}
case EmfPlusRecordTypeDrawDriverString:
{
SAL_INFO("drawinglayer", "EMF+ DrawDriverString, flags: 0x" << std::hex << flags << std::dec);
......
......@@ -86,7 +86,7 @@ namespace emfplushelper
#define EmfPlusRecordTypeSetClipRect 0x4032
#define EmfPlusRecordTypeSetClipPath 0x4033
#define EmfPlusRecordTypeSetClipRegion 0x4034
//TODO EmfPlusRecordTypeOffsetClip 0x4035
#define EmfPlusRecordTypeOffsetClip 0x4035
#define EmfPlusRecordTypeDrawDriverString 0x4036
//TODO EmfPlusRecordTypeStrokeFillPath 0x4037
//TODO EmfPlusRecordTypeSerializableObject 0x4038
......
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