diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2021-03-31 19:13:17 +0900 |
---|---|---|
committer | Tomaž Vajngerl <quikee@gmail.com> | 2021-04-02 12:57:35 +0200 |
commit | 2c64c4ac72ec5ec70ed3ded444f3b1006d116d60 (patch) | |
tree | f620af6bbf4d5d1d08b33c8444510fa129137aca | |
parent | 24fad8bf168beb56855d97ede2d4a1dec2a46220 (diff) |
vcl: move MapMode reading and writing to TypeSerializer
remove usage of ReadMapMode and WriteMapMode and add tests
Change-Id: I40e1da8aea5c2171d9dbb6343fbf61912e5b3367
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113498
Tested-by: Tomaž Vajngerl <quikee@gmail.com>
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
-rw-r--r-- | include/vcl/TypeSerializer.hxx | 3 | ||||
-rw-r--r-- | include/vcl/mapmod.hxx | 12 | ||||
-rw-r--r-- | vcl/qa/cppunit/TypeSerializerTest.cxx | 39 | ||||
-rw-r--r-- | vcl/source/filter/graphicfilter2.cxx | 3 | ||||
-rw-r--r-- | vcl/source/gdi/TypeSerializer.cxx | 38 | ||||
-rw-r--r-- | vcl/source/gdi/gdimtf.cxx | 4 | ||||
-rw-r--r-- | vcl/source/gdi/mapmod.cxx | 32 | ||||
-rw-r--r-- | vcl/source/gdi/metaact.cxx | 6 |
8 files changed, 91 insertions, 46 deletions
diff --git a/include/vcl/TypeSerializer.hxx b/include/vcl/TypeSerializer.hxx index 7be2f54198e7..e85b25b1cfe3 100644 --- a/include/vcl/TypeSerializer.hxx +++ b/include/vcl/TypeSerializer.hxx @@ -50,6 +50,9 @@ public: void readGraphic(Graphic& rGraphic); void writeGraphic(const Graphic& rGraphic); + + void readMapMode(MapMode& rMapMode); + void writeMapMode(MapMode const& rMapMode); }; #endif diff --git a/include/vcl/mapmod.hxx b/include/vcl/mapmod.hxx index e6c96048c90c..9af61f8b7e69 100644 --- a/include/vcl/mapmod.hxx +++ b/include/vcl/mapmod.hxx @@ -59,20 +59,20 @@ public: MapMode& operator=( MapMode&& rMapMode ); bool operator==( const MapMode& rMapMode ) const; bool operator!=( const MapMode& rMapMode ) const - { return !(MapMode::operator==( rMapMode )); } + { + return !(MapMode::operator==( rMapMode )); + } bool IsDefault() const; - friend SvStream& ReadMapMode( SvStream& rIStm, MapMode& rMapMode ); - friend SvStream& WriteMapMode( SvStream& rOStm, const MapMode& rMapMode ); - // tdf#117984 needs to be thread-safe due to being used e.g. in Bitmaps // vcl::ScopedBitmapAccess in parallelized 3D renderer typedef o3tl::cow_wrapper< ImplMapMode, o3tl::ThreadSafeRefCountingPolicy > ImplType; + // If only the map unit is set. + bool IsSimple() const; + private: ImplType mpImplMapMode; - - SAL_DLLPRIVATE bool IsSimple() const; }; template<typename charT, typename traits> diff --git a/vcl/qa/cppunit/TypeSerializerTest.cxx b/vcl/qa/cppunit/TypeSerializerTest.cxx index f8de4e9ce3a2..5d7b72b0f560 100644 --- a/vcl/qa/cppunit/TypeSerializerTest.cxx +++ b/vcl/qa/cppunit/TypeSerializerTest.cxx @@ -24,6 +24,7 @@ #include <comphelper/hash.hxx> #include <tools/vcompat.hxx> #include <comphelper/fileformat.h> +#include <tools/fract.hxx> #include <vcl/TypeSerializer.hxx> @@ -67,6 +68,7 @@ private: void testGraphic_Bitmap_NoGfxLink(); void testGraphic_Animation(); void testGraphic_GDIMetaFile(); + void testMapMode(); CPPUNIT_TEST_SUITE(TypeSerializerTest); CPPUNIT_TEST(testGradient); @@ -74,6 +76,7 @@ private: CPPUNIT_TEST(testGraphic_Bitmap_NoGfxLink); CPPUNIT_TEST(testGraphic_Animation); CPPUNIT_TEST(testGraphic_GDIMetaFile); + CPPUNIT_TEST(testMapMode); CPPUNIT_TEST_SUITE_END(); }; @@ -345,6 +348,42 @@ void TypeSerializerTest::testGraphic_GDIMetaFile() } } +void TypeSerializerTest::testMapMode() +{ + { // "simple" case - only map unit is set, IsSimple = true + MapMode aMapMode(MapUnit::Map100thMM); + + SvMemoryStream aStream; + TypeSerializer aSerializer(aStream); + aSerializer.writeMapMode(aMapMode); + aStream.Seek(STREAM_SEEK_TO_BEGIN); + + MapMode aReadMapMode; + aSerializer.readMapMode(aReadMapMode); + CPPUNIT_ASSERT_EQUAL(MapUnit::Map100thMM, aReadMapMode.GetMapUnit()); + CPPUNIT_ASSERT_EQUAL(true, aReadMapMode.IsSimple()); + } + { // "complex" case - map unit, origin and scale are set, IsSimple = false + MapMode aMapMode(MapUnit::MapTwip, Point(5, 10), Fraction(1, 2), Fraction(2, 3)); + + SvMemoryStream aStream; + TypeSerializer aSerializer(aStream); + aSerializer.writeMapMode(aMapMode); + aStream.Seek(STREAM_SEEK_TO_BEGIN); + + MapMode aReadMapMode; + aSerializer.readMapMode(aReadMapMode); + CPPUNIT_ASSERT_EQUAL(MapUnit::MapTwip, aReadMapMode.GetMapUnit()); + CPPUNIT_ASSERT_EQUAL(tools::Long(5), aReadMapMode.GetOrigin().X()); + CPPUNIT_ASSERT_EQUAL(tools::Long(10), aReadMapMode.GetOrigin().Y()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aReadMapMode.GetScaleX().GetNumerator()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), aReadMapMode.GetScaleX().GetDenominator()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), aReadMapMode.GetScaleY().GetNumerator()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), aReadMapMode.GetScaleY().GetDenominator()); + CPPUNIT_ASSERT_EQUAL(false, aReadMapMode.IsSimple()); + } +} + } // namespace CPPUNIT_TEST_SUITE_REGISTRATION(TypeSerializerTest); diff --git a/vcl/source/filter/graphicfilter2.cxx b/vcl/source/filter/graphicfilter2.cxx index 2b66d2d29395..5666497ce08f 100644 --- a/vcl/source/filter/graphicfilter2.cxx +++ b/vcl/source/filter/graphicfilter2.cxx @@ -1062,10 +1062,9 @@ bool GraphicDescriptor::ImpDetectSVM( SvStream& rStm, bool bExtendedInfo ) if( bExtendedInfo ) { MapMode aMapMode; - rStm.SeekRel( 0x06 ); - ReadMapMode( rStm, aMapMode ); TypeSerializer aSerializer(rStm); + aSerializer.readMapMode(aMapMode); aSerializer.readSize(aLogSize); aLogSize = OutputDevice::LogicToLogic( aLogSize, aMapMode, MapMode( MapUnit::Map100thMM ) ); } diff --git a/vcl/source/gdi/TypeSerializer.cxx b/vcl/source/gdi/TypeSerializer.cxx index fb354d7f3dd0..7f0609e01826 100644 --- a/vcl/source/gdi/TypeSerializer.cxx +++ b/vcl/source/gdi/TypeSerializer.cxx @@ -19,6 +19,7 @@ #include <vcl/TypeSerializer.hxx> #include <tools/vcompat.hxx> +#include <tools/fract.hxx> #include <sal/log.hxx> #include <comphelper/fileformat.h> #include <vcl/gdimtf.hxx> @@ -109,7 +110,7 @@ void TypeSerializer::readGfxLink(GfxLink& rGfxLink) if (aCompat.GetVersion() >= 2) { readSize(aSize); - ReadMapMode(mrStream, aMapMode); + readMapMode(aMapMode); bMapAndSizeValid = true; } } @@ -146,7 +147,7 @@ void TypeSerializer::writeGfxLink(const GfxLink& rGfxLink) // Version 2 writeSize(rGfxLink.GetPrefSize()); - WriteMapMode(mrStream, rGfxLink.GetPrefMapMode()); + writeMapMode(rGfxLink.GetPrefMapMode()); } if (rGfxLink.GetDataSize()) @@ -415,4 +416,37 @@ void TypeSerializer::writeGraphic(const Graphic& rGraphic) } } +void TypeSerializer::readMapMode(MapMode& rMapMode) +{ + VersionCompatRead aCompat(mrStream); + sal_uInt16 nTmp16; + Point aOrigin; + Fraction aScaleX; + Fraction aScaleY; + bool bSimple; + + mrStream.ReadUInt16(nTmp16); + MapUnit eUnit = static_cast<MapUnit>(nTmp16); + readPoint(aOrigin); + ReadFraction(mrStream, aScaleX); + ReadFraction(mrStream, aScaleY); + mrStream.ReadCharAsBool(bSimple); + + if (bSimple) + rMapMode = MapMode(eUnit); + else + rMapMode = MapMode(eUnit, aOrigin, aScaleX, aScaleY); +} + +void TypeSerializer::writeMapMode(MapMode const& rMapMode) +{ + VersionCompatWrite aCompat(mrStream, 1); + + mrStream.WriteUInt16(sal_uInt16(rMapMode.GetMapUnit())); + writePoint(rMapMode.GetOrigin()); + WriteFraction(mrStream, rMapMode.GetScaleX()); + WriteFraction(mrStream, rMapMode.GetScaleY()); + mrStream.WriteBool(rMapMode.IsSimple()); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/source/gdi/gdimtf.cxx b/vcl/source/gdi/gdimtf.cxx index 9d329439de80..7ef6c73ce47b 100644 --- a/vcl/source/gdi/gdimtf.cxx +++ b/vcl/source/gdi/gdimtf.cxx @@ -2667,8 +2667,8 @@ SvStream& ReadGDIMetaFile(SvStream& rIStm, GDIMetaFile& rGDIMetaFile, ImplMetaRe std::unique_ptr<VersionCompatRead> pCompat(new VersionCompatRead(rIStm)); rIStm.ReadUInt32( nStmCompressMode ); - ReadMapMode( rIStm, rGDIMetaFile.m_aPrefMapMode ); TypeSerializer aSerializer(rIStm); + aSerializer.readMapMode(rGDIMetaFile.m_aPrefMapMode); aSerializer.readSize(rGDIMetaFile.m_aPrefSize); rIStm.ReadUInt32( nCount ); @@ -2752,8 +2752,8 @@ SvStream& GDIMetaFile::Write( SvStream& rOStm ) VersionCompatWrite aCompat(rOStm, 1); rOStm.WriteUInt32(static_cast<sal_uInt32>(nStmCompressMode)); - WriteMapMode(rOStm, m_aPrefMapMode); TypeSerializer aSerializer(rOStm); + aSerializer.writeMapMode(m_aPrefMapMode); aSerializer.writeSize(m_aPrefSize); rOStm.WriteUInt32(GetActionSize()); } // VersionCompatWrite dtor writes stuff into the header diff --git a/vcl/source/gdi/mapmod.cxx b/vcl/source/gdi/mapmod.cxx index 2ce154ae08e3..925732a66e39 100644 --- a/vcl/source/gdi/mapmod.cxx +++ b/vcl/source/gdi/mapmod.cxx @@ -133,38 +133,6 @@ bool MapMode::IsDefault() const return mpImplMapMode.same_object(theGlobalDefault::get()); } -SvStream& ReadMapMode( SvStream& rIStm, MapMode& rMapMode ) -{ - VersionCompatRead aCompat(rIStm); - sal_uInt16 nTmp16; - - TypeSerializer aSerializer(rIStm); - - rIStm.ReadUInt16( nTmp16 ); rMapMode.mpImplMapMode->meUnit = static_cast<MapUnit>(nTmp16); - aSerializer.readPoint(rMapMode.mpImplMapMode->maOrigin); - ReadFraction( rIStm, rMapMode.mpImplMapMode->maScaleX ); - ReadFraction( rIStm, rMapMode.mpImplMapMode->maScaleY ); - rIStm.ReadCharAsBool( rMapMode.mpImplMapMode->mbSimple ); - - return rIStm; -} - -SvStream& WriteMapMode( SvStream& rOStm, const MapMode& rMapMode ) -{ - VersionCompatWrite aCompat(rOStm, 1); - - TypeSerializer aSerializer(rOStm); - - rOStm.WriteUInt16( static_cast<sal_uInt16>(rMapMode.mpImplMapMode->meUnit) ); - aSerializer.writePoint(rMapMode.mpImplMapMode->maOrigin); - WriteFraction( rOStm, rMapMode.mpImplMapMode->maScaleX ); - WriteFraction( rOStm, rMapMode.mpImplMapMode->maScaleY ); - rOStm.WriteBool( rMapMode.mpImplMapMode->mbSimple ); - - return rOStm; -} - - MapUnit MapMode::GetMapUnit() const { return mpImplMapMode->meUnit; } const Point& MapMode::GetOrigin() const { return mpImplMapMode->maOrigin; } diff --git a/vcl/source/gdi/metaact.cxx b/vcl/source/gdi/metaact.cxx index 02fce9554f14..cc95892240d6 100644 --- a/vcl/source/gdi/metaact.cxx +++ b/vcl/source/gdi/metaact.cxx @@ -2735,13 +2735,15 @@ void MetaMapModeAction::Write( SvStream& rOStm, ImplMetaWriteData* pData ) { MetaAction::Write(rOStm, pData); VersionCompatWrite aCompat(rOStm, 1); - WriteMapMode( rOStm, maMapMode ); + TypeSerializer aSerializer(rOStm); + aSerializer.writeMapMode(maMapMode); } void MetaMapModeAction::Read( SvStream& rIStm, ImplMetaReadData* ) { VersionCompatRead aCompat(rIStm); - ReadMapMode( rIStm, maMapMode ); + TypeSerializer aSerializer(rIStm); + aSerializer.readMapMode(maMapMode); } MetaFontAction::MetaFontAction() : |