Kaydet (Commit) 420d20d3 authored tarafından Bartosz Kosiorek's avatar Bartosz Kosiorek

EMF Replace magic numbers of pen and brush objects

Change-Id: Ia3b6208b3d42b46fbdc9d61bbdea1c790aaf3ba0
Reviewed-on: https://gerrit.libreoffice.org/37268Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarBartosz Kosiorek <gang65@poczta.onet.pl>
üst 86829b5b
...@@ -43,6 +43,16 @@ namespace cppcanvas ...@@ -43,6 +43,16 @@ namespace cppcanvas
{ {
namespace internal namespace internal
{ {
enum EmfPlusBrushType
{
BrushTypeSolidColor = 0x00000000,
BrushTypeHatchFill = 0x00000001,
BrushTypeTextureFill = 0x00000002,
BrushTypePathGradient = 0x00000003,
BrushTypeLinearGradient = 0x00000004
};
EMFPBrush::EMFPBrush() EMFPBrush::EMFPBrush()
: type(0) : type(0)
, additionalFlags(0) , additionalFlags(0)
...@@ -99,7 +109,7 @@ namespace cppcanvas ...@@ -99,7 +109,7 @@ namespace cppcanvas
SAL_INFO("cppcanvas.emf", "EMF+\theader: 0x" << std::hex << header << " type: " << type << std::dec); SAL_INFO("cppcanvas.emf", "EMF+\theader: 0x" << std::hex << header << " type: " << type << std::dec);
switch (type) { switch (type) {
case 0: case BrushTypeSolidColor:
{ {
sal_uInt32 color; sal_uInt32 color;
...@@ -108,7 +118,7 @@ namespace cppcanvas ...@@ -108,7 +118,7 @@ namespace cppcanvas
SAL_INFO("cppcanvas.emf", "EMF+\tsolid color: 0x" << std::hex << color << std::dec); SAL_INFO("cppcanvas.emf", "EMF+\tsolid color: 0x" << std::hex << color << std::dec);
break; break;
} }
case 1: case BrushTypeHatchFill:
{ {
sal_uInt32 style; sal_uInt32 style;
sal_uInt32 foregroundColor; sal_uInt32 foregroundColor;
...@@ -123,8 +133,12 @@ namespace cppcanvas ...@@ -123,8 +133,12 @@ namespace cppcanvas
SAL_INFO("cppcanvas.emf", "EMF+\thatch style " << style << " foregroundcolor: 0x" << solidColor.AsRGBHexString() << " background 0x" << secondColor.AsRGBHexString()); SAL_INFO("cppcanvas.emf", "EMF+\thatch style " << style << " foregroundcolor: 0x" << solidColor.AsRGBHexString() << " background 0x" << secondColor.AsRGBHexString());
break; break;
} }
// path gradient case BrushTypeTextureFill:
case 3: {
SAL_WARN("cppcanvas.emf", "EMF+\tTODO: implement BrushTypeTextureFill brush");
break;
}
case BrushTypePathGradient:
{ {
s.ReadUInt32(additionalFlags).ReadInt32(wrapMode); s.ReadUInt32(additionalFlags).ReadInt32(wrapMode);
...@@ -230,8 +244,7 @@ namespace cppcanvas ...@@ -230,8 +244,7 @@ namespace cppcanvas
} }
break; break;
} }
// linear gradient case BrushTypeLinearGradient:
case 4:
{ {
s.ReadUInt32(additionalFlags).ReadInt32(wrapMode); s.ReadUInt32(additionalFlags).ReadInt32(wrapMode);
......
...@@ -46,6 +46,24 @@ namespace cppcanvas ...@@ -46,6 +46,24 @@ namespace cppcanvas
{ {
namespace internal namespace internal
{ {
enum EmfPlusPenData
{
PenDataTransform = 0x00000001,
PenDataStartCap = 0x00000002,
PenDataEndCap = 0x00000004,
PenDataJoin = 0x00000008,
PenDataMiterLimit = 0x00000010,
PenDataLineStyle = 0x00000020,
PenDataDashedLineCap = 0x00000040,
PenDataDashedLineOffset = 0x00000080,
PenDataDashedLine = 0x00000100,
PenDataNonCenter = 0x00000200,
PenDataCompoundLine = 0x00000400,
PenDataCustomStartCap = 0x00000800,
PenDataCustomEndCap = 0x00001000
};
const sal_Int32 EmfPlusLineStyleSolid = 0x00000000; const sal_Int32 EmfPlusLineStyleSolid = 0x00000000;
const sal_Int32 EmfPlusLineStyleDash = 0x00000001; const sal_Int32 EmfPlusLineStyleDash = 0x00000001;
const sal_Int32 EmfPlusLineStyleDot = 0x00000002; const sal_Int32 EmfPlusLineStyleDot = 0x00000002;
...@@ -55,7 +73,7 @@ namespace cppcanvas ...@@ -55,7 +73,7 @@ namespace cppcanvas
EMFPPen::EMFPPen() EMFPPen::EMFPPen()
: EMFPBrush() : EMFPBrush()
, width(0.0) , penWidth(0.0)
, startCap(0) , startCap(0)
, endCap(0) , endCap(0)
, lineJoin(0) , lineJoin(0)
...@@ -86,11 +104,11 @@ namespace cppcanvas ...@@ -86,11 +104,11 @@ namespace cppcanvas
void EMFPPen::SetStrokeWidth(rendering::StrokeAttributes& rStrokeAttributes, ImplRenderer& rR, const OutDevState& rState) void EMFPPen::SetStrokeWidth(rendering::StrokeAttributes& rStrokeAttributes, ImplRenderer& rR, const OutDevState& rState)
{ {
#if OSL_DEBUG_LEVEL > 1 #if OSL_DEBUG_LEVEL > 1
if (width == 0.0) { if (penWidth == 0.0) {
SAL_INFO("cppcanvas.emf", "TODO: pen with zero width - using minimal which might not be correct"); SAL_INFO("cppcanvas.emf", "TODO: pen with zero width - using minimal which might not be correct");
} }
#endif #endif
rStrokeAttributes.StrokeWidth = fabs((rState.mapModeTransform * rR.MapSize(width == 0.0 ? 0.05 : width, 0)).getLength()); rStrokeAttributes.StrokeWidth = fabs((rState.mapModeTransform * rR.MapSize(penWidth == 0.0 ? 0.05 : penWidth, 0)).getLength());
} }
/// Convert stroke caps between EMF+ and rendering API /// Convert stroke caps between EMF+ and rendering API
...@@ -155,19 +173,19 @@ namespace cppcanvas ...@@ -155,19 +173,19 @@ namespace cppcanvas
void EMFPPen::Read(SvStream& s, ImplRenderer& rR) void EMFPPen::Read(SvStream& s, ImplRenderer& rR)
{ {
sal_uInt32 header, unknown, penFlags, unknown2; sal_uInt32 graphicsVersion, penType, penDataFlags, penUnit;
int i; int i;
s.ReadUInt32(header).ReadUInt32(unknown).ReadUInt32(penFlags).ReadUInt32(unknown2).ReadFloat(width); s.ReadUInt32(graphicsVersion).ReadUInt32(penType).ReadUInt32(penDataFlags).ReadUInt32(penUnit).ReadFloat(penWidth);
SAL_INFO("cppcanvas.emf", "EMF+\tpen"); SAL_INFO("cppcanvas.emf", "EMF+\tpen");
SAL_INFO("cppcanvas.emf", "EMF+\theader: 0x" << std::hex << header << " unknown: 0x" << unknown << SAL_INFO("cppcanvas.emf", "EMF+\t graphics version: 0x" << std::hex << graphicsVersion << " type (must be set to zero): " << penType <<
" additional flags: 0x" << penFlags << " unknown: 0x" << unknown2 << " width: " << std::dec << width); " pen data flags: 0x" << penDataFlags << " unit: " << penUnit << " width: " << std::dec << penWidth);
if (penFlags & 1) if (penDataFlags & PenDataTransform)
ReadXForm(s, pen_transformation); ReadXForm(s, pen_transformation);
if (penFlags & 2) if (penDataFlags & PenDataStartCap)
{ {
s.ReadInt32(startCap); s.ReadInt32(startCap);
SAL_INFO("cppcanvas.emf", "EMF+\t\tstartCap: 0x" << std::hex << startCap); SAL_INFO("cppcanvas.emf", "EMF+\t\tstartCap: 0x" << std::hex << startCap);
...@@ -175,7 +193,7 @@ namespace cppcanvas ...@@ -175,7 +193,7 @@ namespace cppcanvas
else else
startCap = 0; startCap = 0;
if (penFlags & 4) if (penDataFlags & PenDataEndCap)
{ {
s.ReadInt32(endCap); s.ReadInt32(endCap);
SAL_INFO("cppcanvas.emf", "EMF+\t\tendCap: 0x" << std::hex << endCap); SAL_INFO("cppcanvas.emf", "EMF+\t\tendCap: 0x" << std::hex << endCap);
...@@ -183,17 +201,17 @@ namespace cppcanvas ...@@ -183,17 +201,17 @@ namespace cppcanvas
else else
endCap = 0; endCap = 0;
if (penFlags & 8) if (penDataFlags & PenDataJoin)
s.ReadInt32(lineJoin); s.ReadInt32(lineJoin);
else else
lineJoin = 0; lineJoin = 0;
if (penFlags & 16) if (penDataFlags & PenDataMiterLimit)
s.ReadFloat(mitterLimit); s.ReadFloat(mitterLimit);
else else
mitterLimit = 0; mitterLimit = 0;
if (penFlags & 32) if (penDataFlags & PenDataLineStyle)
{ {
s.ReadInt32(dashStyle); s.ReadInt32(dashStyle);
SAL_INFO("cppcanvas.emf", "EMF+\t\tdashStyle: 0x" << std::hex << dashStyle); SAL_INFO("cppcanvas.emf", "EMF+\t\tdashStyle: 0x" << std::hex << dashStyle);
...@@ -201,17 +219,17 @@ namespace cppcanvas ...@@ -201,17 +219,17 @@ namespace cppcanvas
else else
dashStyle = 0; dashStyle = 0;
if (penFlags & 64) if (penDataFlags & PenDataDashedLineCap)
s.ReadInt32(dashCap); s.ReadInt32(dashCap);
else else
dashCap = 0; dashCap = 0;
if (penFlags & 128) if (penDataFlags & PenDataDashedLineOffset)
s.ReadFloat(dashOffset); s.ReadFloat(dashOffset);
else else
dashOffset = 0; dashOffset = 0;
if (penFlags & 256) if (penDataFlags & PenDataDashedLine)
{ {
dashStyle = EmfPlusLineStyleCustom; dashStyle = EmfPlusLineStyleCustom;
...@@ -230,12 +248,12 @@ namespace cppcanvas ...@@ -230,12 +248,12 @@ namespace cppcanvas
else else
dashPatternLen = 0; dashPatternLen = 0;
if (penFlags & 512) if (penDataFlags & PenDataNonCenter)
s.ReadInt32(alignment); s.ReadInt32(alignment);
else else
alignment = 0; alignment = 0;
if (penFlags & 1024) { if (penDataFlags & PenDataCompoundLine) {
s.ReadInt32(compoundArrayLen); s.ReadInt32(compoundArrayLen);
if (compoundArrayLen<0 || sal_uInt32(compoundArrayLen)>SAL_MAX_INT32 / sizeof(float)) if (compoundArrayLen<0 || sal_uInt32(compoundArrayLen)>SAL_MAX_INT32 / sizeof(float))
compoundArrayLen = SAL_MAX_INT32 / sizeof(float); compoundArrayLen = SAL_MAX_INT32 / sizeof(float);
...@@ -246,7 +264,7 @@ namespace cppcanvas ...@@ -246,7 +264,7 @@ namespace cppcanvas
else else
compoundArrayLen = 0; compoundArrayLen = 0;
if (penFlags & 2048) if (penDataFlags & PenDataCustomStartCap)
{ {
s.ReadInt32(customStartCapLen); s.ReadInt32(customStartCapLen);
SAL_INFO("cppcanvas.emf", "EMF+\t\tcustomStartCapLen: " << customStartCapLen); SAL_INFO("cppcanvas.emf", "EMF+\t\tcustomStartCapLen: " << customStartCapLen);
...@@ -261,7 +279,7 @@ namespace cppcanvas ...@@ -261,7 +279,7 @@ namespace cppcanvas
else else
customStartCapLen = 0; customStartCapLen = 0;
if (penFlags & 4096) if (penDataFlags & PenDataCustomEndCap)
{ {
s.ReadInt32(customEndCapLen); s.ReadInt32(customEndCapLen);
SAL_INFO("cppcanvas.emf", "EMF+\t\tcustomEndCapLen: " << customEndCapLen); SAL_INFO("cppcanvas.emf", "EMF+\t\tcustomEndCapLen: " << customEndCapLen);
......
...@@ -39,7 +39,7 @@ namespace cppcanvas ...@@ -39,7 +39,7 @@ namespace cppcanvas
struct EMFPPen : public EMFPBrush struct EMFPPen : public EMFPBrush
{ {
XForm pen_transformation; //TODO: This isn't used XForm pen_transformation; //TODO: This isn't used
float width; float penWidth;
sal_Int32 startCap; sal_Int32 startCap;
sal_Int32 endCap; sal_Int32 endCap;
sal_Int32 lineJoin; sal_Int32 lineJoin;
......
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