ofz: timeout loading emf with move clip record
Change-Id: Id5d60f0037873598e1447b063e66e9c29840587c Reviewed-on: https://gerrit.libreoffice.org/34740 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
This commit is contained in:
@@ -87,6 +87,13 @@ namespace basegfx
|
|||||||
return tools::solveCrossovers(maRanges,maOrient);
|
return tools::solveCrossovers(maRanges,maOrient);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void transform(const basegfx::B2DHomMatrix& rTranslate)
|
||||||
|
{
|
||||||
|
maBounds.transform(rTranslate);
|
||||||
|
for (auto &a : maRanges)
|
||||||
|
a.transform(rTranslate);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
B2DRange maBounds;
|
B2DRange maBounds;
|
||||||
std::vector<B2DRange> maRanges;
|
std::vector<B2DRange> maRanges;
|
||||||
@@ -148,6 +155,11 @@ namespace basegfx
|
|||||||
return mpImpl->overlaps(rRange);
|
return mpImpl->overlaps(rRange);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void B2DPolyRange::transform(const basegfx::B2DHomMatrix& rTranslate)
|
||||||
|
{
|
||||||
|
mpImpl->transform(rTranslate);
|
||||||
|
}
|
||||||
|
|
||||||
B2DPolyPolygon B2DPolyRange::solveCrossovers() const
|
B2DPolyPolygon B2DPolyRange::solveCrossovers() const
|
||||||
{
|
{
|
||||||
return mpImpl->solveCrossovers();
|
return mpImpl->solveCrossovers();
|
||||||
|
@@ -173,6 +173,13 @@ namespace tools
|
|||||||
addPolyPolygon(rPolyPoly,XOR);
|
addPolyPolygon(rPolyPoly,XOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void transform(const basegfx::B2DHomMatrix& rTranslate)
|
||||||
|
{
|
||||||
|
maPendingRanges.transform(rTranslate);
|
||||||
|
maPendingPolygons.transform(rTranslate);
|
||||||
|
maClipPoly.transform(rTranslate);
|
||||||
|
}
|
||||||
|
|
||||||
B2DPolyPolygon const & getClipPoly() const
|
B2DPolyPolygon const & getClipPoly() const
|
||||||
{
|
{
|
||||||
commitPendingRanges();
|
commitPendingRanges();
|
||||||
@@ -481,6 +488,12 @@ namespace tools
|
|||||||
return mpImpl->getClipPoly();
|
return mpImpl->getClipPoly();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void B2DClipState::transform(const basegfx::B2DHomMatrix& rTranslate)
|
||||||
|
{
|
||||||
|
return mpImpl->transform(rTranslate);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
} // end of namespace tools
|
} // end of namespace tools
|
||||||
} // end of namespace basegfx
|
} // end of namespace basegfx
|
||||||
|
|
||||||
|
@@ -30,6 +30,7 @@ namespace basegfx
|
|||||||
class B2DTuple;
|
class B2DTuple;
|
||||||
class B2DRange;
|
class B2DRange;
|
||||||
class B2DPolyPolygon;
|
class B2DPolyPolygon;
|
||||||
|
class B2DHomMatrix;
|
||||||
class ImplB2DPolyRange;
|
class ImplB2DPolyRange;
|
||||||
|
|
||||||
/** Multiple ranges in one object.
|
/** Multiple ranges in one object.
|
||||||
@@ -84,6 +85,8 @@ namespace basegfx
|
|||||||
*/
|
*/
|
||||||
B2DPolyPolygon solveCrossovers() const;
|
B2DPolyPolygon solveCrossovers() const;
|
||||||
|
|
||||||
|
void transform(const B2DHomMatrix& rTranslate);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
o3tl::cow_wrapper< ImplB2DPolyRange > mpImpl;
|
o3tl::cow_wrapper< ImplB2DPolyRange > mpImpl;
|
||||||
};
|
};
|
||||||
|
@@ -31,6 +31,7 @@ namespace basegfx
|
|||||||
class B2DPolyRange;
|
class B2DPolyRange;
|
||||||
class B2DPolygon;
|
class B2DPolygon;
|
||||||
class B2DPolyPolygon;
|
class B2DPolyPolygon;
|
||||||
|
class B2DHomMatrix;
|
||||||
|
|
||||||
namespace tools
|
namespace tools
|
||||||
{
|
{
|
||||||
@@ -85,6 +86,8 @@ namespace basegfx
|
|||||||
void xorRange(const B2DRange& );
|
void xorRange(const B2DRange& );
|
||||||
void xorPolyPolygon(const B2DPolyPolygon& );
|
void xorPolyPolygon(const B2DPolyPolygon& );
|
||||||
|
|
||||||
|
void transform(const B2DHomMatrix& );
|
||||||
|
|
||||||
B2DPolyPolygon getClipPoly() const;
|
B2DPolyPolygon getClipPoly() const;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
BIN
vcl/qa/cppunit/graphicfilter/data/emf/fail/slow-moveclip-1.emf
Normal file
BIN
vcl/qa/cppunit/graphicfilter/data/emf/fail/slow-moveclip-1.emf
Normal file
Binary file not shown.
@@ -78,14 +78,9 @@ void WinMtfClipPath::setClipPath( const tools::PolyPolygon& rPolyPolygon, sal_In
|
|||||||
|
|
||||||
void WinMtfClipPath::moveClipRegion( const Size& rSize )
|
void WinMtfClipPath::moveClipRegion( const Size& rSize )
|
||||||
{
|
{
|
||||||
// what a weird concept. emulate, don't want this in B2DClipState
|
|
||||||
// API
|
|
||||||
basegfx::B2DPolyPolygon aCurrClip=maClip.getClipPoly();
|
|
||||||
basegfx::B2DHomMatrix aTranslate;
|
basegfx::B2DHomMatrix aTranslate;
|
||||||
aTranslate.translate(rSize.Width(), rSize.Height());
|
aTranslate.translate(rSize.Width(), rSize.Height());
|
||||||
|
maClip.transform(aTranslate);
|
||||||
aCurrClip.transform(aTranslate);
|
|
||||||
maClip = basegfx::tools::B2DClipState( aCurrClip );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WinMtfClipPath::setDefaultClipPath()
|
void WinMtfClipPath::setDefaultClipPath()
|
||||||
@@ -902,7 +897,7 @@ void WinMtfOutput::UpdateClipRegion()
|
|||||||
{
|
{
|
||||||
//this makes cases like tdf#45820 work in reasonable time, and I feel in theory should
|
//this makes cases like tdf#45820 work in reasonable time, and I feel in theory should
|
||||||
//be just fine. In practice I see the output is different so needs work before its the
|
//be just fine. In practice I see the output is different so needs work before its the
|
||||||
//default, but for file fuzzing it should good enough
|
//default, but for file fuzzing it should be good enough
|
||||||
if (mbComplexClip)
|
if (mbComplexClip)
|
||||||
{
|
{
|
||||||
mpGDIMetaFile->AddAction(
|
mpGDIMetaFile->AddAction(
|
||||||
|
Reference in New Issue
Block a user