drawinglayer: improve pen object logging
Change-Id: Iaae081ddee8097346000b7c2d987a2321d5e98cd
Reviewed-on: https://gerrit.libreoffice.org/84833
Tested-by: Jenkins
Reviewed-by: Bartosz Kosiorek <gang65@poczta.onet.pl>
diff --git a/drawinglayer/source/tools/emfphelperdata.cxx b/drawinglayer/source/tools/emfphelperdata.cxx
index 51a727b..b7a0c89 100644
--- a/drawinglayer/source/tools/emfphelperdata.cxx
+++ b/drawinglayer/source/tools/emfphelperdata.cxx
@@ -204,40 +204,28 @@ namespace emfplushelper
switch (aUnitType)
{
case UnitTypePixel:
{
return 1.0f;
}
case UnitTypePoint:
{
SAL_INFO("drawinglayer", "EMF+\t Converting Points to Pixels.");
return Application::GetDefaultDevice()->GetDPIX() / 72;
}
case UnitTypeInch:
{
SAL_INFO("drawinglayer", "EMF+\t Converting Inches to Pixels.");
return Application::GetDefaultDevice()->GetDPIX();
}
case UnitTypeMillimeter:
{
SAL_INFO("drawinglayer", "EMF+\t Converting Millimeters to Pixels");
return Application::GetDefaultDevice()->GetDPIX() / 25.4;
}
case UnitTypeDocument:
{
SAL_INFO("drawinglayer", "EMF+\t Converting Documents to Pixels.");
return Application::GetDefaultDevice()->GetDPIX() / 300;
}
case UnitTypeWorld:
case UnitTypeDisplay:
{
SAL_WARN("drawinglayer", "EMF+\t Converting to World/Display.");
return 1.0f;
}
default:
{
SAL_WARN("drawinglayer", "EMF+\tTODO Unimplemented support of Unit Type: 0x" << std::hex << aUnitType);
return 1.0f;
}
}
}
@@ -491,14 +479,14 @@ namespace emfplushelper
{
// we need a line join attribute
basegfx::B2DLineJoin lineJoin = basegfx::B2DLineJoin::Round;
if (pen->penDataFlags & 0x00000008) // additional line join information
if (pen->penDataFlags & EmfPlusPenDataJoin) // additional line join information
{
lineJoin = static_cast<basegfx::B2DLineJoin>(EMFPPen::lcl_convertLineJoinType(pen->lineJoin));
}
// we need a line cap attribute
css::drawing::LineCap lineCap = css::drawing::LineCap_BUTT;
if (pen->penDataFlags & 0x00000002) // additional line cap information
if (pen->penDataFlags & EmfPlusPenDataStartCap) // additional line cap information
{
lineCap = static_cast<css::drawing::LineCap>(EMFPPen::lcl_convertStrokeCap(pen->startCap));
SAL_WARN_IF(pen->startCap != pen->endCap, "drawinglayer", "emf+ pen uses different start and end cap");
@@ -511,7 +499,7 @@ namespace emfplushelper
lineCap);
drawinglayer::attribute::StrokeAttribute aStrokeAttribute;
if (pen->penDataFlags & 0x00000020 && pen->dashStyle != EmfPlusLineStyleCustom) // pen has a predefined line style
if (pen->penDataFlags & EmfPlusPenDataLineStyle && pen->dashStyle != EmfPlusLineStyleCustom) // pen has a predefined line style
{
// short writing
const double pw = maMapTransform.get(1, 1) * pen->penWidth;
@@ -539,7 +527,7 @@ namespace emfplushelper
break;
}
}
else if (pen->penDataFlags & 0x00000100) // pen has a custom dash line
else if (pen->penDataFlags & EmfPlusPenDataMiterLimit) // pen has a custom dash line
{
// StrokeAttribute needs a double vector while the pen provides a float vector
std::vector<double> aPattern(pen->dashPattern.size());
@@ -573,7 +561,7 @@ namespace emfplushelper
pen->GetColor().GetTransparency() / 255.0));
}
if ((pen->penDataFlags & 0x00000800) && (pen->customStartCap->polygon.begin()->count() > 1))
if ((pen->penDataFlags & EmfPlusPenDataCustomStartCap) && (pen->customStartCap->polygon.begin()->count() > 1))
{
SAL_WARN("drawinglayer", "EMF+\tCustom Start Line Cap");
::basegfx::B2DPolyPolygon startCapPolygon(pen->customStartCap->polygon);
@@ -618,7 +606,7 @@ namespace emfplushelper
}
}
if ((pen->penDataFlags & 0x00001000) && (pen->customEndCap->polygon.begin()->count() > 1))
if ((pen->penDataFlags & EmfPlusPenDataCustomEndCap) && (pen->customEndCap->polygon.begin()->count() > 1))
{
SAL_WARN("drawinglayer", "EMF+\tCustom End Line Cap");
diff --git a/drawinglayer/source/tools/emfppen.cxx b/drawinglayer/source/tools/emfppen.cxx
index 353d6fa..fa0ea00 100644
--- a/drawinglayer/source/tools/emfppen.cxx
+++ b/drawinglayer/source/tools/emfppen.cxx
@@ -71,6 +71,52 @@ namespace emfplushelper
{
}
static OUString PenDataFlagsToString(sal_uInt32 flags)
{
OUString sFlags;
if (flags & EmfPlusPenDataTransform)
sFlags = "\nEMF+\t\t\tEmfPlusPenDataTransform";
if (flags & EmfPlusPenDataStartCap)
sFlags = sFlags.concat("\nEMF+\t\t\tEmfPlusPenDataStartCap");
if (flags & EmfPlusPenDataEndCap)
sFlags = sFlags.concat("\nEMF+\t\t\tEmfPlusPenDataEndCap");
if (flags & EmfPlusPenDataJoin)
sFlags = sFlags.concat("\nEMF+\t\t\tEmfPlusPenDataJoin");
if (flags & EmfPlusPenDataMiterLimit)
sFlags = sFlags.concat("\nEMF+\t\t\tEmfPlusPenDataMiterLimit");
if (flags & EmfPlusPenDataLineStyle)
sFlags = sFlags.concat("\nEMF+\t\t\tEmfPlusPenDataLineStyle");
if (flags & EmfPlusPenDataDashedLineCap)
sFlags = sFlags.concat("\nEMF+\t\t\tEmfPlusPenDataDashedLineCap");
if (flags & EmfPlusPenDataDashedLineOffset)
sFlags = sFlags.concat("\nEMF+\t\t\tEmfPlusPenDataDashedLineOffset");
if (flags & EmfPlusPenDataDashedLine)
sFlags = sFlags.concat("\nEMF+\t\t\tEmfPlusPenDataDashedLine");
if (flags & EmfPlusPenDataNonCenter)
sFlags = sFlags.concat("\nEMF+\t\t\tEmfPlusPenDataNonCenter");
if (flags & EmfPlusPenDataCompoundLine)
sFlags = sFlags.concat("\nEMF+\t\t\tEmfPlusPenDataCompoundLine");
if (flags & EmfPlusPenDataCustomStartCap)
sFlags = sFlags.concat("\nEMF+\t\t\tEmfPlusPenDataCustomStartCap");
if (flags & EmfPlusPenDataCustomEndCap)
sFlags = sFlags.concat("\nEMF+\t\t\tEmfPlusPenDataCustomEndCap");
return sFlags;
}
/// Convert stroke caps between EMF+ and rendering API
sal_Int8 EMFPPen::lcl_convertStrokeCap(sal_uInt32 nEmfStroke)
{
@@ -106,8 +152,8 @@ namespace emfplushelper
s.ReadUInt32(graphicsVersion).ReadUInt32(penType).ReadUInt32(penDataFlags).ReadUInt32(penUnit).ReadFloat(penWidth);
SAL_INFO("drawinglayer", "EMF+\t\tGraphics version: 0x" << std::hex << graphicsVersion);
SAL_INFO("drawinglayer", "EMF+\t\tType: " << penType);
SAL_INFO("drawinglayer", "EMF+\t\tPen data flags: 0x" << penDataFlags);
SAL_INFO("drawinglayer", "EMF+\t\tUnit: " << penUnit);
SAL_INFO("drawinglayer", "EMF+\t\tPen data flags: 0x" << penDataFlags << PenDataFlagsToString(penDataFlags));
SAL_INFO("drawinglayer", "EMF+\t\tUnit: " << UnitTypeToString(penUnit));
SAL_INFO("drawinglayer", "EMF+\t\tWidth: " << std::dec << penWidth);
penWidth = penWidth * EmfPlusHelperData::getUnitToPixelMultiplier(static_cast<UnitType>(penUnit));
diff --git a/drawinglayer/source/tools/emfppen.hxx b/drawinglayer/source/tools/emfppen.hxx
index 7570ee4..ecc6f1c 100644
--- a/drawinglayer/source/tools/emfppen.hxx
+++ b/drawinglayer/source/tools/emfppen.hxx
@@ -40,6 +40,20 @@ namespace emfplushelper
const sal_Int32 EmfPlusLineStyleDashDotDot = 0x00000004;
const sal_Int32 EmfPlusLineStyleCustom = 0x00000005;
const sal_uInt32 EmfPlusPenDataTransform = 0x00000001;
const sal_uInt32 EmfPlusPenDataStartCap = 0x00000002;
const sal_uInt32 EmfPlusPenDataEndCap = 0x00000004;
const sal_uInt32 EmfPlusPenDataJoin = 0x00000008;
const sal_uInt32 EmfPlusPenDataMiterLimit = 0x00000010;
const sal_uInt32 EmfPlusPenDataLineStyle = 0x00000020;
const sal_uInt32 EmfPlusPenDataDashedLineCap = 0x00000040;
const sal_uInt32 EmfPlusPenDataDashedLineOffset = 0x00000080;
const sal_uInt32 EmfPlusPenDataDashedLine = 0x00000100;
const sal_uInt32 EmfPlusPenDataNonCenter = 0x00000200;
const sal_uInt32 EmfPlusPenDataCompoundLine = 0x00000400;
const sal_uInt32 EmfPlusPenDataCustomStartCap = 0x00000800;
const sal_uInt32 EmfPlusPenDataCustomEndCap = 0x000001000;
struct EMFPCustomLineCap;
struct EMFPPen : public EMFPBrush