summaryrefslogtreecommitdiff
path: root/emfio
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2022-11-29 20:31:27 +0000
committerCaolán McNamara <caolanm@redhat.com>2022-12-02 15:20:07 +0000
commitf9395a123e8c85134bdd6e471bc93b2745e22a9d (patch)
treefd64e75a7ea36f28e9b993ae0c00480c480803df /emfio
parent1e222575a3b637398b5b2d8e3172f12538ff34e3 (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.hxx2
-rw-r--r--emfio/source/reader/emfreader.cxx6
-rw-r--r--emfio/source/reader/mtftools.cxx13
-rw-r--r--emfio/source/reader/wmfreader.cxx8
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 );