diff options
author | Caolán McNamara <caolanm@redhat.com> | 2022-11-29 20:31:27 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2022-12-02 15:20:07 +0000 |
commit | f9395a123e8c85134bdd6e471bc93b2745e22a9d (patch) | |
tree | fd64e75a7ea36f28e9b993ae0c00480c480803df /emfio | |
parent | 1e222575a3b637398b5b2d8e3172f12538ff34e3 (diff) |
tdf#152094 retain more accuracy from RefDevMode::MSO1
do it like this to avoid adding another mapmode and to keep things
"the same" as much as possible
Change-Id: I1965aa545646f2d27b950d6335b2f608c3e4e04b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/143475
Tested-by: Caolán McNamara <caolanm@redhat.com>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'emfio')
-rw-r--r-- | emfio/inc/mtftools.hxx | 2 | ||||
-rw-r--r-- | emfio/source/reader/emfreader.cxx | 6 | ||||
-rw-r--r-- | emfio/source/reader/mtftools.cxx | 13 | ||||
-rw-r--r-- | emfio/source/reader/wmfreader.cxx | 8 |
4 files changed, 14 insertions, 15 deletions
diff --git a/emfio/inc/mtftools.hxx b/emfio/inc/mtftools.hxx index b4fd6394c69b..f7a318f39d55 100644 --- a/emfio/inc/mtftools.hxx +++ b/emfio/inc/mtftools.hxx @@ -809,7 +809,7 @@ namespace emfio ); void DrawText(Point& rPosition, OUString const & rString, - std::vector<sal_Int32>* pDXArry = nullptr, + KernArray* pDXArry = nullptr, tools::Long* pDYArry = nullptr, bool bRecordPath = false, GraphicsMode nGraphicsMode = GraphicsMode::GM_COMPATIBLE); diff --git a/emfio/source/reader/emfreader.cxx b/emfio/source/reader/emfreader.cxx index 207d8373e309..c24a053d3bc1 100644 --- a/emfio/source/reader/emfreader.cxx +++ b/emfio/source/reader/emfreader.cxx @@ -1817,7 +1817,7 @@ namespace emfio SAL_INFO("emfio", "\t\tText: " << aText); SAL_INFO("emfio", "\t\tDxBuffer:"); - std::vector<sal_Int32> aDXAry; + KernArray aDXAry; std::unique_ptr<tools::Long[]> pDYAry; sal_Int32 nDxSize; @@ -1857,7 +1857,7 @@ namespace emfio } } - aDXAry[i] = 0; + aDXAry.set(i, 0); if (nOptions & ETO_PDY) { pDYAry[i] = 0; @@ -1867,7 +1867,7 @@ namespace emfio { sal_Int32 nDxTmp = 0; mpInputStream->ReadInt32(nDxTmp); - aDXAry[i] = o3tl::saturating_add(aDXAry[i], nDxTmp); + aDXAry.set(i, o3tl::saturating_add(aDXAry[i], nDxTmp)); if (nOptions & ETO_PDY) { sal_Int32 nDyTmp = 0; diff --git a/emfio/source/reader/mtftools.cxx b/emfio/source/reader/mtftools.cxx index 7acb1a2b7c1f..2683151166b2 100644 --- a/emfio/source/reader/mtftools.cxx +++ b/emfio/source/reader/mtftools.cxx @@ -1644,7 +1644,7 @@ namespace emfio } } - void MtfTools::DrawText( Point& rPosition, OUString const & rText, std::vector<sal_Int32>* pDXArry, tools::Long* pDYArry, bool bRecordPath, GraphicsMode nGfxMode ) + void MtfTools::DrawText( Point& rPosition, OUString const & rText, KernArray* pDXArry, tools::Long* pDYArry, bool bRecordPath, GraphicsMode nGfxMode ) { UpdateClipRegion(); rPosition = ImplMap( rPosition ); @@ -1661,8 +1661,7 @@ namespace emfio // #i121382# Map DXArray using WorldTransform const Size aSizeX(ImplMap(Size(nSumX, 0))); const basegfx::B2DVector aVectorX(aSizeX.Width(), aSizeX.Height()); - (*pDXArry)[i] = basegfx::fround(aVectorX.getLength()); - (*pDXArry)[i] *= (nSumX >= 0 ? 1 : -1); + pDXArry->set(i, basegfx::fround(aVectorX.getLength()) * (nSumX >= 0 ? 1 : -1)); if (pDYArry) { @@ -1828,18 +1827,18 @@ namespace emfio { Point aCharDisplacement( i ? (*pDXArry)[i-1] : 0, i ? pDYArry[i-1] : 0 ); Point().RotateAround(aCharDisplacement, maFont.GetOrientation()); - mpGDIMetaFile->AddAction( new MetaTextArrayAction( rPosition + aCharDisplacement, OUString( rText[i] ), o3tl::span<const sal_Int32>{}, {}, 0, 1 ) ); + mpGDIMetaFile->AddAction( new MetaTextArrayAction( rPosition + aCharDisplacement, OUString( rText[i] ), KernArraySpan(), {}, 0, 1 ) ); } } else { /* because text without dx array is badly scaled, we will create such an array if necessary */ - o3tl::span<const sal_Int32> pDX; - std::vector<sal_Int32> aMyDXArray; + KernArraySpan pDX; + KernArray aMyDXArray; if (pDXArry) { - pDX = { pDXArry->data(), pDXArry->size() }; + pDX = *pDXArry; // only useful when we have an imported DXArray if(!rText.isEmpty()) { diff --git a/emfio/source/reader/wmfreader.cxx b/emfio/source/reader/wmfreader.cxx index 92431e06d42b..8825fa5fdea1 100644 --- a/emfio/source/reader/wmfreader.cxx +++ b/emfio/source/reader/wmfreader.cxx @@ -726,7 +726,7 @@ namespace emfio IntersectClipRect( aRect ); } SAL_INFO( "emfio", "\t\t\t Text : " << aText ); - std::vector<sal_Int32> aDXAry; + KernArray aDXAry; std::unique_ptr<tools::Long[]> pDYAry; auto nDxArySize = nMaxStreamPos - mpInputStream->Tell(); auto nDxAryEntries = nDxArySize >> 1; @@ -773,7 +773,7 @@ namespace emfio } } - aDXAry[ i ] = nDx; + aDXAry.set(i, nDx); if ( nOptions & ETO_PDY ) { pDYAry[i] = nDy; @@ -1201,7 +1201,7 @@ namespace emfio { Point aPt; sal_uInt32 nStringLen, nDXCount; - std::vector<sal_Int32> aDXAry; + KernArray aDXAry; SvMemoryStream aMemoryStream( nEscLen ); aMemoryStream.WriteBytes(pData.get(), nEscLen); aMemoryStream.Seek( STREAM_SEEK_TO_BEGIN ); @@ -1224,7 +1224,7 @@ namespace emfio { sal_Int32 val; aMemoryStream.ReadInt32( val); - aDXAry[ i ] = val; + aDXAry.set(i, val); } aMemoryStream.ReadUInt32(mnSkipActions); DrawText( aPt, aString, aDXAry.empty() ? nullptr : &aDXAry ); |