drawinglayer/source/tools/emfpbrush.cxx | 71 +++++++-------------------- drawinglayer/source/tools/emfpbrush.hxx | 6 +- drawinglayer/source/tools/emfphelperdata.cxx | 4 - drawinglayer/source/tools/emfppen.cxx | 27 +++------- drawinglayer/source/tools/emfppen.hxx | 4 - 5 files changed, 35 insertions(+), 77 deletions(-)
New commits: commit 8202df1815ed692df371e6d07a3b0f29a329f6ed Author: Bartosz Kosiorek <gan...@poczta.onet.pl> AuthorDate: Fri Apr 22 18:26:49 2022 +0200 Commit: Bartosz Kosiorek <gan...@poczta.onet.pl> CommitDate: Sun Apr 24 13:01:05 2022 +0200 tdf#103859 EMF+ Use variable types according to EMFPLUS documentation With this commit, the types of variable for Brush and Pen were aligned to documentation: [MS-EMFPLUS] - Enhanced Metafile Format Plus Extensions As a side effect the code was simplified a bit Change-Id: Ibabad628d0aaef510f61ee8b3d881c3f024cebef Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133327 Tested-by: Jenkins Reviewed-by: Bartosz Kosiorek <gan...@poczta.onet.pl> diff --git a/drawinglayer/source/tools/emfpbrush.cxx b/drawinglayer/source/tools/emfpbrush.cxx index 4acc311345a8..7d6204a5da9e 100644 --- a/drawinglayer/source/tools/emfpbrush.cxx +++ b/drawinglayer/source/tools/emfpbrush.cxx @@ -113,17 +113,12 @@ namespace emfplushelper SAL_INFO("drawinglayer.emf", "EMF+\t\t\t\tCenter color: 0x" << std::hex << color << std::dec); s.ReadFloat(firstPointX).ReadFloat(firstPointY); SAL_INFO("drawinglayer.emf", "EMF+\t\t\t\tCenter point: " << firstPointX << "," << firstPointY); - s.ReadInt32(surroundColorsNumber); + s.ReadUInt32(surroundColorsNumber); SAL_INFO("drawinglayer.emf", "EMF+\t\t\t\t number of surround colors: " << surroundColorsNumber); - if (surroundColorsNumber<0 || o3tl::make_unsigned(surroundColorsNumber)>SAL_MAX_INT32 / sizeof(::Color)) - { - surroundColorsNumber = SAL_MAX_INT32 / sizeof(::Color); - } - surroundColors.reset( new ::Color[surroundColorsNumber] ); - for (int i = 0; i < surroundColorsNumber; i++) + for (sal_uInt32 i = 0; i < surroundColorsNumber; i++) { s.ReadUInt32(color); surroundColors[i] = ::Color(ColorAlpha, (color >> 24), (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff); @@ -132,7 +127,7 @@ namespace emfplushelper SAL_INFO("drawinglayer.emf", "EMF+\t\t\t\tSurround color[" << i << "]: 0x" << std::hex << color << std::dec); } - if (additionalFlags & 0x01) + if (additionalFlags & 0x01) // BrushDataPath { sal_Int32 pathLength; @@ -180,60 +175,47 @@ namespace emfplushelper << aBounds.getWidth() << "x" << aBounds.getHeight()); } - if (additionalFlags & 0x02) + if (additionalFlags & 0x02) // BrushDataTransform { EmfPlusHelperData::readXForm(s, brush_transformation); hasTransformation = true; SAL_INFO("drawinglayer.emf", "EMF+\t\t\t\tUse brush transformation: " << brush_transformation); } - if (additionalFlags & 0x08) + if (additionalFlags & 0x08) // BrushDataBlendFactorsH { - s.ReadInt32(blendPoints); + s.ReadUInt32(blendPoints); SAL_INFO("drawinglayer.emf", "EMF+\t\t\t\tuse blend, points: " << blendPoints); - if (blendPoints<0 || o3tl::make_unsigned(blendPoints)>SAL_MAX_INT32 / (2 * sizeof(float))) - blendPoints = SAL_MAX_INT32 / (2 * sizeof(float)); blendPositions.reset( new float[2 * blendPoints] ); blendFactors = blendPositions.get() + blendPoints; - for (int i = 0; i < blendPoints; i++) + for (sal_uInt32 i = 0; i < blendPoints; i++) { s.ReadFloat(blendPositions[i]); SAL_INFO("drawinglayer.emf", "EMF+\t\t\t\tposition[" << i << "]: " << blendPositions[i]); } - for (int i = 0; i < blendPoints; i++) + for (sal_uInt32 i = 0; i < blendPoints; i++) { s.ReadFloat(blendFactors[i]); SAL_INFO("drawinglayer.emf", "EMF+\t\t\t\tFactor[" << i << "]: " << blendFactors[i]); } } - if (additionalFlags & 0x04) + if (additionalFlags & 0x04) // BrushDataPresetColors { - s.ReadInt32(colorblendPoints); + s.ReadUInt32(colorblendPoints); SAL_INFO("drawinglayer.emf", "EMF+\t\t\t\tUse color blend, points: " << colorblendPoints); - - if (colorblendPoints<0 || o3tl::make_unsigned(colorblendPoints)>SAL_MAX_INT32 / sizeof(float)) - { - colorblendPoints = SAL_MAX_INT32 / sizeof(float); - } - - if (o3tl::make_unsigned(colorblendPoints) > SAL_MAX_INT32 / sizeof(::Color)) - { - colorblendPoints = SAL_MAX_INT32 / sizeof(::Color); - } - colorblendPositions.reset( new float[colorblendPoints] ); colorblendColors.reset( new ::Color[colorblendPoints] ); - for (int i = 0; i < colorblendPoints; i++) + for (sal_uInt32 i = 0; i < colorblendPoints; i++) { s.ReadFloat(colorblendPositions[i]); SAL_INFO("drawinglayer.emf", "EMF+\tposition[" << i << "]: " << colorblendPositions[i]); } - for (int i = 0; i < colorblendPoints; i++) + for (sal_uInt32 i = 0; i < colorblendPoints; i++) { s.ReadUInt32(color); colorblendColors[i] = ::Color(ColorAlpha, (color >> 24), (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff); @@ -262,29 +244,27 @@ namespace emfplushelper s.ReadUInt32(color); s.ReadUInt32(color); - if (additionalFlags & 0x02) + if (additionalFlags & 0x02) //BrushDataTransform { EmfPlusHelperData::readXForm(s, brush_transformation); hasTransformation = true; SAL_INFO("drawinglayer.emf", "EMF+\t\t\t\tUse brush transformation: " << brush_transformation); } - if (additionalFlags & 0x08) + if (additionalFlags & 0x08) // BrushDataBlendFactorsH { - s.ReadInt32(blendPoints); + s.ReadUInt32(blendPoints); SAL_INFO("drawinglayer.emf", "EMF+\t\t\t\tUse blend, points: " << blendPoints); - if (blendPoints<0 || o3tl::make_unsigned(blendPoints)>SAL_MAX_INT32 / (2 * sizeof(float))) - blendPoints = SAL_MAX_INT32 / (2 * sizeof(float)); blendPositions.reset( new float[2 * blendPoints] ); blendFactors = blendPositions.get() + blendPoints; - for (int i = 0; i < blendPoints; i++) + for (sal_uInt32 i = 0; i < blendPoints; i++) { s.ReadFloat(blendPositions[i]); SAL_INFO("drawinglayer.emf", "EMF+\t\t\t\tPosition[" << i << "]: " << blendPositions[i]); } - for (int i = 0; i < blendPoints; i++) + for (sal_uInt32 i = 0; i < blendPoints; i++) { s.ReadFloat(blendFactors[i]); SAL_INFO("drawinglayer.emf", "EMF+\t\t\t\tFactor[" << i << "]: " << blendFactors[i]); @@ -293,29 +273,18 @@ namespace emfplushelper if (additionalFlags & 0x04) { - s.ReadInt32(colorblendPoints); + s.ReadUInt32(colorblendPoints); SAL_INFO("drawinglayer.emf", "EMF+\t\t\t\tUse color blend, points: " << colorblendPoints); - - if (colorblendPoints<0 || o3tl::make_unsigned(colorblendPoints)>SAL_MAX_INT32 / sizeof(float)) - { - colorblendPoints = SAL_MAX_INT32 / sizeof(float); - } - - if (o3tl::make_unsigned(colorblendPoints) > SAL_MAX_INT32 / sizeof(::Color)) - { - colorblendPoints = sal_uInt32(SAL_MAX_INT32) / sizeof(::Color); - } - colorblendPositions.reset( new float[colorblendPoints] ); colorblendColors.reset( new ::Color[colorblendPoints] ); - for (int i = 0; i < colorblendPoints; i++) + for (sal_uInt32 i = 0; i < colorblendPoints; i++) { s.ReadFloat(colorblendPositions[i]); SAL_INFO("drawinglayer.emf", "EMF+\t\t\t\tPosition[" << i << "]: " << colorblendPositions[i]); } - for (int i = 0; i < colorblendPoints; i++) + for (sal_uInt32 i = 0; i < colorblendPoints; i++) { s.ReadUInt32(color); colorblendColors[i] = ::Color(ColorAlpha, (color >> 24), (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff); diff --git a/drawinglayer/source/tools/emfpbrush.hxx b/drawinglayer/source/tools/emfpbrush.hxx index ec4ab11732f2..5f272a63ac9c 100644 --- a/drawinglayer/source/tools/emfpbrush.hxx +++ b/drawinglayer/source/tools/emfpbrush.hxx @@ -104,13 +104,13 @@ namespace emfplushelper ::Color secondColor; // first color is stored in solidColor; basegfx::B2DHomMatrix brush_transformation; bool hasTransformation; - sal_Int32 blendPoints; + sal_uInt32 blendPoints; std::unique_ptr<float[]> blendPositions; float* blendFactors; - sal_Int32 colorblendPoints; + sal_uInt32 colorblendPoints; std::unique_ptr<float[]> colorblendPositions; std::unique_ptr<::Color[]> colorblendColors; - sal_Int32 surroundColorsNumber; + sal_uInt32 surroundColorsNumber; std::unique_ptr<::Color[]> surroundColors; std::unique_ptr<EMFPPath> path; EmfPlusHatchStyle hatchStyle; diff --git a/drawinglayer/source/tools/emfphelperdata.cxx b/drawinglayer/source/tools/emfphelperdata.cxx index a7f809373e09..c405a4c4876b 100644 --- a/drawinglayer/source/tools/emfphelperdata.cxx +++ b/drawinglayer/source/tools/emfphelperdata.cxx @@ -796,7 +796,7 @@ namespace emfplushelper SAL_INFO("drawinglayer.emf", "EMF+\t\tUse blend"); // store the blendpoints in the vector - for (int i = 0; i < brush->blendPoints; i++) + for (sal_uInt32 i = 0; i < brush->blendPoints; i++) { double aBlendPoint; basegfx::BColor aColor; @@ -821,7 +821,7 @@ namespace emfplushelper SAL_INFO("drawinglayer.emf", "EMF+\t\tUse color blend"); // store the colorBlends in the vector - for (int i = 0; i < brush->colorblendPoints; i++) + for (sal_uInt32 i = 0; i < brush->colorblendPoints; i++) { double aBlendPoint; basegfx::BColor aColor; diff --git a/drawinglayer/source/tools/emfppen.cxx b/drawinglayer/source/tools/emfppen.cxx index f348391b0519..7d999d61cc8b 100644 --- a/drawinglayer/source/tools/emfppen.cxx +++ b/drawinglayer/source/tools/emfppen.cxx @@ -247,7 +247,6 @@ namespace emfplushelper void EMFPPen::Read(SvStream& s, EmfPlusHelperData const & rR) { sal_uInt32 graphicsVersion, penType; - int i; s.ReadUInt32(graphicsVersion).ReadUInt32(penType).ReadUInt32(penDataFlags).ReadUInt32(penUnit).ReadFloat(penWidth); SAL_INFO("drawinglayer.emf", "EMF+\t\tGraphics version: 0x" << std::hex << graphicsVersion); SAL_INFO("drawinglayer.emf", "EMF+\t\tType: " << penType); @@ -341,19 +340,14 @@ namespace emfplushelper if (penDataFlags & PenDataDashedLine) { dashStyle = EmfPlusLineStyleCustom; - sal_Int32 dashPatternLen; + sal_uInt32 dashPatternLen; - s.ReadInt32(dashPatternLen); + s.ReadUInt32(dashPatternLen); SAL_INFO("drawinglayer.emf", "EMF+\t\t\tdashPatternLen: " << dashPatternLen); - if (dashPatternLen<0 || o3tl::make_unsigned(dashPatternLen)>SAL_MAX_INT32 / sizeof(float)) - { - dashPatternLen = SAL_MAX_INT32 / sizeof(float); - } - dashPattern.resize( dashPatternLen ); - for (i = 0; i < dashPatternLen; i++) + for (sal_uInt32 i = 0; i < dashPatternLen; i++) { s.ReadFloat(dashPattern[i]); SAL_INFO("drawinglayer.emf", "EMF+\t\t\t\tdashPattern[" << i << "]: " << dashPattern[i]); @@ -373,17 +367,12 @@ namespace emfplushelper if (penDataFlags & PenDataCompoundLine) { SAL_WARN("drawinglayer.emf", "EMF+\t\t\tTODO PenDataCompoundLine"); - sal_Int32 compoundArrayLen; - s.ReadInt32(compoundArrayLen); - - if (compoundArrayLen<0 || o3tl::make_unsigned(compoundArrayLen)>SAL_MAX_INT32 / sizeof(float)) - { - compoundArrayLen = SAL_MAX_INT32 / sizeof(float); - } + sal_uInt32 compoundArrayLen; + s.ReadUInt32(compoundArrayLen); compoundArray.resize(compoundArrayLen); - for (i = 0; i < compoundArrayLen; i++) + for (sal_uInt32 i = 0; i < compoundArrayLen; i++) { s.ReadFloat(compoundArray[i]); SAL_INFO("drawinglayer.emf", "EMF+\t\t\t\tcompoundArray[" << i << "]: " << compoundArray[i]); @@ -392,7 +381,7 @@ namespace emfplushelper if (penDataFlags & PenDataCustomStartCap) { - s.ReadInt32(customStartCapLen); + s.ReadUInt32(customStartCapLen); SAL_INFO("drawinglayer.emf", "EMF+\t\t\tcustomStartCapLen: " << customStartCapLen); sal_uInt64 const pos = s.Tell(); @@ -409,7 +398,7 @@ namespace emfplushelper if (penDataFlags & PenDataCustomEndCap) { - s.ReadInt32(customEndCapLen); + s.ReadUInt32(customEndCapLen); SAL_INFO("drawinglayer.emf", "EMF+\t\t\tcustomEndCapLen: " << customEndCapLen); sal_uInt64 const pos = s.Tell(); diff --git a/drawinglayer/source/tools/emfppen.hxx b/drawinglayer/source/tools/emfppen.hxx index 29ece63ecf5d..a22ae14fc247 100644 --- a/drawinglayer/source/tools/emfppen.hxx +++ b/drawinglayer/source/tools/emfppen.hxx @@ -112,9 +112,9 @@ namespace emfplushelper std::vector<float> dashPattern; sal_Int32 alignment; std::vector<float> compoundArray; - sal_Int32 customStartCapLen; + sal_uInt32 customStartCapLen; std::unique_ptr<EMFPCustomLineCap> customStartCap; - sal_Int32 customEndCapLen; + sal_uInt32 customEndCapLen; std::unique_ptr<EMFPCustomLineCap> customEndCap; EMFPPen();