diff --git a/basegfx/source/range/b2drange.cxx b/basegfx/source/range/b2drange.cxx index 1f20cce90a48..d43c6d6e12ec 100644 --- a/basegfx/source/range/b2drange.cxx +++ b/basegfx/source/range/b2drange.cxx @@ -48,6 +48,17 @@ namespace basegfx } } + void B2DRange::translate(double fTranslateX, double fTranslateY) + { + if(!(fTools::equalZero(fTranslateX) && fTools::equalZero(fTranslateY))) + { + *this = basegfx::B2DRange(fTranslateX + getMinX(), + fTranslateY + getMinY(), + fTranslateX + getMaxX(), + fTranslateY + getMaxY()); + } + } + B2DRange& B2DRange::operator*=(const basegfx::B2DHomMatrix& rMatrix) { transform(rMatrix); diff --git a/include/basegfx/range/b2drange.hxx b/include/basegfx/range/b2drange.hxx index b0f726ac0e36..9a0aecbdae4c 100644 --- a/include/basegfx/range/b2drange.hxx +++ b/include/basegfx/range/b2drange.hxx @@ -114,6 +114,15 @@ namespace basegfx /** Transform Range by given transformation matrix. */ BASEGFX_DLLPUBLIC void transform(const B2DHomMatrix& rMatrix); + /** Translate Range (ie. move). + Much faster equivalent of transform(createTranslateB2DHomMatrix(xx)). */ + BASEGFX_DLLPUBLIC void translate(double fTranslateX, double fTranslateY); + + inline void translate(const B2DTuple& rTranslate) + { + translate(rTranslate.getX(), rTranslate.getY()); + } + /** Transform Range by given transformation matrix. This operation transforms the Range by transforming all four possible diff --git a/vcl/source/gdi/sallayout.cxx b/vcl/source/gdi/sallayout.cxx index 0513156c3eb3..742ebdfe61c5 100644 --- a/vcl/source/gdi/sallayout.cxx +++ b/vcl/source/gdi/sallayout.cxx @@ -236,7 +236,8 @@ bool SalLayout::GetBoundRect(basegfx::B2DRectangle& rRect) const { if (!aRectangle.isEmpty()) { - aRectangle.transform(basegfx::utils::createTranslateB2DHomMatrix(aPos)); + // translate rectangle to correct position + aRectangle.translate(aPos); // merge rectangle rRect.expand(aRectangle); }