Rebased ref, commits from common ancestor:
commit 36167ff3d9bfca7095b340e33d3c5d7074945f66
Author: Tomaž Vajngerl <[email protected]>
AuthorDate: Sun Mar 5 18:48:23 2023 +0900
Commit: Tomaž Vajngerl <[email protected]>
CommitDate: Tue Feb 6 13:29:23 2024 +0900
svx: use gfx::Length based types directly in SdrTextObj::NbcResize
Change-Id: I839430b30685994e1767998b353c63b97f461284
diff --git a/svx/source/svdraw/svdotxtr.cxx b/svx/source/svdraw/svdotxtr.cxx
index 7ed97774119d..f1abaf11e1b3 100644
--- a/svx/source/svdraw/svdotxtr.cxx
+++ b/svx/source/svdraw/svdotxtr.cxx
@@ -122,81 +122,102 @@ void SdrTextObj::NbcMove(const Size& rSize)
void SdrTextObj::NbcResize(const Point& rRef, const Fraction& xFact, const
Fraction& yFact)
{
- bool bNotSheared=maGeo.m_nShearAngle==0_deg100;
- bool bRotate90=bNotSheared && maGeo.m_nRotationAngle.get() % 9000 ==0;
- bool bXMirr=(xFact.GetNumerator()<0) != (xFact.GetDenominator()<0);
- bool bYMirr=(yFact.GetNumerator()<0) != (yFact.GetDenominator()<0);
- if (bXMirr || bYMirr) {
+ bool bNotSheared = maGeo.m_nShearAngle == 0_deg100;
+ bool bRotate90 = bNotSheared && maGeo.m_nRotationAngle.get() % 9000 == 0;
+
+ bool bXMirrored = (xFact.GetNumerator() < 0) != (xFact.GetDenominator() <
0);
+ bool bYMirrored = (yFact.GetNumerator() < 0) != (yFact.GetDenominator() <
0);
+
+ double fFactorX = xFact.IsValid() ? double(xFact) : 1.0;
+ double fFactorY = yFact.IsValid() ? double(yFact) : 1.0;
+
+ if (bXMirrored || bYMirrored)
+ {
Point aRef1(GetSnapRect().Center());
- if (bXMirr) {
+ if (bXMirrored)
+ {
Point aRef2(aRef1);
aRef2.AdjustY( 1 );
NbcMirrorGluePoints(aRef1,aRef2);
}
- if (bYMirr) {
+ if (bYMirrored)
+ {
Point aRef2(aRef1);
aRef2.AdjustX( 1 );
NbcMirrorGluePoints(aRef1,aRef2);
}
}
- if (maGeo.m_nRotationAngle==0_deg100 && maGeo.m_nShearAngle==0_deg100) {
- auto aRectangle = getRectangle();
- ResizeRect(aRectangle, rRef, xFact, yFact);
- setRectangle(aRectangle);
- if (bYMirr)
+ if (maGeo.m_nRotationAngle == 0_deg100 && maGeo.m_nShearAngle == 0_deg100)
+ {
+ auto eUnit = getSdrModelFromSdrObject().getUnit();
+ gfx::Tuple2DL aReference = createTupleFromPoint(rRef, eUnit);
+ svx::resizeRange(maRectangleRange, aReference, fFactorX, fFactorY);
+
+ if (bYMirrored)
{
- //maRectangle.Normalize();
- moveRectangle(aRectangle.Right() - aRectangle.Left(),
aRectangle.Bottom() - aRectangle.Top());
- maGeo.m_nRotationAngle=18000_deg100;
+ maRectangleRange.shift(maRectangleRange.getWidth(),
maRectangleRange.getHeight());
+ maGeo.m_nRotationAngle = 18000_deg100;
maGeo.RecalcSinCos();
}
}
else
{
- tools::Polygon aPol(Rect2Poly(getRectangle(), maGeo));
+ tools::Polygon aPolygon(Rect2Poly(getRectangle(), maGeo));
- for(sal_uInt16 a(0); a < aPol.GetSize(); a++)
+ for (sal_uInt16 a(0); a < aPolygon.GetSize(); a++)
{
- ResizePoint(aPol[a], rRef, xFact, yFact);
+ ResizePoint(aPolygon[a], rRef, xFact, yFact);
}
- if(bXMirr != bYMirr)
+ if (bXMirrored != bYMirrored)
{
// turn polygon and move it a little
- tools::Polygon aPol0(aPol);
+ tools::Polygon aPol0(aPolygon);
- aPol[0] = aPol0[1];
- aPol[1] = aPol0[0];
- aPol[2] = aPol0[3];
- aPol[3] = aPol0[2];
- aPol[4] = aPol0[1];
+ aPolygon[0] = aPol0[1];
+ aPolygon[1] = aPol0[0];
+ aPolygon[2] = aPol0[3];
+ aPolygon[3] = aPol0[2];
+ aPolygon[4] = aPol0[1];
}
- tools::Rectangle aRectangle = svx::polygonToRectangle(aPol, maGeo);
+ tools::Rectangle aRectangle = svx::polygonToRectangle(aPolygon, maGeo);
setRectangle(aRectangle);
}
- if (bRotate90) {
- bool bRota90=maGeo.m_nRotationAngle.get() % 9000 ==0;
- if (!bRota90) { // there's seems to be a rounding error occurring:
correct it
- Degree100 a=NormAngle36000(maGeo.m_nRotationAngle);
- if (a<4500_deg100) a=0_deg100;
- else if (a<13500_deg100) a=9000_deg100;
- else if (a<22500_deg100) a=18000_deg100;
- else if (a<31500_deg100) a=27000_deg100;
- else a=0_deg100;
- maGeo.m_nRotationAngle=a;
+ if (bRotate90)
+ {
+ bool bRota90 = maGeo.m_nRotationAngle.get() % 9000 == 0;
+ if (!bRota90)
+ {
+ // there's seems to be a rounding error occurring: correct it
+
+ Degree100 angle = NormAngle36000(maGeo.m_nRotationAngle);
+ if (angle < 4500_deg100)
+ angle = 0_deg100;
+ else if (angle < 13500_deg100)
+ angle = 9000_deg100;
+ else if (angle < 22500_deg100)
+ angle = 18000_deg100;
+ else if (angle < 31500_deg100)
+ angle = 27000_deg100;
+ else
+ angle = 0_deg100;
+
+ maGeo.m_nRotationAngle = angle;
maGeo.RecalcSinCos();
}
- if (bNotSheared!=(maGeo.m_nShearAngle==0_deg100)) { // correct a
rounding error occurring with Shear
- maGeo.m_nShearAngle=0_deg100;
+ if (bNotSheared != (maGeo.m_nShearAngle == 0_deg100))
+ {
+ // correct a rounding error occurring with Shear
+ maGeo.m_nShearAngle = 0_deg100;
maGeo.RecalcTan();
}
}
AdaptTextMinSize();
- if(mbTextFrame && !getSdrModelFromSdrObject().IsPasteResize())
+ if (mbTextFrame && !getSdrModelFromSdrObject().IsPasteResize())
{
NbcAdjustTextFrameWidthAndHeight();
}
commit 8b0ca7e5da693d72d7ec0b83ad1ff9afc836a95a
Author: Tomaž Vajngerl <[email protected]>
AuthorDate: Sun Mar 5 14:46:10 2023 +0900
Commit: Tomaž Vajngerl <[email protected]>
CommitDate: Tue Feb 6 13:29:23 2024 +0900
svx: use gfx::Length based types directly in SdrTextObj::NbcMove
Change-Id: Ib0d4a9f60a2ae7f64d914c7a39aa146fef6a9f74
diff --git a/svx/source/svdraw/svdotxtr.cxx b/svx/source/svdraw/svdotxtr.cxx
index 8943cbb2f8f2..7ed97774119d 100644
--- a/svx/source/svdraw/svdotxtr.cxx
+++ b/svx/source/svdraw/svdotxtr.cxx
@@ -40,6 +40,18 @@
using namespace com::sun::star;
+namespace
+{
+
+gfx::Tuple2DL createTupleFromPoint(Point const& rPoint, gfx::LengthUnit eUnit
= gfx::LengthUnit::hmm)
+{
+ auto x = gfx::Length::from(eUnit, rPoint.X());
+ auto y = gfx::Length::from(eUnit, rPoint.Y());
+ return gfx::Tuple2DL(x, y);
+}
+
+} // end anonymous
+
void SdrTextObj::NbcSetSnapRect(const tools::Rectangle& rRect)
{
if (maGeo.m_nRotationAngle || maGeo.m_nShearAngle)
@@ -95,8 +107,15 @@ Degree100 SdrTextObj::GetShearAngle(bool /*bVertical*/)
const
void SdrTextObj::NbcMove(const Size& rSize)
{
- moveRectangle(rSize.Width(), rSize.Height());
- moveOutRectangle(rSize.Width(), rSize.Height());
+ gfx::Tuple2DL aDelta = createTupleFromPoint(Point(rSize.Width(),
rSize.Height()), getSdrModelFromSdrObject().getUnit());
+ gfx::Length xDelta = aDelta.getX();
+ gfx::Length yDelta = aDelta.getY();
+
+ if (xDelta == 0_emu && yDelta == 0_emu)
+ return;
+
+ maRectangleRange.shift(xDelta, yDelta);
+ m_aOutterRange.shift(xDelta, yDelta);
maSnapRect.Move(rSize);
SetBoundAndSnapRectsDirty(true);
}
@@ -186,19 +205,6 @@ void SdrTextObj::NbcResize(const Point& rRef, const
Fraction& xFact, const Fract
SetBoundAndSnapRectsDirty();
}
-namespace
-{
-
-gfx::Tuple2DL createTupleFromPoint(Point const& rPoint, gfx::LengthUnit eUnit
= gfx::LengthUnit::hmm)
-{
- auto x = gfx::Length::from(eUnit, rPoint.X());
- auto y = gfx::Length::from(eUnit, rPoint.Y());
- return gfx::Tuple2DL(x, y);
-}
-
-} // end anonymous
-
-
void SdrTextObj::NbcRotate(const Point& rRef, Degree100 nAngle, double sn,
double cs)
{
SetGlueReallyAbsolute(true);
commit 6a4447878aa97b754e75804cdfe5fc5b4d1bb1b5
Author: Tomaž Vajngerl <[email protected]>
AuthorDate: Sat Mar 4 22:12:51 2023 +0900
Commit: Tomaž Vajngerl <[email protected]>
CommitDate: Tue Feb 6 13:29:23 2024 +0900
svx: use gfx::Length based types directly in SdrTextObj::NbcRotate
Change-Id: Ic5ee712fa7507e016441595f8847649fd18b50ee
diff --git a/include/svx/svdtrans.hxx b/include/svx/svdtrans.hxx
index 79ef179c1a8c..62f487fc04df 100644
--- a/include/svx/svdtrans.hxx
+++ b/include/svx/svdtrans.hxx
@@ -46,13 +46,15 @@ SVXCORE_DLLPUBLIC void ResizeRect(tools::Rectangle& rRect,
const Point& rRef, co
namespace svx
{
SVXCORE_DLLPUBLIC void resizeRange(gfx::Range2DLWrap& rRange, gfx::Tuple2DL
const& rReference, double fFactorX, double fFactorY);
+SVXCORE_DLLPUBLIC gfx::Tuple2DL rotatePoint(gfx::Tuple2DL const& rPoint,
gfx::Tuple2DL const& rReference, double sinAngle, double cosAngle);
}
inline void ResizePoint(Point& rPnt, const Point& rRef, const Fraction&
xFract, const Fraction& yFract);
void ResizePoly(tools::Polygon& rPoly, const Point& rRef, const Fraction&
xFact, const Fraction& yFact);
void ResizeXPoly(XPolygon& rPoly, const Point& rRef, const Fraction& xFact,
const Fraction& yFact);
-inline void RotatePoint(Point& rPnt, const Point& rRef, double sn, double cs);
+SVXCORE_DLLPUBLIC void RotatePoint(Point& rPnt, const Point& rRef, double sn,
double cs);
+
SVXCORE_DLLPUBLIC void RotatePoly(tools::Polygon& rPoly, const Point& rRef,
double sn, double cs);
void RotateXPoly(XPolygon& rPoly, const Point& rRef, double sn, double cs);
void RotateXPoly(XPolyPolygon& rPoly, const Point& rRef, double sn, double cs);
@@ -107,14 +109,6 @@ inline void ResizePoint(Point& rPnt, const Point& rRef,
const Fraction& xFract,
rPnt.setY(rRef.Y() + FRound( (rPnt.Y() - rRef.Y()) * nyFract ));
}
-inline void RotatePoint(Point& rPnt, const Point& rRef, double sn, double cs)
-{
- tools::Long dx=rPnt.X()-rRef.X();
- tools::Long dy=rPnt.Y()-rRef.Y();
- rPnt.setX(FRound(rRef.X()+dx*cs+dy*sn));
- rPnt.setY(FRound(rRef.Y()+dy*cs-dx*sn));
-}
-
inline void ShearPoint(Point& rPnt, const Point& rRef, double tn, bool bVShear)
{
if (!bVShear) { // Horizontal
diff --git a/svx/qa/unit/svdraw.cxx b/svx/qa/unit/svdraw.cxx
index b2128ac75c93..d2f77b7bb556 100644
--- a/svx/qa/unit/svdraw.cxx
+++ b/svx/qa/unit/svdraw.cxx
@@ -600,7 +600,7 @@ CPPUNIT_TEST_FIXTURE(SvdrawTest, testRectangleObjectMove)
pModel->GetItemPool().FreezeIdRanges();
rtl::Reference<SdrPage> pPage(new SdrPage(*pModel, false));
- pPage->setSize({50_cm, 50_cm});
+ pPage->setSize({ 50_cm, 50_cm });
pModel->InsertPage(pPage.get(), 0);
tools::Rectangle aRect(Point(), Size(100, 100));
@@ -622,7 +622,7 @@ CPPUNIT_TEST_FIXTURE(SvdrawTest, testRectangleObjectRotate)
pModel->GetItemPool().FreezeIdRanges();
rtl::Reference<SdrPage> pPage(new SdrPage(*pModel, false));
- pPage->setSize({50_cm, 50_cm});
+ pPage->setSize({ 50_cm, 50_cm });
pModel->InsertPage(pPage.get(), 0);
{
@@ -820,6 +820,46 @@ CPPUNIT_TEST_FIXTURE(SvdrawTest, testResizeRect)
CPPUNIT_ASSERT_EQUAL(tools::Rectangle(6, 6, 10, 10), aRectangle);
}
}
+
+CPPUNIT_TEST_FIXTURE(SvdrawTest, testRotatePoint2D)
+{
+ {
+ auto angle = 18000_deg100;
+ double angleRadians = toRadians(angle);
+ gfx::Tuple2DL aPoint(2_cm, 1_cm);
+ gfx::Tuple2DL aReference(1_cm, 1_cm);
+ aPoint
+ = svx::rotatePoint(aPoint, aReference, std::sin(angleRadians),
std::cos(angleRadians));
+
+ CPPUNIT_ASSERT_EQUAL(0_cm, aPoint.getX());
+ CPPUNIT_ASSERT_EQUAL(1_cm, aPoint.getY());
+ }
+
+ {
+ auto angle = 9000_deg100;
+ double angleRadians = toRadians(angle);
+ gfx::Tuple2DL aPoint(2_cm, 1_cm);
+ gfx::Tuple2DL aReference(1_cm, 1_cm);
+ aPoint
+ = svx::rotatePoint(aPoint, aReference, std::sin(angleRadians),
std::cos(angleRadians));
+
+ CPPUNIT_ASSERT_EQUAL(1_cm, aPoint.getX());
+ CPPUNIT_ASSERT_EQUAL(0_cm, aPoint.getY());
+ }
+
+ {
+ auto angle = 18000_deg100;
+ double angleRadians = toRadians(angle);
+ gfx::Tuple2DL aPoint(1_cm, 1_cm);
+ gfx::Tuple2DL aReference(2_cm, 2_cm);
+ aPoint
+ = svx::rotatePoint(aPoint, aReference, std::sin(angleRadians),
std::cos(angleRadians));
+
+ CPPUNIT_ASSERT_EQUAL(3_cm, aPoint.getX());
+ CPPUNIT_ASSERT_EQUAL(3_cm, aPoint.getY());
+ }
+}
+
} // end anonymous namespace
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/source/svdraw/svdotxtr.cxx b/svx/source/svdraw/svdotxtr.cxx
index 1d1336e856d6..8943cbb2f8f2 100644
--- a/svx/source/svdraw/svdotxtr.cxx
+++ b/svx/source/svdraw/svdotxtr.cxx
@@ -186,28 +186,50 @@ void SdrTextObj::NbcResize(const Point& rRef, const
Fraction& xFact, const Fract
SetBoundAndSnapRectsDirty();
}
+namespace
+{
+
+gfx::Tuple2DL createTupleFromPoint(Point const& rPoint, gfx::LengthUnit eUnit
= gfx::LengthUnit::hmm)
+{
+ auto x = gfx::Length::from(eUnit, rPoint.X());
+ auto y = gfx::Length::from(eUnit, rPoint.Y());
+ return gfx::Tuple2DL(x, y);
+}
+
+} // end anonymous
+
+
void SdrTextObj::NbcRotate(const Point& rRef, Degree100 nAngle, double sn,
double cs)
{
SetGlueReallyAbsolute(true);
- tools::Rectangle aRectangle = getRectangle();
- tools::Long dx = aRectangle.Right() - aRectangle.Left();
- tools::Long dy = aRectangle.Bottom() - aRectangle.Top();
- Point aPoint1(aRectangle.TopLeft());
- RotatePoint(aPoint1, rRef, sn, cs);
- Point aPoint2(aPoint1.X() + dx, aPoint1.Y() + dy);
- aRectangle = tools::Rectangle(aPoint1, aPoint2);
- setRectangle(aRectangle);
+ gfx::Tuple2DL aReference = createTupleFromPoint(rRef,
getSdrModelFromSdrObject().getUnit());
- if (maGeo.m_nRotationAngle==0_deg100) {
- maGeo.m_nRotationAngle=NormAngle36000(nAngle);
- maGeo.mfSinRotationAngle=sn;
- maGeo.mfCosRotationAngle=cs;
- } else {
- maGeo.m_nRotationAngle=NormAngle36000(maGeo.m_nRotationAngle+nAngle);
+ gfx::Length aWidth = maRectangleRange.getWidth();
+ gfx::Length aHeight = maRectangleRange.getHeight();
+
+ gfx::Tuple2DL aPoint(maRectangleRange.getMinX(),
maRectangleRange.getMinY());
+ gfx::Tuple2DL aRotated = svx::rotatePoint(aPoint, aReference, sn, cs);
+
+ maRectangleRange = gfx::Range2DLWrap(
+ aRotated.getX(),
+ aRotated.getY(),
+ aRotated.getX() + aWidth,
+ aRotated.getY() + aHeight);
+
+ if (maGeo.m_nRotationAngle == 0_deg100)
+ {
+ maGeo.m_nRotationAngle = NormAngle36000(nAngle);
+ maGeo.mfSinRotationAngle = sn;
+ maGeo.mfCosRotationAngle = cs;
+ }
+ else
+ {
+ maGeo.m_nRotationAngle = NormAngle36000(maGeo.m_nRotationAngle +
nAngle);
maGeo.RecalcSinCos();
}
+
SetBoundAndSnapRectsDirty();
- NbcRotateGluePoints(rRef,nAngle,sn,cs);
+ NbcRotateGluePoints(rRef, nAngle, sn, cs);
SetGlueReallyAbsolute(false);
}
diff --git a/svx/source/svdraw/svdtrans.cxx b/svx/source/svdraw/svdtrans.cxx
index d4c6ce015b47..725572cddab4 100644
--- a/svx/source/svdraw/svdtrans.cxx
+++ b/svx/source/svdraw/svdtrans.cxx
@@ -75,8 +75,24 @@ void resizeRange(gfx::Range2DLWrap& rRange, gfx::Tuple2DL
const& rReference, dou
rRange = gfx::Range2DLWrap(left, top, right, bottom, rRange.getUnit());
}
+gfx::Tuple2DL rotatePoint(gfx::Tuple2DL const& rPoint, gfx::Tuple2DL const&
rReference, double sinAngle, double cosAngle)
+{
+ gfx::Length dx = rPoint.getX() - rReference.getX();
+ gfx::Length dy = rPoint.getY() - rReference.getY();
+ gfx::Length x = rReference.getX() + dx * cosAngle + dy * sinAngle;
+ gfx::Length y = rReference.getY() + dy * cosAngle - dx * sinAngle;
+ return {x, y};
+}
+
} // end svx namespace
+void RotatePoint(Point& rPnt, const Point& rRef, double sn, double cs)
+{
+ tools::Long dx=rPnt.X()-rRef.X();
+ tools::Long dy=rPnt.Y()-rRef.Y();
+ rPnt.setX(FRound(rRef.X()+dx*cs+dy*sn));
+ rPnt.setY(FRound(rRef.Y()+dy*cs-dx*sn));
+}
void ResizePoly(tools::Polygon& rPoly, const Point& rRef, const Fraction&
xFact, const Fraction& yFact)
{
commit cf67e0d5a7aa8bc022532379b0440ae7077a18ec
Author: Tomaž Vajngerl <[email protected]>
AuthorDate: Tue Feb 21 22:05:02 2023 +0900
Commit: Tomaž Vajngerl <[email protected]>
CommitDate: Tue Feb 6 13:29:23 2024 +0900
svx: change SdrObjGeoData aBoundRectangle using gfx::Range2DLWrap
Change-Id: I13213ea2bdbfc5badb87d1bbd836192b8ae45e72
diff --git a/include/svx/svdgeodata.hxx b/include/svx/svdgeodata.hxx
index 7f5a8b9713a4..c87dacab99a6 100644
--- a/include/svx/svdgeodata.hxx
+++ b/include/svx/svdgeodata.hxx
@@ -23,14 +23,27 @@
#include <svx/svdglue.hxx>
#include <tools/gen.hxx>
#include <optional>
+#include <basegfx/units/Range2DLWrap.hxx>
/**
* All geometrical data of an arbitrary object for use in undo/redo
*/
class SVXCORE_DLLPUBLIC SdrObjGeoData
{
+private:
+ gfx::Range2DLWrap maBoundRange;
+
public:
- tools::Rectangle aBoundRect;
+ gfx::Range2DLWrap const& getBoundRange() const
+ {
+ return maBoundRange;
+ }
+
+ void setBoundRange(gfx::Range2DLWrap const& rRange)
+ {
+ maBoundRange = rRange;
+ }
+
Point aAnchor;
std::optional<SdrGluePointList> moGluePoints;
bool bMovProt;
diff --git a/include/svx/svdobj.hxx b/include/svx/svdobj.hxx
index abafa2455545..d2e6eb678552 100644
--- a/include/svx/svdobj.hxx
+++ b/include/svx/svdobj.hxx
@@ -394,6 +394,7 @@ public:
// non-useful BoundRects sometimes) i rename that method from
GetBoundRect() to
// GetCurrentBoundRect().
virtual const tools::Rectangle& GetCurrentBoundRect() const;
+ virtual const gfx::Range2DLWrap& getCurrentBoundRange() const;
// To have a possibility to get the last calculated BoundRect e.g for
producing
// the first rectangle for repaints (old and new need to be used) without
forcing
diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx
index 1c06b2a09e9a..38ce5472cfa0 100644
--- a/svx/source/svdraw/svdobj.cxx
+++ b/svx/source/svdraw/svdobj.cxx
@@ -956,6 +956,13 @@ const tools::Rectangle& SdrObject::GetCurrentBoundRect()
const
return getOutRectangle();
}
+const gfx::Range2DLWrap& SdrObject::getCurrentBoundRange() const
+{
+ if (m_aOutterRange.isEmpty())
+ const_cast<SdrObject*>(this)->RecalcBoundRect();
+ return m_aOutterRange;
+}
+
// To have a possibility to get the last calculated BoundRect e.g for producing
// the first rectangle for repaints (old and new need to be used) without
forcing
// a RecalcBoundRect (which may be problematical and expensive sometimes) I
add here
@@ -1890,7 +1897,7 @@ std::unique_ptr<SdrObjGeoData> SdrObject::NewGeoData()
const
void SdrObject::SaveGeoData(SdrObjGeoData& rGeo) const
{
- rGeo.aBoundRect =GetCurrentBoundRect();
+ rGeo.setBoundRange(getCurrentBoundRange());
rGeo.aAnchor =m_aAnchor ;
rGeo.bMovProt =m_bMovProt ;
rGeo.bSizProt =m_bSizProt ;
@@ -1910,7 +1917,7 @@ void SdrObject::SaveGeoData(SdrObjGeoData& rGeo) const
void SdrObject::RestoreGeoData(const SdrObjGeoData& rGeo)
{
SetBoundAndSnapRectsDirty();
- setOutRectangle(rGeo.aBoundRect);
+ m_aOutterRange = rGeo.getBoundRange();
m_aAnchor =rGeo.aAnchor ;
m_bMovProt =rGeo.bMovProt ;
m_bSizProt =rGeo.bSizProt ;
commit dc86fd38e8952c76fefdbb519275d3b81880fe78
Author: Tomaž Vajngerl <[email protected]>
AuthorDate: Fri Feb 10 18:10:33 2023 +0900
Commit: Tomaž Vajngerl <[email protected]>
CommitDate: Tue Feb 6 13:29:23 2024 +0900
svx: refactor SdrObject resize to use m_aOutterRange directly
Change-Id: I77aad10b32a53545c7f7bbf8fd87b914395a5bad
diff --git a/include/svx/svdtrans.hxx b/include/svx/svdtrans.hxx
index ae225426afd6..79ef179c1a8c 100644
--- a/include/svx/svdtrans.hxx
+++ b/include/svx/svdtrans.hxx
@@ -29,6 +29,9 @@
#include <tools/mapunit.hxx>
#include <tools/poly.hxx>
+#include <basegfx/units/Range2DLWrap.hxx>
+#include <basegfx/units/LengthTypes.hxx>
+
// That maximum shear angle
constexpr Degree100 SDRMAXSHEAR(8900);
@@ -39,6 +42,12 @@ inline void MovePoly(tools::Polygon& rPoly, const Size& S)
{ rPoly.Move(S.W
void MoveXPoly(XPolygon& rPoly, const Size& S);
SVXCORE_DLLPUBLIC void ResizeRect(tools::Rectangle& rRect, const Point& rRef,
const Fraction& xFact, const Fraction& yFact);
+
+namespace svx
+{
+SVXCORE_DLLPUBLIC void resizeRange(gfx::Range2DLWrap& rRange, gfx::Tuple2DL
const& rReference, double fFactorX, double fFactorY);
+}
+
inline void ResizePoint(Point& rPnt, const Point& rRef, const Fraction&
xFract, const Fraction& yFract);
void ResizePoly(tools::Polygon& rPoly, const Point& rRef, const Fraction&
xFact, const Fraction& yFact);
void ResizeXPoly(XPolygon& rPoly, const Point& rRef, const Fraction& xFact,
const Fraction& yFact);
diff --git a/svx/qa/unit/svdraw.cxx b/svx/qa/unit/svdraw.cxx
index 3f91084d6483..b2128ac75c93 100644
--- a/svx/qa/unit/svdraw.cxx
+++ b/svx/qa/unit/svdraw.cxx
@@ -7,7 +7,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-#include <test/unoapixml_test.hxx>
+#include <basegfx/units/Length.hxx>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/drawing/XDrawPagesSupplier.hpp>
@@ -38,6 +38,8 @@
#include <sdr/contact/objectcontactofobjlistpainter.hxx>
+#include <test/unoapixml_test.hxx>
+
using namespace ::com::sun::star;
namespace
@@ -711,6 +713,7 @@ CPPUNIT_TEST_FIXTURE(SvdrawTest, testRotatePoint)
}
}
+<<<<<<< HEAD
CPPUNIT_TEST_FIXTURE(SvdrawTest, testClipVerticalTextOverflow)
{
// File contains a slide with 4 rectangle shapes with text inside
@@ -754,6 +757,69 @@ CPPUNIT_TEST_FIXTURE(SvdrawTest,
testClipVerticalTextOverflow)
assertXPath(pDocument, "((//sdrblocktext)[7]//textsimpleportion)[1]"_ostr,
"x"_ostr, "25417");
assertXPath(pDocument, "((//sdrblocktext)[7]//textsimpleportion)[3]"_ostr,
"x"_ostr, "23893");
}
+
+CPPUNIT_TEST_FIXTURE(SvdrawTest, testResizeRect)
+{
+ {
+ tools::Rectangle aRectangle(1, 1, 10, 10);
+ Point aReference(1, 1);
+ ResizeRect(aRectangle, aReference, Fraction(1, 2), Fraction(1, 2));
+
+ CPPUNIT_ASSERT_EQUAL(tools::Rectangle(1, 1, 6, 6), aRectangle);
+ }
+
+ {
+ tools::Rectangle aRectangle(1, 1, 10, 10);
+ Point aReference(10, 10);
+ ResizeRect(aRectangle, aReference, Fraction(1, 2), Fraction(1, 2));
+
+ CPPUNIT_ASSERT_EQUAL(tools::Rectangle(5, 5, 10, 10), aRectangle);
+ }
+
+ {
+ gfx::Range2DLWrap aRange(1_hmm, 1_hmm, 10_hmm, 10_hmm);
+ CPPUNIT_ASSERT_EQUAL(9_hmm, aRange.getWidth());
+ CPPUNIT_ASSERT_EQUAL(9_hmm, aRange.getHeight());
+
+ gfx::Tuple2DL aReference(1_hmm, 1_hmm);
+ svx::resizeRange(aRange, aReference, 0.5, 0.5);
+
+ CPPUNIT_ASSERT_EQUAL(false, aRange.isEmpty());
+
+ CPPUNIT_ASSERT_EQUAL(1_hmm, aRange.getMinX());
+ CPPUNIT_ASSERT_EQUAL(5.5_hmm, aRange.getMaxX());
+ CPPUNIT_ASSERT_EQUAL(1_hmm, aRange.getMinY());
+ CPPUNIT_ASSERT_EQUAL(5.5_hmm, aRange.getMaxY());
+
+ CPPUNIT_ASSERT_EQUAL(4.5_hmm, aRange.getWidth());
+ CPPUNIT_ASSERT_EQUAL(4.5_hmm, aRange.getHeight());
+
+ auto aRectangle = aRange.toToolsRect();
+ CPPUNIT_ASSERT_EQUAL(tools::Rectangle(1, 1, 6, 6), aRectangle);
+ }
+
+ {
+ gfx::Range2DLWrap aRange(1_hmm, 1_hmm, 10_hmm, 10_hmm);
+ CPPUNIT_ASSERT_EQUAL(9_hmm, aRange.getWidth());
+ CPPUNIT_ASSERT_EQUAL(9_hmm, aRange.getHeight());
+
+ gfx::Tuple2DL aReference(10_hmm, 10_hmm);
+ svx::resizeRange(aRange, aReference, 0.5, 0.5);
+
+ CPPUNIT_ASSERT_EQUAL(false, aRange.isEmpty());
+
+ CPPUNIT_ASSERT_EQUAL(5.5_hmm, aRange.getMinX());
+ CPPUNIT_ASSERT_EQUAL(10_hmm, aRange.getMaxX());
+ CPPUNIT_ASSERT_EQUAL(5.5_hmm, aRange.getMinY());
+ CPPUNIT_ASSERT_EQUAL(10_hmm, aRange.getMaxY());
+
+ CPPUNIT_ASSERT_EQUAL(4.5_hmm, aRange.getWidth());
+ CPPUNIT_ASSERT_EQUAL(4.5_hmm, aRange.getHeight());
+
+ auto aRectangle = aRange.toToolsRect();
+ CPPUNIT_ASSERT_EQUAL(tools::Rectangle(6, 6, 10, 10), aRectangle);
+ }
+}
} // end anonymous namespace
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx
index 63a112813bd3..1c06b2a09e9a 100644
--- a/svx/source/svdraw/svdobj.cxx
+++ b/svx/source/svdraw/svdobj.cxx
@@ -33,6 +33,7 @@
#include <basegfx/polygon/b2dpolypolygoncutter.hxx>
#include <basegfx/polygon/b2dpolypolygontools.hxx>
#include <basegfx/units/Range2DLWrap.hxx>
+#include <basegfx/units/LengthTypes.hxx>
#include <basegfx/range/b2drange.hxx>
#include <drawinglayer/processor2d/contourextractor2d.hxx>
#include <drawinglayer/processor2d/linegeometryextractor2d.hxx>
@@ -970,10 +971,8 @@ void SdrObject::RecalcBoundRect()
if ((getSdrModelFromSdrObject().isLocked()) || comphelper::IsFuzzing())
return;
- auto const& rRectangle = getOutRectangle();
-
// central new method which will calculate the BoundRect using primitive
geometry
- if (!rRectangle.IsEmpty())
+ if (!isOutRectangleEmpty())
return;
// Use view-independent data - we do not want any connections
@@ -1428,24 +1427,32 @@ void SdrObject::NbcMove(const Size& rSize)
void SdrObject::NbcResize(const Point& rRef, const Fraction& xFact, const
Fraction& yFact)
{
- bool bXMirr=(xFact.GetNumerator()<0) != (xFact.GetDenominator()<0);
- bool bYMirr=(yFact.GetNumerator()<0) != (yFact.GetDenominator()<0);
- if (bXMirr || bYMirr) {
+ bool bXMirror = (xFact.GetNumerator() < 0) != (xFact.GetDenominator() < 0);
+ bool bYMirror = (yFact.GetNumerator() < 0) != (yFact.GetDenominator() < 0);
+ if (bXMirror || bYMirror)
+ {
Point aRef1(GetSnapRect().Center());
- if (bXMirr) {
+ if (bXMirror)
+ {
Point aRef2(aRef1);
aRef2.AdjustY( 1 );
- NbcMirrorGluePoints(aRef1,aRef2);
+ NbcMirrorGluePoints(aRef1, aRef2);
}
- if (bYMirr) {
+ if (bYMirror)
+ {
Point aRef2(aRef1);
aRef2.AdjustX( 1 );
- NbcMirrorGluePoints(aRef1,aRef2);
+ NbcMirrorGluePoints(aRef1, aRef2);
}
}
- auto aRectangle = getOutRectangle();
- ResizeRect(aRectangle, rRef, xFact, yFact);
- setOutRectangle(aRectangle);
+
+ auto eUnit = getSdrModelFromSdrObject().getUnit();
+ gfx::Tuple2DL aReference{
+ gfx::Length::from(eUnit, rRef.X()),
+ gfx::Length::from(eUnit, rRef.Y())};
+ double fFactorX = xFact.IsValid() ? double(xFact) : 1.0;
+ double fFactorY = yFact.IsValid() ? double(yFact) : 1.0;
+ svx::resizeRange(m_aOutterRange, aReference, fFactorX, fFactorY);
SetBoundAndSnapRectsDirty();
}
diff --git a/svx/source/svdraw/svdtrans.cxx b/svx/source/svdraw/svdtrans.cxx
index 23c7495ad7d7..d4c6ce015b47 100644
--- a/svx/source/svdraw/svdtrans.cxx
+++ b/svx/source/svdraw/svdtrans.cxx
@@ -61,6 +61,22 @@ void ResizeRect(tools::Rectangle& rRect, const Point& rRef,
const Fraction& rxFa
rRect.Normalize();
}
+namespace svx
+{
+
+void resizeRange(gfx::Range2DLWrap& rRange, gfx::Tuple2DL const& rReference,
double fFactorX, double fFactorY)
+{
+ auto left = rReference.getX() + ((rRange.getMinX() - rReference.getX()) *
fFactorX);
+ auto right = rReference.getX() + ((rRange.getMaxX() - rReference.getX()) *
fFactorX);
+
+ auto top = rReference.getY() + ((rRange.getMinY() - rReference.getY()) *
fFactorY);
+ auto bottom = rReference.getY() + ((rRange.getMaxY() - rReference.getY())
* fFactorY);
+
+ rRange = gfx::Range2DLWrap(left, top, right, bottom, rRange.getUnit());
+}
+
+} // end svx namespace
+
void ResizePoly(tools::Polygon& rPoly, const Point& rRef, const Fraction&
xFact, const Fraction& yFact)
{
commit 44a2ca44c7cfcd8f2a60f18d64b37bad4f28a124
Author: Tomaž Vajngerl <[email protected]>
AuthorDate: Thu Feb 9 10:03:43 2023 +0900
Commit: Tomaž Vajngerl <[email protected]>
CommitDate: Tue Feb 6 13:29:22 2024 +0900
use Range2DLWrap for the main rectangle in SdrTextObject
Change-Id: I0d8ac090f9442fe561b4f87aa767185a987874c4
diff --git a/include/svx/svdotext.hxx b/include/svx/svdotext.hxx
index 84aea85fdeff..e6437198830d 100644
--- a/include/svx/svdotext.hxx
+++ b/include/svx/svdotext.hxx
@@ -29,6 +29,7 @@
#include <tools/datetime.hxx>
#include <svl/style.hxx>
#include <svx/svdtext.hxx>
+#include <svx/svdmodel.hxx>
#include <svx/svxdllapi.h>
#include <drawinglayer/primitive2d/Primitive2DContainer.hxx>
#include <memory>
@@ -166,31 +167,44 @@ protected:
// The "aRect" is also the rect of RectObj and CircObj.
// When mbTextFrame=true the text will be formatted into this rect
// When mbTextFrame=false the text will be centered around its middle
- tools::Rectangle maRectangle;
+ gfx::Range2DLWrap maRectangleRange;
tools::Rectangle const& getRectangle() const
{
- return maRectangle;
+ return maRectangleRange.toToolsRect();
}
void setRectangle(tools::Rectangle const& rRectangle)
{
- maRectangle = rRectangle;
+ auto eUnit = getSdrModelFromSdrObject().getUnit();
+ maRectangleRange = gfx::Range2DLWrap::create(rRectangle, eUnit);
}
void setRectangleSize(sal_Int32 nWidth, sal_Int32 nHeight)
{
- maRectangle.SetSize(Size(nWidth, nHeight));
+ auto eUnit = getSdrModelFromSdrObject().getUnit();
+ auto width = gfx::Length::from(eUnit, nWidth);
+ auto height = gfx::Length::from(eUnit, nHeight);
+ maRectangleRange.setSize(width, height);
}
void moveRectangle(sal_Int32 nXDelta, sal_Int32 nYDelta)
{
- maRectangle.Move(nXDelta, nYDelta);
+ if (nXDelta == 0 && nYDelta == 0)
+ return;
+
+ auto eUnit = getSdrModelFromSdrObject().getUnit();
+ auto xDelta = gfx::Length::from(eUnit, nXDelta);
+ auto yDelta = gfx::Length::from(eUnit, nYDelta);
+ maRectangleRange.shift(xDelta, yDelta);
}
void moveRectanglePosition(sal_Int32 nX, sal_Int32 nY)
{
- maRectangle.SetPos(Point(nX, nY));
+ auto eUnit = getSdrModelFromSdrObject().getUnit();
+ auto x = gfx::Length::from(eUnit, nX);
+ auto y = gfx::Length::from(eUnit, nY);
+ maRectangleRange.setPosition(x, y);
}
// The GeoStat contains the rotation and shear angles
diff --git a/svx/source/svdraw/svdocirc.cxx b/svx/source/svdraw/svdocirc.cxx
index becc496c76f1..deafa116328d 100644
--- a/svx/source/svdraw/svdocirc.cxx
+++ b/svx/source/svdraw/svdocirc.cxx
@@ -706,8 +706,9 @@ bool SdrCircObj::MovCreate(SdrDragStat& rStat)
ImpSetCreateParams(rStat);
ImpCircUser* pU=static_cast<ImpCircUser*>(rStat.GetUser());
rStat.SetActionRect(pU->aR);
- setRectangle(pU->aR); // for ObjName
- ImpJustifyRect(maRectangle);
+ auto aRectangle = pU->aR;
+ ImpJustifyRect(aRectangle);
+ setRectangle(aRectangle); // for ObjName
nStartAngle=pU->nStart;
nEndAngle=pU->nEnd;
SetBoundRectDirty();
@@ -1048,8 +1049,9 @@ void SdrCircObj::NbcSetSnapRect(const tools::Rectangle&
rRect)
NbcResize(maSnapRect.TopLeft(),Fraction(nWdt1,nWdt0),Fraction(nHgt1,nHgt0));
NbcMove(Size(rRect.Left()-aSR0.Left(),rRect.Top()-aSR0.Top()));
} else {
- setRectangle(rRect);
- ImpJustifyRect(maRectangle);
+ tools::Rectangle aRectangle(rRect);
+ ImpJustifyRect(aRectangle);
+ setRectangle(aRectangle);
}
SetBoundAndSnapRectsDirty();
SetXPolyDirty();
diff --git a/svx/source/svdraw/svdotext.cxx b/svx/source/svdraw/svdotext.cxx
index cc8846504752..f6133f30464e 100644
--- a/svx/source/svdraw/svdotext.cxx
+++ b/svx/source/svdraw/svdotext.cxx
@@ -104,7 +104,7 @@ SdrTextObj::SdrTextObj(SdrModel& rSdrModel, SdrTextObj
const & rSource)
// #i25616#
mbSupportTextIndentingOnLineWidthChange = true;
- maRectangle = rSource.maRectangle;
+ maRectangleRange = rSource.maRectangleRange;
maGeo = rSource.maGeo;
maTextSize = rSource.maTextSize;
@@ -204,8 +204,6 @@ SdrTextObj::~SdrTextObj()
void SdrTextObj::FitFrameToTextSize()
{
- ImpJustifyRect(maRectangle);
-
SdrText* pText = getActiveText();
if(pText==nullptr || !pText->GetOutlinerParaObject())
return;
diff --git a/svx/source/svdraw/svdotxtr.cxx b/svx/source/svdraw/svdotxtr.cxx
index cde62097f490..1d1336e856d6 100644
--- a/svx/source/svdraw/svdotxtr.cxx
+++ b/svx/source/svdraw/svdotxtr.cxx
@@ -56,9 +56,9 @@ void SdrTextObj::NbcSetSnapRect(const tools::Rectangle& rRect)
else
{
// No rotation or shear.
-
- setRectangle(rRect);
- ImpJustifyRect(maRectangle);
+ tools::Rectangle aRectangle(rRect);
+ ImpJustifyRect(aRectangle);
+ setRectangle(aRectangle);
AdaptTextMinSize();
@@ -74,8 +74,9 @@ const tools::Rectangle& SdrTextObj::GetLogicRect() const
void SdrTextObj::NbcSetLogicRect(const tools::Rectangle& rRect)
{
- setRectangle(rRect);
- ImpJustifyRect(maRectangle);
+ tools::Rectangle aRectangle(rRect);
+ ImpJustifyRect(aRectangle);
+ setRectangle(aRectangle);
AdaptTextMinSize();
@@ -126,7 +127,7 @@ void SdrTextObj::NbcResize(const Point& rRef, const
Fraction& xFact, const Fract
setRectangle(aRectangle);
if (bYMirr)
{
- maRectangle.Normalize();
+ //maRectangle.Normalize();
moveRectangle(aRectangle.Right() - aRectangle.Left(),
aRectangle.Bottom() - aRectangle.Top());
maGeo.m_nRotationAngle=18000_deg100;
maGeo.RecalcSinCos();
@@ -174,8 +175,6 @@ void SdrTextObj::NbcResize(const Point& rRef, const
Fraction& xFact, const Fract
}
}
- ImpJustifyRect(maRectangle);
-
AdaptTextMinSize();
if(mbTextFrame && !getSdrModelFromSdrObject().IsPasteResize())
@@ -190,12 +189,13 @@ void SdrTextObj::NbcResize(const Point& rRef, const
Fraction& xFact, const Fract
void SdrTextObj::NbcRotate(const Point& rRef, Degree100 nAngle, double sn,
double cs)
{
SetGlueReallyAbsolute(true);
- tools::Long dx = getRectangle().Right() - getRectangle().Left();
- tools::Long dy = getRectangle().Bottom() - getRectangle().Top();
- Point aPoint1(getRectangle().TopLeft());
+ tools::Rectangle aRectangle = getRectangle();
+ tools::Long dx = aRectangle.Right() - aRectangle.Left();
+ tools::Long dy = aRectangle.Bottom() - aRectangle.Top();
+ Point aPoint1(aRectangle.TopLeft());
RotatePoint(aPoint1, rRef, sn, cs);
Point aPoint2(aPoint1.X() + dx, aPoint1.Y() + dy);
- tools::Rectangle aRectangle(aPoint1, aPoint2);
+ aRectangle = tools::Rectangle(aPoint1, aPoint2);
setRectangle(aRectangle);
if (maGeo.m_nRotationAngle==0_deg100) {
@@ -215,16 +215,17 @@ void SdrTextObj::NbcShear(const Point& rRef, Degree100
/*nAngle*/, double tn, bo
{
SetGlueReallyAbsolute(true);
+ auto aRectangle = getRectangle();
// when this is a SdrPathObj, aRect may be uninitialized
- tools::Polygon aPol(Rect2Poly(getRectangle().IsEmpty() ? GetSnapRect() :
getRectangle(), maGeo));
+ tools::Polygon aPol(Rect2Poly(aRectangle.IsEmpty() ? GetSnapRect() :
aRectangle, maGeo));
sal_uInt16 nPointCount=aPol.GetSize();
for (sal_uInt16 i=0; i<nPointCount; i++) {
ShearPoint(aPol[i],rRef,tn,bVShear);
}
- tools::Rectangle aRectangle = svx::polygonToRectangle(aPol, maGeo);
+ aRectangle = svx::polygonToRectangle(aPol, maGeo);
+ ImpJustifyRect(aRectangle);
setRectangle(aRectangle);
- ImpJustifyRect(maRectangle);
if (mbTextFrame) {
NbcAdjustTextFrameWidthAndHeight();
@@ -245,7 +246,7 @@ void SdrTextObj::NbcMirror(const Point& rRef1, const Point&
rRef2)
std::abs(rRef1.X()-rRef2.X())==std::abs(rRef1.Y()-rRef2.Y()))) {
bRotate90=maGeo.m_nRotationAngle.get() % 9000 ==0;
}
- tools::Polygon aPol(Rect2Poly(getRectangle(),maGeo));
+ tools::Polygon aPol(Rect2Poly(getRectangle(), maGeo));
sal_uInt16 i;
sal_uInt16 nPointCount=aPol.GetSize();
for (i=0; i<nPointCount; i++) {
@@ -279,7 +280,6 @@ void SdrTextObj::NbcMirror(const Point& rRef1, const Point&
rRef2)
maGeo.RecalcTan();
}
- ImpJustifyRect(maRectangle);
if (mbTextFrame) {
NbcAdjustTextFrameWidthAndHeight();
}
diff --git a/svx/source/table/svdotable.cxx b/svx/source/table/svdotable.cxx
index 63eeeae7d037..50ea1652d6a6 100644
--- a/svx/source/table/svdotable.cxx
+++ b/svx/source/table/svdotable.cxx
@@ -842,7 +842,7 @@ SdrTableObj::SdrTableObj(SdrModel& rSdrModel, SdrTableObj
const & rSource)
TableModelNotifyGuard aGuard( mpImpl.is() ? mpImpl->mxTable.get() :
nullptr );
maLogicRect = rSource.maLogicRect;
- maRectangle = rSource.maRectangle;
+ maRectangleRange = rSource.maRectangleRange;
maGeo = rSource.maGeo;
meTextKind = rSource.meTextKind;
mbTextFrame = rSource.mbTextFrame;
commit 1890a62199346fa92e5430490d5a7ff2ca56b081
Author: Tomaž Vajngerl <[email protected]>
AuthorDate: Wed Feb 8 10:42:19 2023 +0900
Commit: Tomaž Vajngerl <[email protected]>
CommitDate: Tue Feb 6 13:29:22 2024 +0900
use Range2DLWrap for "OutRectangle" in SdrObject
Change-Id: I243b44a84bc09991744009ae24ac7657d493c5cf
diff --git a/include/svx/svdobj.hxx b/include/svx/svdobj.hxx
index 2951d41e8904..abafa2455545 100644
--- a/include/svx/svdobj.hxx
+++ b/include/svx/svdobj.hxx
@@ -34,6 +34,7 @@
#include <tools/link.hxx>
#include <tools/gen.hxx>
#include <unotools/resmgr.hxx>
+#include <basegfx/units/Range2DLWrap.hxx>
#include <unordered_set>
@@ -860,13 +861,15 @@ public:
void ForceMetricToItemPoolMetric(basegfx::B2DPolyPolygon& rPolyPolygon)
const noexcept;
protected:
- const tools::Rectangle& getOutRectangle() const;
+ tools::Rectangle const& getOutRectangle() const;
+ bool isOutRectangleEmpty() const;
void setOutRectangleConst(tools::Rectangle const& rRectangle) const; //
need to do something about this
void setOutRectangle(tools::Rectangle const& rRectangle);
void resetOutRectangle();
void moveOutRectangle(sal_Int32 nXDelta, sal_Int32 nYDelta);
- mutable tools::Rectangle m_aOutRect; // surrounding rectangle for
Paint (incl. LineWidth, ...)
+ mutable gfx::Range2DLWrap m_aOutterRange; // surrounding rectangle for
Paint (incl. LineWidth, ...)
+
Point m_aAnchor; // anchor position (Writer)
SdrObjUserCall* m_pUserCall;
std::unique_ptr<SdrObjPlusData>
diff --git a/include/svx/svdpage.hxx b/include/svx/svdpage.hxx
index d95d8599891f..ff733107f224 100644
--- a/include/svx/svdpage.hxx
+++ b/include/svx/svdpage.hxx
@@ -406,6 +406,14 @@ public:
tools::Long upperUnit() const { return maUpper.as(meUnit); }
tools::Long lowerUnit() const { return maLower.as(meUnit); }
+ bool operator==(Border const& other) const
+ {
+ return maLeft == other.maLeft
+ && maRight == other.maRight
+ && maUpper == other.maUpper
+ && maLower == other.maLower;
+ }
+
tools::Rectangle toToolsRect() const
{
return tools::Rectangle(leftUnit(), upperUnit(), rightUnit(),
lowerUnit());
@@ -596,10 +604,7 @@ public:
return maBorder;
}
- virtual void setBorder(svx::Border const& rBorder)
- {
- maBorder = rBorder;
- }
+ virtual void setBorder(svx::Border const& rBorder);
virtual void SetBorder(sal_Int32 nLeft, sal_Int32 nUpper, sal_Int32
nRight, sal_Int32 Lower);
virtual void SetLeftBorder(sal_Int32 nBorder);
diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx
index 10dba8f0ebc7..63a112813bd3 100644
--- a/svx/source/svdraw/svdobj.cxx
+++ b/svx/source/svdraw/svdobj.cxx
@@ -32,6 +32,7 @@
#include <basegfx/polygon/b2dpolygontools.hxx>
#include <basegfx/polygon/b2dpolypolygoncutter.hxx>
#include <basegfx/polygon/b2dpolypolygontools.hxx>
+#include <basegfx/units/Range2DLWrap.hxx>
#include <basegfx/range/b2drange.hxx>
#include <drawinglayer/processor2d/contourextractor2d.hxx>
#include <drawinglayer/processor2d/linegeometryextractor2d.hxx>
@@ -949,13 +950,9 @@ void SdrObject::SetNavigationPosition (const sal_uInt32
nNewPosition)
// GetCurrentBoundRect().
const tools::Rectangle& SdrObject::GetCurrentBoundRect() const
{
- auto const& rRectangle = getOutRectangle();
- if (rRectangle.IsEmpty())
- {
- const_cast< SdrObject* >(this)->RecalcBoundRect();
- }
-
- return rRectangle;
+ if (isOutRectangleEmpty())
+ const_cast<SdrObject*>(this)->RecalcBoundRect();
+ return getOutRectangle();
}
// To have a possibility to get the last calculated BoundRect e.g for producing
@@ -993,13 +990,12 @@ void SdrObject::RecalcBoundRect()
if (!aRange.isEmpty())
{
- tools::Rectangle aNewRectangle(
- tools::Long(floor(aRange.getMinX())),
- tools::Long(floor(aRange.getMinY())),
- tools::Long(ceil(aRange.getMaxX())),
- tools::Long(ceil(aRange.getMaxY())));
- setOutRectangle(aNewRectangle);
- return;
+ const basegfx::B2DRange aRoundedRange(
+ std::floor(aRange.getMinX()),
+ std::floor(aRange.getMinY()),
+ std::ceil(aRange.getMaxX()),
+ std::ceil(aRange.getMaxY()));
+ m_aOutterRange = gfx::Range2DLWrap::create(aRoundedRange,
getSdrModelFromSdrObject().getUnit());
}
}
@@ -3145,27 +3141,41 @@ void
SdrObject::ForceMetricToItemPoolMetric(basegfx::B2DPolyPolygon& rPolyPolygo
const tools::Rectangle& SdrObject::getOutRectangle() const
{
- return m_aOutRect;
+ return m_aOutterRange.toToolsRect();
+}
+
+bool SdrObject::isOutRectangleEmpty() const
+{
+ return getOutRectangle().IsEmpty();
}
void SdrObject::setOutRectangleConst(tools::Rectangle const& rRectangle) const
{
- m_aOutRect = rRectangle;
+ auto eUnit = getSdrModelFromSdrObject().getUnit();
+ m_aOutterRange = gfx::Range2DLWrap::create(rRectangle, eUnit);
}
void SdrObject::setOutRectangle(tools::Rectangle const& rRectangle)
{
- m_aOutRect = rRectangle;
+ auto eUnit = getSdrModelFromSdrObject().getUnit();
+ m_aOutterRange = gfx::Range2DLWrap::create(rRectangle, eUnit);
}
void SdrObject::resetOutRectangle()
{
- m_aOutRect = tools::Rectangle();
+ m_aOutterRange.reset();
}
void SdrObject::moveOutRectangle(sal_Int32 nXDelta, sal_Int32 nYDelta)
{
- m_aOutRect.Move(nXDelta, nYDelta);
+ if (nXDelta == 0 && nYDelta == 0)
+ return;
+
+ auto eUnit = getSdrModelFromSdrObject().getUnit();
+ auto xDelta = gfx::Length::from(eUnit, nXDelta);
+ auto yDelta = gfx::Length::from(eUnit, nYDelta);
+
+ m_aOutterRange.shift(xDelta, yDelta);
}
E3dScene* DynCastE3dScene(SdrObject* pObj)
diff --git a/svx/source/svdraw/svdpage.cxx b/svx/source/svdraw/svdpage.cxx
index bac4fe0caebc..69036df0ff75 100644
--- a/svx/source/svdraw/svdpage.cxx
+++ b/svx/source/svdraw/svdpage.cxx
@@ -1397,16 +1397,11 @@ rtl::Reference<SdrPage> SdrPage::CloneSdrPage(SdrModel&
rTargetModel) const
void SdrPage::setSize(gfx::Size2DLWrap const& rSize)
{
- bool bChanged = false;
-
- if (maSize != rSize)
- {
- maSize = rSize;
- bChanged = true;
- }
+ if (maSize == rSize)
+ return;
- if (bChanged)
- SetChanged();
+ maSize = rSize;
+ SetChanged();
}
void SdrPage::SetOrientation(Orientation eOri)
@@ -1430,6 +1425,14 @@ Orientation SdrPage::GetOrientation() const
return Orientation::Portrait;
}
+void SdrPage::setBorder(svx::Border const& rBorder)
+{
+ if (maBorder == rBorder)
+ return;
+
+ maBorder = rBorder;
+ SetChanged();
+}
void SdrPage::SetBorder(sal_Int32 nLeft, sal_Int32 nUpper, sal_Int32 nRight,
sal_Int32 nLower)
{
diff --git a/sw/source/core/draw/dcontact.cxx b/sw/source/core/draw/dcontact.cxx
index 49f2b7396e96..34db07ba9656 100644
--- a/sw/source/core/draw/dcontact.cxx
+++ b/sw/source/core/draw/dcontact.cxx
@@ -2438,10 +2438,8 @@ void SwDrawVirtObj::NbcSetAnchorPos(const Point& rPnt)
const tools::Rectangle& SwDrawVirtObj::GetCurrentBoundRect() const
{
- if (getOutRectangle().IsEmpty())
- {
+ if (isOutRectangleEmpty())
const_cast<SwDrawVirtObj*>(this)->RecalcBoundRect();
- }
return getOutRectangle();
}
commit bce5093ec19afef7e48aa15935e57567914e7c31
Author: Tomaž Vajngerl <[email protected]>
AuthorDate: Wed Oct 26 20:21:37 2022 +0200
Commit: Tomaž Vajngerl <[email protected]>
CommitDate: Tue Feb 6 13:29:22 2024 +0900
svx: change PaperInfo to return gfx::Length paper sizes
Change-Id: Ie99a748ab9282893a852278be9793f7379522541
diff --git a/editeng/source/items/paperinf.cxx
b/editeng/source/items/paperinf.cxx
index 86401e63f387..47dd992b4f02 100644
--- a/editeng/source/items/paperinf.cxx
+++ b/editeng/source/items/paperinf.cxx
@@ -39,6 +39,12 @@ Size SvxPaperInfo::GetPaperSize( Paper ePaper, MapUnit eUnit
)
: OutputDevice::LogicToLogic(aRet, MapMode(MapUnit::Map100thMM),
MapMode(eUnit));
}
+gfx::Size2DLWrap SvxPaperInfo::getPaperSize(Paper ePaper)
+{
+ PaperInfo aInfo(ePaper);
+ return { gfx::Length::hmm(aInfo.getWidth()),
gfx::Length::hmm(aInfo.getHeight()) };
+}
+
/*------------------------------------------------------------------------
Description: Return the paper size of the printer, aligned to our
own sizes. If no Printer is set in the system, A4 portrait
@@ -108,6 +114,12 @@ Size SvxPaperInfo::GetDefaultPaperSize( MapUnit eUnit )
: OutputDevice::LogicToLogic(aRet, MapMode(MapUnit::Map100thMM),
MapMode(eUnit));
}
+gfx::Size2DLWrap SvxPaperInfo::getDefaultPaperSize()
+{
+ PaperInfo aInfo(PaperInfo::getSystemDefaultPaper());
+ return { gfx::Length::hmm(aInfo.getWidth()),
gfx::Length::hmm(aInfo.getHeight()) };
+}
+
/*------------------------------------------------------------------------
Description: String representation for the SV-defines of paper size
------------------------------------------------------------------------*/
diff --git a/include/editeng/paperinf.hxx b/include/editeng/paperinf.hxx
index 2ccc8fbf96fa..0d12100e5903 100644
--- a/include/editeng/paperinf.hxx
+++ b/include/editeng/paperinf.hxx
@@ -25,6 +25,7 @@
#include <tools/mapunit.hxx>
#include <i18nutil/paper.hxx>
#include <tools/gen.hxx>
+#include <basegfx/units/Size2DLWrap.hxx>
#include <editeng/editengdllapi.h>
// forward ---------------------------------------------------------------
@@ -42,6 +43,9 @@ public:
static Paper GetSvxPaper( const Size &rSize, MapUnit eUnit );
static tools::Long GetSloppyPaperDimension( tools::Long nSize );
static OUString GetName( Paper ePaper );
+
+ static gfx::Size2DLWrap getPaperSize(Paper ePaper);
+ static gfx::Size2DLWrap getDefaultPaperSize();
};
// INLINE -----------------------------------------------------------------
diff --git a/include/svx/svdpage.hxx b/include/svx/svdpage.hxx
index b613cf26d043..d95d8599891f 100644
--- a/include/svx/svdpage.hxx
+++ b/include/svx/svdpage.hxx
@@ -384,6 +384,13 @@ public:
, meUnit(eUnit)
{}
+ Border(gfx::Length const& nLeft, gfx::Length const& nUpper, gfx::Length
const& nRight, gfx::Length const& nLower)
+ : maLeft(nLeft)
+ , maRight(nRight)
+ , maUpper(nUpper)
+ , maLower(nLower)
+ {}
+
gfx::Length const& left() const { return maLeft; }
gfx::Length const& right() const { return maRight; }
gfx::Length const& upper() const { return maUpper; }
diff --git a/sd/source/core/drawdoc2.cxx b/sd/source/core/drawdoc2.cxx
index 7caebb76925b..cdc467f2b12f 100644
--- a/sd/source/core/drawdoc2.cxx
+++ b/sd/source/core/drawdoc2.cxx
@@ -514,7 +514,7 @@ void SdDrawDocument::CreateFirstPages( SdDrawDocument const
* pRefDocument /* =
return;
// #i57181# Paper size depends on Language, like in Writer
- Size aDefSize = SvxPaperInfo::GetDefaultPaperSize( MapUnit::Map100thMM );
+ gfx::Size2DLWrap aDefaultSize = SvxPaperInfo::getDefaultPaperSize();
// Insert handout page
rtl::Reference<SdPage> pHandoutPage = AllocSdPage(false);
@@ -531,8 +531,8 @@ void SdDrawDocument::CreateFirstPages( SdDrawDocument const
* pRefDocument /* =
}
else
{
- pHandoutPage->setToolsSize(aDefSize);
- pHandoutPage->SetBorder(0, 0, 0, 0);
+ pHandoutPage->setSize(aDefaultSize);
+ pHandoutPage->setBorder(svx::Border());
}
pHandoutPage->SetPageKind(PageKind::Handout);
@@ -568,7 +568,7 @@ void SdDrawDocument::CreateFirstPages( SdDrawDocument const
* pRefDocument /* =
else if (meDocType == DocumentType::Draw)
{
// Draw: always use default size with margins
- pPage->setToolsSize(aDefSize);
+ pPage->setSize(aDefaultSize);
SfxPrinter* pPrinter = mpDocSh->GetPrinter(false);
if (pPrinter && pPrinter->IsValid())
@@ -578,12 +578,12 @@ void SdDrawDocument::CreateFirstPages( SdDrawDocument
const * pRefDocument /* =
aPageOffset -= pPrinter->PixelToLogic( Point() );
::tools::Long nOffset = !aPageOffset.X() && !aPageOffset.Y() ?
0 : PRINT_OFFSET;
- sal_uLong nTop = aPageOffset.Y();
- sal_uLong nLeft = aPageOffset.X();
- sal_uLong nBottom = std::max(::tools::Long(aDefSize.Height() -
aOutSize.Height() - nTop + nOffset), ::tools::Long(0));
- sal_uLong nRight = std::max(::tools::Long(aDefSize.Width() -
aOutSize.Width() - nLeft + nOffset), ::tools::Long(0));
+ gfx::Length nTop = gfx::Length::hmm(aPageOffset.Y());
+ gfx::Length nLeft = gfx::Length::hmm(aPageOffset.X());
+ gfx::Length nBottom =
gfx::Length::hmm(std::max(::tools::Long(aDefaultSize.getHeight().as_hmm() -
aOutSize.Height() - aPageOffset.Y() + nOffset), tools::Long(0)));
+ gfx::Length nRight =
gfx::Length::hmm(std::max(::tools::Long(aDefaultSize.getWidth().as_hmm() -
aOutSize.Width() - aPageOffset.X() + nOffset), tools::Long(0)));
- pPage->SetBorder(nLeft, nTop, nRight, nBottom);
+ pPage->setBorder(svx::Border(nLeft, nTop, nRight, nBottom));
}
else
{
@@ -592,14 +592,14 @@ void SdDrawDocument::CreateFirstPages( SdDrawDocument
const * pRefDocument /* =
// This has to be kept synchronized with the border
// width set in the
// SvxPageDescPage::PaperSizeSelect_Impl callback.
- pPage->SetBorder(1000, 1000, 1000, 1000);
+ pPage->setBorder(svx::Border(1000_hmm, 1000_hmm, 1000_hmm,
1000_hmm));
}
}
else
{
// Impress: always use screen format, landscape.
- Size aSize = SvxPaperInfo::GetPaperSize(PAPER_SCREEN_16_9,
MapUnit::Map100thMM);
- pPage->setToolsSize(Size(aSize.Height(), aSize.Width()));
+ gfx::Size2DLWrap aSize =
SvxPaperInfo::getPaperSize(PAPER_SCREEN_16_9);
+ pPage->setSize({ aSize.getHeight(), aSize.getWidth() });
pPage->setBorder(svx::Border());
}
@@ -634,16 +634,16 @@ void SdDrawDocument::CreateFirstPages( SdDrawDocument
const * pRefDocument /* =
else
{
// Always use portrait format
- if (aDefSize.Height() >= aDefSize.Width())
+ if (aDefaultSize.getHeight() >= aDefaultSize.getWidth())
{
- pNotesPage->setToolsSize(aDefSize);
+ pNotesPage->setSize(aDefaultSize);
}
else
{
- pNotesPage->setToolsSize(Size(aDefSize.Height(),
aDefSize.Width()));
+ pNotesPage->setSize({ aDefaultSize.getHeight(),
aDefaultSize.getWidth() });
}
- pNotesPage->SetBorder(0, 0, 0, 0);
+ pNotesPage->setBorder(svx::Border());
}
pNotesPage->SetPageKind(PageKind::Notes);
InsertPage(pNotesPage.get(), 2);
commit 17ad8c0e60eeb46bfdf853428de865c19cfa7067
Author: Tomaž Vajngerl <[email protected]>
AuthorDate: Thu Feb 2 19:22:23 2023 +0900
Commit: Tomaž Vajngerl <[email protected]>
CommitDate: Tue Feb 6 13:29:10 2024 +0900
svx: change SdrPage size and border to use gfx::Length
Change-Id: I382cfba6189eab02581057ab5af437cd1d163138
diff --git a/basctl/source/dlged/dlged.cxx b/basctl/source/dlged/dlged.cxx
index 1aa9ca380416..693b952e0bdb 100644
--- a/basctl/source/dlged/dlged.cxx
+++ b/basctl/source/dlged/dlged.cxx
@@ -216,12 +216,13 @@ DlgEditor::DlgEditor (
aMarkIdle.SetInvokeHandler( LINK( this, DlgEditor, MarkTimeout ) );
rWindow.SetMapMode( MapMode( MapUnit::Map100thMM ) );
- pDlgEdPage->SetSize( rWindow.PixelToLogic( Size(DLGED_PAGE_WIDTH_MIN,
DLGED_PAGE_HEIGHT_MIN) ) );
+ Size aPageSize = rWindow.PixelToLogic(Size(DLGED_PAGE_WIDTH_MIN,
DLGED_PAGE_HEIGHT_MIN));
+ pDlgEdPage->setToolsSize(aPageSize);
pDlgEdView->ShowSdrPage(pDlgEdView->GetModel().GetPage(0));
pDlgEdView->SetLayerVisible( "HiddenLayer", false );
pDlgEdView->SetMoveSnapOnlyTopLeft(true);
- pDlgEdView->SetWorkArea( tools::Rectangle( Point( 0, 0 ),
pDlgEdPage->GetSize() ) );
+ pDlgEdView->SetWorkArea(pDlgEdPage->getRectangle().toToolsRect());
Size aGridSize( 100, 100 ); // 100TH_MM
pDlgEdView->SetGridCoarse( aGridSize );
@@ -267,7 +268,7 @@ void DlgEditor::InitScrollBars()
return;
Size aOutSize = rWindow.GetOutDev()->GetOutputSize();
- Size aPgSize = pDlgEdPage->GetSize();
+ Size aPgSize = pDlgEdPage->getSize().toToolsSize();
pHScroll->SetRange( Range( 0, aPgSize.Width() ));
pVScroll->SetRange( Range( 0, aPgSize.Height() ));
@@ -1217,11 +1218,11 @@ bool DlgEditor::AdjustPageSize()
if ( pDlgEdPage )
{
- Size aPageSize = pDlgEdPage->GetSize();
+ Size aPageSize = pDlgEdPage->getSize().toToolsSize();
if ( nNewPageWidth != aPageSize.Width() || nNewPageHeight !=
aPageSize.Height() )
{
Size aNewPageSize( nNewPageWidth, nNewPageHeight );
- pDlgEdPage->SetSize( aNewPageSize );
+ pDlgEdPage->setToolsSize(aNewPageSize);
pDlgEdView->SetWorkArea( tools::Rectangle( Point( 0, 0 ),
aNewPageSize ) );
bAdjustedPageSize = true;
}
diff --git a/basctl/source/dlged/dlgedobj.cxx b/basctl/source/dlged/dlgedobj.cxx
index 5b87393e51bc..3fda762ac04a 100644
--- a/basctl/source/dlged/dlgedobj.cxx
+++ b/basctl/source/dlged/dlgedobj.cxx
@@ -419,7 +419,7 @@ void DlgEdObj::PositionAndSizeChange( const
beans::PropertyChangeEvent& evt )
DBG_ASSERT( pDlgEdForm, "DlgEdObj::PositionAndSizeChange: no form!" );
DlgEdPage& rPage = pDlgEdForm->GetDlgEditor().GetPage();
{
- Size aPageSize = rPage.GetSize();
+ Size aPageSize = rPage.getSize().toToolsSize();
sal_Int32 nPageWidthIn = aPageSize.Width();
sal_Int32 nPageHeightIn = aPageSize.Height();
sal_Int32 nPageX, nPageY, nPageWidth, nPageHeight;
@@ -1298,7 +1298,7 @@ void DlgEdForm::PositionAndSizeChange( const
beans::PropertyChangeEvent& evt )
sal_Int32 nPageXIn = 0;
sal_Int32 nPageYIn = 0;
- Size aPageSize = rPage.GetSize();
+ Size aPageSize = rPage.getSize().toToolsSize();
sal_Int32 nPageWidthIn = aPageSize.Width();
sal_Int32 nPageHeightIn = aPageSize.Height();
sal_Int32 nPageX, nPageY, nPageWidth, nPageHeight;
@@ -1348,7 +1348,7 @@ void DlgEdForm::PositionAndSizeChange( const
beans::PropertyChangeEvent& evt )
if ( bAdjustedPageSize )
{
rEditor.InitScrollBars();
- aPageSize = rPage.GetSize();
+ aPageSize = rPage.getSize().toToolsSize();
nPageWidthIn = aPageSize.Width();
nPageHeightIn = aPageSize.Height();
if ( TransformSdrToControlCoordinates( nPageXIn, nPageYIn,
nPageWidthIn, nPageHeightIn, nPageX, nPageY, nPageWidth, nPageHeight ) )
diff --git a/basctl/source/dlged/dlgedview.cxx
b/basctl/source/dlged/dlgedview.cxx
index 81271d38f8bd..a9a6c821e480 100644
--- a/basctl/source/dlged/dlgedview.cxx
+++ b/basctl/source/dlged/dlgedview.cxx
@@ -90,7 +90,7 @@ void DlgEdView::MakeVisible( const tools::Rectangle& rRect,
vcl::Window& rWin )
nScrollY -= nDeltaY;
// don't scroll beyond the page size
- Size aPageSize = rDlgEditor.GetPage().GetSize();
+ Size aPageSize = rDlgEditor.GetPage().getSize().toToolsSize();
sal_Int32 nPageWidth = aPageSize.Width();
sal_Int32 nPageHeight = aPageSize.Height();
diff --git a/chart2/source/controller/drawinglayer/ViewElementListProvider.cxx
b/chart2/source/controller/drawinglayer/ViewElementListProvider.cxx
index 0b3df1aa22ad..f90c781ee84e 100644
--- a/chart2/source/controller/drawinglayer/ViewElementListProvider.cxx
+++ b/chart2/source/controller/drawinglayer/ViewElementListProvider.cxx
@@ -149,7 +149,7 @@ Graphic ViewElementListProvider::GetSymbolGraphic(
sal_Int32 nStandardSymbol, co
pModel->GetItemPool().FreezeIdRanges();
rtl::Reference<SdrPage> pPage = new SdrPage( *pModel, false );
- pPage->SetSize(Size(1000,1000));
+ pPage->setSize({ 1000_hmm, 1000_hmm });
pModel->InsertPage( pPage.get(), 0 );
SdrView aView(*pModel, pVDev);
aView.hideMarkHandles();
diff --git a/chart2/source/controller/main/DrawCommandDispatch.cxx
b/chart2/source/controller/main/DrawCommandDispatch.cxx
index 1446059a0223..c7d7336f2811 100644
--- a/chart2/source/controller/main/DrawCommandDispatch.cxx
+++ b/chart2/source/controller/main/DrawCommandDispatch.cxx
@@ -423,7 +423,7 @@ rtl::Reference<SdrObject>
DrawCommandDispatch::createDefaultObject( const ChartC
if ( pObj )
{
Size aObjectSize( 4000, 2500 );
- tools::Rectangle aPageRect( tools::Rectangle( Point( 0, 0 ),
pPage->GetSize() ) );
+ tools::Rectangle
aPageRect(pPage->getRectangle().toToolsRect());
Point aObjectPos = aPageRect.Center();
aObjectPos.AdjustX( -(aObjectSize.Width() / 2) );
aObjectPos.AdjustY( -(aObjectSize.Height() / 2) );
diff --git a/chart2/source/view/main/ChartView.cxx
b/chart2/source/view/main/ChartView.cxx
index d01a877040b2..fae6abcdce04 100644
--- a/chart2/source/view/main/ChartView.cxx
+++ b/chart2/source/view/main/ChartView.cxx
@@ -1384,7 +1384,7 @@ void ChartView::createShapes()
if (pPage) //it is necessary to use the implementation here as the uno
page does not provide a propertyset
{
- pPage->SetSize(Size(aPageSize.Width,aPageSize.Height));
+ pPage->setSize({ gfx::Length::hmm(aPageSize.Width),
gfx::Length::hmm(aPageSize.Height) });
}
else
{
diff --git a/cui/source/tabpages/tpline.cxx b/cui/source/tabpages/tpline.cxx
index 37fe8ef913b0..5a22be37c4e8 100644
--- a/cui/source/tabpages/tpline.cxx
+++ b/cui/source/tabpages/tpline.cxx
@@ -820,7 +820,7 @@ void SvxLineTabPage::Reset( const SfxItemSet* rAttrs )
new SdrModel(nullptr, nullptr, true));
pModel->GetItemPool().FreezeIdRanges();
rtl::Reference<SdrPage> pPage = new SdrPage( *pModel, false );
- pPage->SetSize(Size(1000,1000));
+ pPage->setSize({ 1_cm, 1_cm });
pModel->InsertPage( pPage.get(), 0 );
{
SdrView aView( *pModel, pVDev );
@@ -1449,7 +1449,7 @@ IMPL_LINK_NOARG(SvxLineTabPage, MenuCreateHdl_Impl,
weld::Toggleable&, void)
pModel->GetItemPool().FreezeIdRanges();
// Page
rtl::Reference<SdrPage> pPage = new SdrPage( *pModel, false );
- pPage->SetSize(Size(1000,1000));
+ pPage->setSize({ 1_cm, 1_cm });
pModel->InsertPage( pPage.get(), 0 );
{
// 3D View
diff --git a/filter/source/msfilter/svdfppt.cxx
b/filter/source/msfilter/svdfppt.cxx
index 0a93095d4ddf..c38c7b0536cc 100644
--- a/filter/source/msfilter/svdfppt.cxx
+++ b/filter/source/msfilter/svdfppt.cxx
@@ -1247,7 +1247,7 @@ rtl::Reference<SdrObject> SdrEscherImport::ProcessObj(
SvStream& rSt, DffObjData
{
if ( rObjData.nSpFlags & ShapeFlag::Background )
{
- pRet->NbcSetSnapRect( tools::Rectangle( Point(),
rData.pPage.page->GetSize() ) ); // set size
+
pRet->NbcSetSnapRect(rData.pPage.page->getRectangle().toToolsRect()); // set
size
}
if (rPersistEntry.xSolverContainer)
{
@@ -2666,7 +2666,8 @@ bool SdrPowerPointImport::SeekToShape( SvStream& rSt,
SvxMSDffClientData* pClien
rtl::Reference<SdrPage> SdrPowerPointImport::MakeBlankPage( bool bMaster )
const
{
rtl::Reference<SdrPage> pRet = pSdrModel->AllocPage( bMaster );
- pRet->SetSize( GetPageSize() );
+ Size const& rSize = GetPageSize();
+ pRet->setSize({ gfx::Length::hmm(rSize.Width()),
gfx::Length::hmm(rSize.Height()) });
return pRet;
}
@@ -2808,7 +2809,7 @@ void SdrPowerPointImport::ImportPage( SdrPage* pRet,
const PptSlidePersistEntry*
{
case DFF_msofbtSpContainer :
{
- tools::Rectangle aPageSize( Point(),
pRet->GetSize() );
+ tools::Rectangle aPageSize =
pRet->getRectangle().toToolsRect();
if ( rSlidePersist.aSlideAtom.nFlags & 4 )
// follow master background?
{
if ( HasMasterPage( m_nCurrentPageNum,
m_eCurrentPageKind ) )
@@ -3056,15 +3057,8 @@ rtl::Reference<SdrObject>
SdrPowerPointImport::ImportPageBackgroundObject( const
pSet->Put( XFillStyleItem( drawing::FillStyle_NONE ) );
}
pSet->Put( XLineStyleItem( drawing::LineStyle_NONE ) );
- tools::Rectangle aRect(
- rPage.GetLeftBorder(),
- rPage.GetUpperBorder(),
- rPage.GetWidth() - rPage.GetRightBorder(),
- rPage.GetHeight() - rPage.GetLowerBorder());
-
- pRet = new SdrRectObj(
- *pSdrModel,
- aRect);
+ tools::Rectangle aRect = rPage.getInnerRectangle().toToolsRect();
+ pRet = new SdrRectObj(*pSdrModel, aRect);
pRet->SetMergedItemSet(*pSet);
pRet->SetMarkProtect( true );
diff --git a/filter/source/svg/svgfilter.cxx b/filter/source/svg/svgfilter.cxx
index d84591d0c155..29a0958be9bb 100644
--- a/filter/source/svg/svgfilter.cxx
+++ b/filter/source/svg/svgfilter.cxx
@@ -321,12 +321,13 @@ bool SVGFilter::filterImpressOrDraw( const Sequence<
PropertyValue >& rDescripto
// in comparison. Use a common scaling factor for hor/ver to not
get
// asynchronous border distances, though. All in all this will
adapt borders
// nicely and is based on office-defaults for
standard-page-border-sizes.
- const Size aPageSize(pTargetSdrPage->GetSize());
+ const gfx::Size2DL aPageSize = pTargetSdrPage->getSize();
const double fBorderRelation((
- static_cast< double >(pTargetSdrPage->GetLeftBorder()) /
aPageSize.Width() +
- static_cast< double >(pTargetSdrPage->GetRightBorder()) /
aPageSize.Width() +
- static_cast< double >(pTargetSdrPage->GetUpperBorder()) /
aPageSize.Height() +
- static_cast< double >(pTargetSdrPage->GetLowerBorder()) /
aPageSize.Height()) / 4.0);
+ pTargetSdrPage->getBorder().getLeft() / aPageSize.getWidth() +
+ pTargetSdrPage->getBorder().getRight() / aPageSize.getWidth() +
+ pTargetSdrPage->getBorder().getUpper() / aPageSize.getHeight()
+
+ pTargetSdrPage->getBorder().getLower() /
aPageSize.getHeight()) / 4.0);
+
const tools::Long nAllBorder(basegfx::fround((aGraphicSize.Width()
+ aGraphicSize.Height()) * fBorderRelation * 0.5));
// Adapt PageSize and Border stuff. To get all MasterPages and
PresObjs
diff --git a/include/svx/svdmodel.hxx b/include/svx/svdmodel.hxx
index 81ec0927db4c..8082be7ed193 100644
--- a/include/svx/svdmodel.hxx
+++ b/include/svx/svdmodel.hxx
@@ -39,6 +39,7 @@
#include <svx/svdtypes.hxx>
#include <svx/svxdllapi.h>
+#include <basegfx/units/Length.hxx>
#include <rtl/ref.hxx>
#include <deque>
@@ -378,6 +379,13 @@ public:
MapUnit GetScaleUnit() const { return
m_eObjUnit; }
void SetScaleUnit(MapUnit eMap);
+ gfx::LengthUnit getUnit() const
+ {
+ return m_eObjUnit == MapUnit::MapTwip
+ ? gfx::LengthUnit::twip
+ : gfx::LengthUnit::hmm;
+ }
+
// maximal size e.g. for auto growing texts
const Size& GetMaxObjSize() const { return
m_aMaxObjSize; }
void SetMaxObjSize(const Size& rSiz) {
m_aMaxObjSize=rSiz; }
diff --git a/include/svx/svdpage.hxx b/include/svx/svdpage.hxx
index c70a2f1f4a2d..b613cf26d043 100644
--- a/include/svx/svdpage.hxx
+++ b/include/svx/svdpage.hxx
@@ -24,6 +24,7 @@
#include <vcl/prntypes.hxx>
#include <svl/itemset.hxx>
#include <svx/sdrpageuser.hxx>
+#include <svx/svdmodel.hxx>
#include <svx/sdr/contact/viewobjectcontactredirector.hxx>
#include <svx/sdrmasterpagedescriptor.hxx>
#include <svx/svxdllapi.h>
@@ -31,10 +32,12 @@
#include <com/sun/star/drawing/XDrawPage.hpp>
#include <svx/svdobj.hxx>
#include <unotools/weakref.hxx>
+#include <basegfx/units/Length.hxx>
#include <memory>
#include <optional>
#include <vector>
#include <deque>
+#include <basegfx/units/Size2DLWrap.hxx>
// predefines
@@ -42,7 +45,6 @@ namespace model { class Theme; }
namespace reportdesign { class OSection; }
namespace sdr::contact { class ViewContact; }
class SdrPage;
-class SdrModel;
class SfxItemPool;
class SdrPageView;
class SdrLayerAdmin;
@@ -361,6 +363,77 @@ public:
void dumpAsXml(xmlTextWriterPtr pWriter) const;
};
+namespace svx
+{
+
+class Border
+{
+private:
+ gfx::Length maLeft;
+ gfx::Length maRight;
+ gfx::Length maUpper;
+ gfx::Length maLower;
+ gfx::LengthUnit meUnit;
+
+public:
+ Border(gfx::LengthUnit eUnit = gfx::LengthUnit::hmm)
+ : maLeft(0_emu)
+ , maRight(0_emu)
+ , maUpper(0_emu)
+ , maLower(0_emu)
+ , meUnit(eUnit)
+ {}
+
+ gfx::Length const& left() const { return maLeft; }
+ gfx::Length const& right() const { return maRight; }
+ gfx::Length const& upper() const { return maUpper; }
+ gfx::Length const& lower() const { return maLower; }
+
+ gfx::Length const& getLeft() const { return maLeft; }
+ gfx::Length const& getRight() const { return maRight; }
+ gfx::Length const& getUpper() const { return maUpper; }
+ gfx::Length const& getLower() const { return maLower; }
+
+ tools::Long leftUnit() const { return maLeft.as(meUnit); }
+ tools::Long rightUnit() const { return maRight.as(meUnit); }
+ tools::Long upperUnit() const { return maUpper.as(meUnit); }
+ tools::Long lowerUnit() const { return maLower.as(meUnit); }
+
+ tools::Rectangle toToolsRect() const
+ {
+ return tools::Rectangle(leftUnit(), upperUnit(), rightUnit(),
lowerUnit());
+ }
+
+ bool isEmpty() const
+ {
+ return maLeft == 0_emu
+ && maRight == 0_emu
+ && maUpper == 0_emu
+ && maLower == 0_emu;
+ }
+
+ void setLeft(gfx::Length const& rLeft)
+ {
+ maLeft = rLeft;
+ }
+
+ void setRight(gfx::Length const& rRight)
+ {
+ maRight = rRight;
+ }
+
+ void setUpper(gfx::Length const& rUpper)
+ {
+ maUpper = rUpper;
+ }
+
+ void setLower(gfx::Length const& rLower)
+ {
+ maLower = rLower;
+ }
+};
+
+} // end svx
/**
A SdrPage contains exactly one SdrObjList and a description of the physical
@@ -423,12 +496,9 @@ private:
SdrModel& mrSdrModelFromSdrPage;
private:
- tools::Long mnWidth; // page size
- tools::Long mnHeight; // page size
- sal_Int32 mnBorderLeft; // left page margin
- sal_Int32 mnBorderUpper; // top page margin
- sal_Int32 mnBorderRight; // right page margin
- sal_Int32 mnBorderLower; // bottom page margin
+ gfx::Size2DLWrap maSize;
+ svx::Border maBorder;
+
bool mbBackgroundFullSize = false; ///< Background object to represent the
whole page.
std::unique_ptr<SdrLayerAdmin> mpLayerAdmin;
@@ -485,21 +555,51 @@ public:
void setPageBorderOnlyLeftRight(bool bNew) { mbPageBorderOnlyLeftRight =
bNew; }
bool getPageBorderOnlyLeftRight() const { return
mbPageBorderOnlyLeftRight; }
- virtual void SetSize(const Size& aSiz);
- Size GetSize() const;
+ gfx::LengthUnit getUnit() const { return
getSdrModelFromSdrPage().getUnit(); }
+ virtual void setSize(gfx::Size2DLWrap const& rSize);
+
+ void setToolsSize(Size const rSize)
+ {
+ setSize(gfx::Size2DLWrap::create(rSize, getUnit()));
+ }
+
+ const gfx::Size2DLWrap& getSize() const
+ {
+ return maSize;
+ }
+
+ gfx::Range2DLWrap getRectangle() const
+ {
+ return gfx::Range2DLWrap(0_emu, 0_emu, maSize.getWidth(),
maSize.getHeight(), getUnit());
+ }
+
+ gfx::Range2DLWrap getInnerRectangle() const
+ {
+ return gfx::Range2DLWrap(maBorder.getLeft(), maBorder.getUpper(),
+ maSize.getWidth() - maBorder.getRight(),
+ maSize.getHeight() - maBorder.getLower(),
+ getUnit());
+ }
+
virtual void SetOrientation(Orientation eOri);
virtual Orientation GetOrientation() const;
- tools::Long GetWidth() const;
- tools::Long GetHeight() const;
- virtual void SetBorder(sal_Int32 nLft, sal_Int32 nUpp, sal_Int32 nRgt,
sal_Int32 Lwr);
+
+ virtual svx::Border const& getBorder() const
+ {
+ return maBorder;
+ }
+
+ virtual void setBorder(svx::Border const& rBorder)
+ {
+ maBorder = rBorder;
+ }
+
+ virtual void SetBorder(sal_Int32 nLeft, sal_Int32 nUpper, sal_Int32
nRight, sal_Int32 Lower);
virtual void SetLeftBorder(sal_Int32 nBorder);
virtual void SetUpperBorder(sal_Int32 nBorder);
virtual void SetRightBorder(sal_Int32 nBorder);
virtual void SetLowerBorder(sal_Int32 nBorder);
- sal_Int32 GetLeftBorder() const;
- sal_Int32 GetUpperBorder() const;
- sal_Int32 GetRightBorder() const;
- sal_Int32 GetLowerBorder() const;
+
void SetBackgroundFullSize(bool bIn);
bool IsBackgroundFullSize() const;
diff --git a/reportdesign/source/ui/report/ReportSection.cxx
b/reportdesign/source/ui/report/ReportSection.cxx
index e983c4bc214d..4d59bd294000 100644
--- a/reportdesign/source/ui/report/ReportSection.cxx
+++ b/reportdesign/source/ui/report/ReportSection.cxx
@@ -221,9 +221,10 @@ void OReportSection::fill()
// m_pPage->SetUpperBorder(-10000);
m_pView->SetDesignMode();
-
- m_pPage->SetSize( Size(
getStyleProperty<awt::Size>(xReportDefinition,PROPERTY_PAPERSIZE).Width,5*m_xSection->getHeight())
);
- const Size aPageSize = m_pPage->GetSize();
+ auto aWidth = getStyleProperty<awt::Size>(xReportDefinition,
PROPERTY_PAPERSIZE).Width;
+ auto aHeight = 5 * m_xSection->getHeight();
+ m_pPage->setToolsSize(Size(aWidth, aHeight));
+ const Size aPageSize = m_pPage->getSize().toToolsSize();
m_pView->SetWorkArea( tools::Rectangle( Point( nLeftMargin, 0),
Size(aPageSize.Width() - nLeftMargin - nRightMargin,aPageSize.Height()) ) );
}
@@ -481,12 +482,12 @@ void OReportSection::_propertyChanged(const
beans::PropertyChangeEvent& _rEvent)
{
m_pPage->SetRightBorder(nRightMargin);
}
- const Size aOldPageSize = m_pPage->GetSize();
+ const Size aOldPageSize = m_pPage->getSize().toToolsSize();
sal_Int32 nNewHeight = 5*m_xSection->getHeight();
if ( aOldPageSize.Height() != nNewHeight || nPaperWidth !=
aOldPageSize.Width() )
{
- m_pPage->SetSize( Size( nPaperWidth,nNewHeight) );
- const Size aPageSize = m_pPage->GetSize();
+ m_pPage->setToolsSize(Size(nPaperWidth, nNewHeight));
+ const Size aPageSize = m_pPage->getSize().toToolsSize();
m_pView->SetWorkArea( tools::Rectangle( Point( nLeftMargin, 0),
Size(aPageSize.Width() - nLeftMargin - nRightMargin,aPageSize.Height()) ) );
}
impl_adjustObjectSizePosition(nPaperWidth,nLeftMargin,nRightMargin);
diff --git a/reportdesign/source/ui/report/SectionView.cxx
b/reportdesign/source/ui/report/SectionView.cxx
index e5c425ace570..73b89986f178 100644
--- a/reportdesign/source/ui/report/SectionView.cxx
+++ b/reportdesign/source/ui/report/SectionView.cxx
@@ -85,7 +85,7 @@ void OSectionView::MakeVisible( const tools::Rectangle&
rRect, vcl::Window& rWin
const sal_Int32 nVisBottom = aVisRect.Bottom();
// don't scroll beyond the page size
- Size aPageSize = m_pSectionWindow->getPage()->GetSize();
+ Size aPageSize = m_pSectionWindow->getPage()->getSize().toToolsSize();
const sal_Int32 nPageWidth = aPageSize.Width();
const sal_Int32 nPageHeight = aPageSize.Height();
diff --git a/sc/source/core/data/drawpage.cxx b/sc/source/core/data/drawpage.cxx
index 9baa9be3ca6a..43034dde81f5 100644
--- a/sc/source/core/data/drawpage.cxx
+++ b/sc/source/core/data/drawpage.cxx
@@ -24,8 +24,8 @@
ScDrawPage::ScDrawPage(ScDrawLayer& rNewModel, bool bMasterPage)
: FmFormPage(rNewModel, bMasterPage)
{
- SetSize( Size( SAL_MAX_INT32, SAL_MAX_INT32 ) );
- // largest size supported by sal_Int32 SdrPage::mnWidth/Height
+ setToolsSize(Size(SAL_MAX_INT32, SAL_MAX_INT32));
+ // largest size supported by sal_Int32 SdrPage::mnWidth/Height
}
ScDrawPage::~ScDrawPage()
diff --git a/sc/source/core/data/drwlayer.cxx b/sc/source/core/data/drwlayer.cxx
index 80bebd1be8a2..c5b7967d323b 100644
--- a/sc/source/core/data/drwlayer.cxx
+++ b/sc/source/core/data/drwlayer.cxx
@@ -647,9 +647,9 @@ void ScDrawLayer::SetPageSize(sal_uInt16 nPageNo, const
Size& rSize, bool bUpdat
if (!pPage)
return;
- if ( rSize != pPage->GetSize() )
+ if (rSize != pPage->getSize().toToolsSize())
{
- pPage->SetSize( rSize );
+ pPage->setToolsSize(rSize);
Broadcast( ScTabSizeChangedHint( static_cast<SCTAB>(nPageNo) ) ); //
SetWorkArea() on the views
}
diff --git a/sc/source/core/data/postit.cxx b/sc/source/core/data/postit.cxx
index fa84f0212b81..a9f32f781251 100644
--- a/sc/source/core/data/postit.cxx
+++ b/sc/source/core/data/postit.cxx
@@ -366,7 +366,7 @@ void ScCaptionCreator::Initialize()
mbNegPage = mrDoc.IsNegativePage( maPos.Tab() );
if( SdrPage* pDrawPage = GetDrawPage() )
{
- maPageRect = tools::Rectangle( Point( 0, 0 ), pDrawPage->GetSize() );
+ maPageRect = pDrawPage->getRectangle().toToolsRect();
/* #i98141# SdrPage::GetSize() returns negative width in RTL mode.
The call to Rectangle::Adjust() orders left/right coordinate
accordingly. */
diff --git a/sc/source/filter/rtf/eeimpars.cxx
b/sc/source/filter/rtf/eeimpars.cxx
index a2eca4858c2b..841a0f5c9b89 100644
--- a/sc/source/filter/rtf/eeimpars.cxx
+++ b/sc/source/filter/rtf/eeimpars.cxx
@@ -601,7 +601,7 @@ void ScEEImport::InsertGraphic( SCCOL nCol, SCROW nRow,
SCTAB nTab,
aLogicSize = pDefaultDev->PixelToLogic( aSizePix, MapMode(
MapUnit::Map100thMM ) );
// Limit size
- ::ScLimitSizeOnDrawPage( aLogicSize, aInsertPos, pPage->GetSize() );
+ ::ScLimitSizeOnDrawPage(aLogicSize, aInsertPos,
pPage->getSize().toToolsSize());
if ( pI->oGraphic )
{
diff --git a/sc/source/ui/app/client.cxx b/sc/source/ui/app/client.cxx
index 5c44bc077e83..5960a9239c37 100644
--- a/sc/source/ui/app/client.cxx
+++ b/sc/source/ui/app/client.cxx
@@ -99,7 +99,7 @@ void ScClient::RequestNewObjectArea( tools::Rectangle&
aLogicRect )
return;
Point aPos;
- Size aSize = pPage->GetSize();
+ Size aSize = pPage->getSize().toToolsSize();
if ( aSize.Width() < 0 )
{
aPos.setX( aSize.Width() + 1 ); // negative
diff --git a/sc/source/ui/drawfunc/fuins1.cxx b/sc/source/ui/drawfunc/fuins1.cxx
index 9b51a62c5b2a..1d41666ac79a 100644
--- a/sc/source/ui/drawfunc/fuins1.cxx
+++ b/sc/source/ui/drawfunc/fuins1.cxx
@@ -179,7 +179,7 @@ static void lcl_InsertGraphic( const Graphic& rGraphic,
if ( rData.GetDocument().IsNegativePage( rData.GetTabNo() ) )
aInsertPos.AdjustX( -(aLogicSize.Width()) ); // move position to
left edge
- ScLimitSizeOnDrawPage( aLogicSize, aInsertPos, pPage->GetSize() );
+ ScLimitSizeOnDrawPage(aLogicSize, aInsertPos,
pPage->getSize().toToolsSize());
tools::Rectangle aRect ( aInsertPos, aLogicSize );
@@ -233,7 +233,7 @@ static void lcl_InsertMedia( const OUString& rMediaURL,
bool bApi,
else
aSize = Size( 5000, 5000 );
- ScLimitSizeOnDrawPage( aSize, aInsertPos, pPage->GetSize() );
+ ScLimitSizeOnDrawPage(aSize, aInsertPos, pPage->getSize().toToolsSize());
if( rData.GetDocument().IsNegativePage( rData.GetTabNo() ) )
aInsertPos.AdjustX( -(aSize.Width()) );
diff --git a/sc/source/ui/view/drawview.cxx b/sc/source/ui/view/drawview.cxx
index c1a48dc6df12..416a75a1c2ae 100644
--- a/sc/source/ui/view/drawview.cxx
+++ b/sc/source/ui/view/drawview.cxx
@@ -265,9 +265,9 @@ void ScDrawView::UpdateWorkArea()
SdrPage* pPage = GetModel().GetPage(static_cast<sal_uInt16>(nTab));
if (pPage)
{
- Size aPageSize( pPage->GetSize() );
+ Size aPageSize(pPage->getSize().toToolsSize());
tools::Rectangle aNewArea( Point(), aPageSize );
- if ( aPageSize.Width() < 0 )
+ if (aPageSize.Width() < 0)
{
// RTL: from max.negative (left) to zero (right)
aNewArea.SetRight( 0 );
diff --git a/sc/source/ui/view/viewfun7.cxx b/sc/source/ui/view/viewfun7.cxx
index f704256756fe..2e919e21198d 100644
--- a/sc/source/ui/view/viewfun7.cxx
+++ b/sc/source/ui/view/viewfun7.cxx
@@ -57,7 +57,7 @@ static void lcl_AdjustInsertPos( ScViewData& rData, Point&
rPos, const Size& rSi
{
SdrPage* pPage = rData.GetScDrawView()->GetModel().GetPage(
static_cast<sal_uInt16>(rData.GetTabNo()) );
OSL_ENSURE(pPage,"pPage ???");
- Size aPgSize( pPage->GetSize() );
+ Size aPgSize(pPage->getSize().toToolsSize());
if (aPgSize.Width() < 0)
aPgSize.setWidth( -aPgSize.Width() );
tools::Long x = aPgSize.Width() - rPos.X() - rSize.Width();
diff --git a/sd/inc/sdpage.hxx b/sd/inc/sdpage.hxx
index ef127ea60769..6c0da7ed6c92 100644
--- a/sd/inc/sdpage.hxx
+++ b/sd/inc/sdpage.hxx
@@ -156,7 +156,8 @@ public:
virtual rtl::Reference<SdrPage> CloneSdrPage(SdrModel& rTargetModel) const
override;
- virtual void SetSize(const Size& aSize) override;
+ virtual void setSize(gfx::Size2DLWrap const& rSize) override;
+
virtual void SetBorder(sal_Int32 nLft, sal_Int32 nUpp, sal_Int32 nRgt,
sal_Int32 Lwr) override;
virtual void SetLeftBorder(sal_Int32 nBorder) override;
virtual void SetRightBorder(sal_Int32 nBorder) override;
diff --git a/sd/source/core/CustomAnimationEffect.cxx
b/sd/source/core/CustomAnimationEffect.cxx
index f041d0e1e45b..5982632f5a56 100644
--- a/sd/source/core/CustomAnimationEffect.cxx
+++ b/sd/source/core/CustomAnimationEffect.cxx
@@ -1584,8 +1584,8 @@ void CustomAnimationEffect::updateSdrPathObjFromPath(
SdrPathObj& rPathObj )
SdrPage* pPage = pObj->getSdrPageFromSdrObject();
if( pPage )
{
- const Size aPageSize( pPage->GetSize() );
-
aPolyPoly.transform(basegfx::utils::createScaleB2DHomMatrix(static_cast<double>(aPageSize.Width()),
static_cast<double>(aPageSize.Height())));
+ const auto aPageSize = pPage->getSize().toB2DSize();
+
aPolyPoly.transform(basegfx::utils::createScaleB2DHomMatrix(aPageSize.getWidth(),
aPageSize.getHeight()));
}
const ::tools::Rectangle aBoundRect( pObj->GetCurrentBoundRect() );
@@ -1625,9 +1625,10 @@ void CustomAnimationEffect::updatePathFromSdrPathObj(
const SdrPathObj& rPathObj
SdrPage* pPage = pObj->getSdrPageFromSdrObject();
if( pPage )
{
- const Size aPageSize( pPage->GetSize() );
+ const auto aPageSize = pPage->getSize().toB2DSize();
aPolyPoly.transform(basegfx::utils::createScaleB2DHomMatrix(
- 1.0 / static_cast<double>(aPageSize.Width()), 1.0 /
static_cast<double>(aPageSize.Height())));
+ 1.0 / aPageSize.getWidth(),
+ 1.0 / aPageSize.getHeight()));
}
}
diff --git a/sd/source/core/drawdoc.cxx b/sd/source/core/drawdoc.cxx
index 8df4f49c1d9a..7c4a302f282b 100644
--- a/sd/source/core/drawdoc.cxx
+++ b/sd/source/core/drawdoc.cxx
@@ -441,9 +441,11 @@ void SdDrawDocument::AdaptPageSizeForAllPages(
new SdPageFormatUndoAction(
this,
pPage,
- pPage->GetSize(),
- pPage->GetLeftBorder(), pPage->GetRightBorder(),
- pPage->GetUpperBorder(), pPage->GetLowerBorder(),
+ pPage->getSize().toToolsSize(),
+ pPage->getBorder().leftUnit(),
+ pPage->getBorder().rightUnit(),
+ pPage->getBorder().upperUnit(),
+ pPage->getBorder().lowerUnit(),
pPage->GetOrientation(),
pPage->GetPaperBin(),
pPage->IsBackgroundFullSize(),
@@ -464,7 +466,7 @@ void SdDrawDocument::AdaptPageSizeForAllPages(
if (rNewSize.Width() > 0)
{
- pPage->SetSize(rNewSize);
+ pPage->setToolsSize(rNewSize);
}
}
@@ -496,9 +498,11 @@ void SdDrawDocument::AdaptPageSizeForAllPages(
new SdPageFormatUndoAction(
this,
pPage,
- pPage->GetSize(),
- pPage->GetLeftBorder(), pPage->GetRightBorder(),
- pPage->GetUpperBorder(), pPage->GetLowerBorder(),
+ pPage->getSize().toToolsSize(),
+ pPage->getBorder().leftUnit(),
+ pPage->getBorder().rightUnit(),
+ pPage->getBorder().upperUnit(),
+ pPage->getBorder().lowerUnit(),
pPage->GetOrientation(),
pPage->GetPaperBin(),
pPage->IsBackgroundFullSize(),
@@ -519,7 +523,7 @@ void SdDrawDocument::AdaptPageSizeForAllPages(
if (rNewSize.Width() > 0)
{
- pPage->SetSize(rNewSize);
+ pPage->setToolsSize(rNewSize);
}
}
diff --git a/sd/source/core/drawdoc2.cxx b/sd/source/core/drawdoc2.cxx
index 4feb8f10c6fd..7caebb76925b 100644
--- a/sd/source/core/drawdoc2.cxx
+++ b/sd/source/core/drawdoc2.cxx
@@ -526,12 +526,12 @@ void SdDrawDocument::CreateFirstPages( SdDrawDocument
const * pRefDocument /* =
if( pRefPage )
{
- pHandoutPage->SetSize(pRefPage->GetSize());
- pHandoutPage->SetBorder( pRefPage->GetLeftBorder(),
pRefPage->GetUpperBorder(), pRefPage->GetRightBorder(),
pRefPage->GetLowerBorder() );
+ pHandoutPage->setSize(pRefPage->getSize());
+ pHandoutPage->setBorder(pRefPage->getBorder());
}
else
{
- pHandoutPage->SetSize(aDefSize);
+ pHandoutPage->setToolsSize(aDefSize);
pHandoutPage->SetBorder(0, 0, 0, 0);
}
@@ -541,12 +541,9 @@ void SdDrawDocument::CreateFirstPages( SdDrawDocument
const * pRefDocument /* =
// Insert master page and register this with the handout page
rtl::Reference<SdPage> pHandoutMPage = AllocSdPage(true);
- pHandoutMPage->SetSize( pHandoutPage->GetSize() );
+ pHandoutMPage->setSize(pHandoutPage->getSize());
pHandoutMPage->SetPageKind(PageKind::Handout);
- pHandoutMPage->SetBorder( pHandoutPage->GetLeftBorder(),
- pHandoutPage->GetUpperBorder(),
- pHandoutPage->GetRightBorder(),
- pHandoutPage->GetLowerBorder() );
+ pHandoutMPage->setBorder(pHandoutPage->getBorder());
InsertMasterPage(pHandoutMPage.get(), 0);
pHandoutPage->TRG_SetMasterPage( *pHandoutMPage );
@@ -565,13 +562,13 @@ void SdDrawDocument::CreateFirstPages( SdDrawDocument
const * pRefDocument /* =
if( pRefPage )
{
- pPage->SetSize( pRefPage->GetSize() );
- pPage->SetBorder( pRefPage->GetLeftBorder(),
pRefPage->GetUpperBorder(), pRefPage->GetRightBorder(),
pRefPage->GetLowerBorder() );
+ pPage->setSize(pRefPage->getSize());
+ pPage->setBorder(pRefPage->getBorder());
}
else if (meDocType == DocumentType::Draw)
{
// Draw: always use default size with margins
- pPage->SetSize(aDefSize);
+ pPage->setToolsSize(aDefSize);
SfxPrinter* pPrinter = mpDocSh->GetPrinter(false);
if (pPrinter && pPrinter->IsValid())
@@ -601,9 +598,9 @@ void SdDrawDocument::CreateFirstPages( SdDrawDocument const
* pRefDocument /* =
else
{
// Impress: always use screen format, landscape.
- Size aSz( SvxPaperInfo::GetPaperSize(PAPER_SCREEN_16_9,
MapUnit::Map100thMM) );
- pPage->SetSize( Size( aSz.Height(), aSz.Width() ) );
- pPage->SetBorder(0, 0, 0, 0);
+ Size aSize = SvxPaperInfo::GetPaperSize(PAPER_SCREEN_16_9,
MapUnit::Map100thMM);
+ pPage->setToolsSize(Size(aSize.Height(), aSize.Width()));
+ pPage->setBorder(svx::Border());
}
InsertPage(pPage.get(), 1);
@@ -616,11 +613,8 @@ void SdDrawDocument::CreateFirstPages( SdDrawDocument
const * pRefDocument /* =
// Insert master page, then register this with the page
rtl::Reference<SdPage> pMPage = AllocSdPage(true);
- pMPage->SetSize( pPage->GetSize() );
- pMPage->SetBorder( pPage->GetLeftBorder(),
- pPage->GetUpperBorder(),
- pPage->GetRightBorder(),
- pPage->GetLowerBorder() );
+ pMPage->setSize(pPage->getSize());
+ pMPage->setBorder(pPage->getBorder());
InsertMasterPage(pMPage.get(), 1);
pPage->TRG_SetMasterPage( *pMPage );
if( bClipboard )
@@ -634,19 +628,19 @@ void SdDrawDocument::CreateFirstPages( SdDrawDocument
const * pRefDocument /* =
if( pRefPage )
{
- pNotesPage->SetSize( pRefPage->GetSize() );
- pNotesPage->SetBorder( pRefPage->GetLeftBorder(),
pRefPage->GetUpperBorder(), pRefPage->GetRightBorder(),
pRefPage->GetLowerBorder() );
+ pNotesPage->setSize(pRefPage->getSize());
+ pNotesPage->setBorder(pRefPage->getBorder());
}
else
{
// Always use portrait format
if (aDefSize.Height() >= aDefSize.Width())
{
- pNotesPage->SetSize(aDefSize);
+ pNotesPage->setToolsSize(aDefSize);
}
else
{
- pNotesPage->SetSize( Size(aDefSize.Height(), aDefSize.Width()) );
+ pNotesPage->setToolsSize(Size(aDefSize.Height(),
aDefSize.Width()));
}
pNotesPage->SetBorder(0, 0, 0, 0);
@@ -658,12 +652,9 @@ void SdDrawDocument::CreateFirstPages( SdDrawDocument
const * pRefDocument /* =
// Insert master page, then register this with the notes page
rtl::Reference<SdPage> pNotesMPage = AllocSdPage(true);
- pNotesMPage->SetSize( pNotesPage->GetSize() );
+ pNotesMPage->setSize(pNotesPage->getSize());
pNotesMPage->SetPageKind(PageKind::Notes);
- pNotesMPage->SetBorder( pNotesPage->GetLeftBorder(),
- pNotesPage->GetUpperBorder(),
- pNotesPage->GetRightBorder(),
- pNotesPage->GetLowerBorder() );
+ pNotesMPage->setBorder(pNotesPage->getBorder());
InsertMasterPage(pNotesMPage.get(), 2);
pNotesPage->TRG_SetMasterPage( *pNotesMPage );
if( bClipboard )
@@ -1108,11 +1099,8 @@ void SdDrawDocument::CheckMasterPages()
pNewNotesPage->SetPageKind(PageKind::Notes);
if( pRefNotesPage )
{
- pNewNotesPage->SetSize( pRefNotesPage->GetSize() );
- pNewNotesPage->SetBorder( pRefNotesPage->GetLeftBorder(),
- pRefNotesPage->GetUpperBorder(),
- pRefNotesPage->GetRightBorder(),
- pRefNotesPage->GetLowerBorder() );
+ pNewNotesPage->setSize(pRefNotesPage->getSize());
+ pNewNotesPage->setBorder(pRefNotesPage->getBorder());
}
InsertMasterPage(pNewNotesPage.get(), nPage );
pNewNotesPage->SetLayoutName( pPage->GetLayoutName() );
@@ -1178,11 +1166,8 @@ sal_uInt16 SdDrawDocument::CreatePage (
// Set the size here since else the presobj autolayout
// will be wrong.
- pStandardPage->SetSize( pPreviousStandardPage->GetSize() );
- pStandardPage->SetBorder( pPreviousStandardPage->GetLeftBorder(),
- pPreviousStandardPage->GetUpperBorder(),
- pPreviousStandardPage->GetRightBorder(),
- pPreviousStandardPage->GetLowerBorder() );
+ pStandardPage->setSize(pPreviousStandardPage->getSize());
+ pStandardPage->setBorder(pPreviousStandardPage->getBorder());
// Use master page of current page.
pStandardPage->TRG_SetMasterPage(pPreviousStandardPage->TRG_GetMasterPage());
@@ -1367,11 +1352,8 @@ void SdDrawDocument::SetupNewPage (
{
if (pPreviousPage != nullptr)
{
- pPage->SetSize( pPreviousPage->GetSize() );
- pPage->SetBorder( pPreviousPage->GetLeftBorder(),
- pPreviousPage->GetUpperBorder(),
- pPreviousPage->GetRightBorder(),
- pPreviousPage->GetLowerBorder() );
+ pPage->setSize(pPreviousPage->getSize());
+ pPage->setBorder(pPreviousPage->getBorder());
}
pPage->SetName(sPageName);
diff --git a/sd/source/core/drawdoc3.cxx b/sd/source/core/drawdoc3.cxx
index 5310789d2988..5ef2a51523fc 100644
--- a/sd/source/core/drawdoc3.cxx
+++ b/sd/source/core/drawdoc3.cxx
@@ -424,19 +424,13 @@ bool SdDrawDocument::InsertBookmarkAsPage(
// before the first page.
// Note that the pointers are used later on as general page pointers.
SdPage* pRefPage = GetSdPage(0, PageKind::Standard);
- Size aSize(pRefPage->GetSize());
- sal_Int32 nLeft = pRefPage->GetLeftBorder();
- sal_Int32 nRight = pRefPage->GetRightBorder();
- sal_Int32 nUpper = pRefPage->GetUpperBorder();
- sal_Int32 nLower = pRefPage->GetLowerBorder();
+ Size aSize = pRefPage->getSize().toToolsSize();
+ auto aBorder = pRefPage->getBorder();
Orientation eOrient = pRefPage->GetOrientation();
SdPage* pNPage = GetSdPage(0, PageKind::Notes);
- Size aNSize(pNPage->GetSize());
- sal_Int32 nNLeft = pNPage->GetLeftBorder();
- sal_Int32 nNRight = pNPage->GetRightBorder();
- sal_Int32 nNUpper = pNPage->GetUpperBorder();
- sal_Int32 nNLower = pNPage->GetLowerBorder();
+ Size aNSize = pNPage->getSize().toToolsSize();
+ auto aNBorder = pNPage->getBorder();
Orientation eNOrient = pNPage->GetOrientation();
// Adapt page size and margins to those of the later pages?
@@ -462,11 +456,11 @@ bool SdDrawDocument::InsertBookmarkAsPage(
{
SdPage* pBMPage = pBookmarkDoc->GetSdPage(0,PageKind::Standard);
- if (pBMPage->GetSize() != pRefPage->GetSize() ||
- pBMPage->GetLeftBorder() != pRefPage->GetLeftBorder() ||
- pBMPage->GetRightBorder() != pRefPage->GetRightBorder() ||
- pBMPage->GetUpperBorder() != pRefPage->GetUpperBorder() ||
- pBMPage->GetLowerBorder() != pRefPage->GetLowerBorder())
+ if (pBMPage->getSize() != pRefPage->getSize() ||
+ pBMPage->getBorder().getLeft() != pRefPage->getBorder().getLeft()
||
+ pBMPage->getBorder().getRight() !=
pRefPage->getBorder().getRight() ||
+ pBMPage->getBorder().getUpper() !=
pRefPage->getBorder().getUpper() ||
+ pBMPage->getBorder().getLower() !=
pRefPage->getBorder().getLower())
{
OUString aStr(SdResId(STR_SCALE_OBJECTS));
std::unique_ptr<weld::MessageDialog>
xQueryBox(Application::CreateMessageDialog(nullptr,
@@ -877,11 +871,11 @@ bool SdDrawDocument::InsertBookmarkAsPage(
if (bScaleObjects)
{
- ::tools::Rectangle aBorderRect(nLeft, nUpper, nRight, nLower);
+ tools::Rectangle aBorderRect(aBorder.toToolsRect());
pRefPage->ScaleObjects(aSize, aBorderRect, true);
}
- pRefPage->SetSize(aSize);
- pRefPage->SetBorder(nLeft, nUpper, nRight, nLower);
+ pRefPage->setToolsSize(aSize);
+ pRefPage->setBorder(aBorder);
pRefPage->SetOrientation( eOrient );
if( bRemoveEmptyPresObj )
@@ -896,12 +890,12 @@ bool SdDrawDocument::InsertBookmarkAsPage(
if (bScaleObjects)
{
- ::tools::Rectangle aBorderRect(nNLeft, nNUpper, nNRight,
nNLower);
+ tools::Rectangle aBorderRect(aNBorder.toToolsRect());
pRefPage->ScaleObjects(aNSize, aBorderRect, true);
}
- pRefPage->SetSize(aNSize);
- pRefPage->SetBorder(nNLeft, nNUpper, nNRight, nNLower);
+ pRefPage->setToolsSize(aNSize);
+ pRefPage->setBorder(aNBorder);
pRefPage->SetOrientation( eNOrient );
if( bRemoveEmptyPresObj )
@@ -919,11 +913,11 @@ bool SdDrawDocument::InsertBookmarkAsPage(
{
if (bScaleObjects)
{
- ::tools::Rectangle aBorderRect(nLeft, nUpper, nRight,
nLower);
+ tools::Rectangle aBorderRect(aBorder.toToolsRect());
pRefPage->ScaleObjects(aSize, aBorderRect, true);
}
- pRefPage->SetSize(aSize);
- pRefPage->SetBorder(nLeft, nUpper, nRight, nLower);
+ pRefPage->setToolsSize(aNSize);
+ pRefPage->setBorder(aBorder);
pRefPage->SetOrientation( eOrient );
uno::Reference< drawing::XDrawPage >
xNewPage(GetMasterPage(nPage)->getUnoPage(), uno::UNO_QUERY_THROW);
@@ -954,11 +948,11 @@ bool SdDrawDocument::InsertBookmarkAsPage(
{
if (bScaleObjects)
{
- ::tools::Rectangle aBorderRect(nNLeft, nNUpper, nNRight,
nNLower);
+ tools::Rectangle aBorderRect(aNBorder.toToolsRect());
pRefPage->ScaleObjects(aNSize, aBorderRect, true);
}
- pRefPage->SetSize(aNSize);
- pRefPage->SetBorder(nNLeft, nNUpper, nNRight, nNLower);
+ pRefPage->setToolsSize(aNSize);
+ pRefPage->setBorder(aNBorder);
pRefPage->SetOrientation( eNOrient );
}
@@ -1128,7 +1122,7 @@ bool SdDrawDocument::InsertBookmarkAsObject(
}
else
{
- aObjPos = ::tools::Rectangle(Point(), pPage->GetSize()).Center();
+ aObjPos = ::tools::Rectangle(Point(),
pPage->getSize().toToolsSize()).Center();
}
size_t nCountBefore = 0;
@@ -1763,31 +1757,21 @@ void SdDrawDocument::SetMasterPage(sal_uInt16
nSdPageNum,
// Adapt new master pages
if (pSourceDoc != this)
{
- Size aSize(rOldMaster.GetSize());
- ::tools::Rectangle aBorderRect(rOldMaster.GetLeftBorder(),
- rOldMaster.GetUpperBorder(),
- rOldMaster.GetRightBorder(),
- rOldMaster.GetLowerBorder());
+ Size aSize = rOldMaster.getSize().toToolsSize();
+
+ tools::Rectangle aBorderRect(rOldMaster.getBorder().toToolsRect());
+
pMaster->ScaleObjects(aSize, aBorderRect, true);
- pMaster->SetSize(aSize);
- pMaster->SetBorder(rOldMaster.GetLeftBorder(),
- rOldMaster.GetUpperBorder(),
- rOldMaster.GetRightBorder(),
- rOldMaster.GetLowerBorder());
+ pMaster->setSize(rOldMaster.getSize());
+ pMaster->setBorder(rOldMaster.getBorder());
pMaster->SetOrientation( rOldMaster.GetOrientation() );
pMaster->SetAutoLayout(pMaster->GetAutoLayout());
- aSize = rOldNotesMaster.GetSize();
- ::tools::Rectangle
aNotesBorderRect(rOldNotesMaster.GetLeftBorder(),
- rOldNotesMaster.GetUpperBorder(),
- rOldNotesMaster.GetRightBorder(),
- rOldNotesMaster.GetLowerBorder());
+ aSize = rOldNotesMaster.getSize().toToolsSize();
+ tools::Rectangle
aNotesBorderRect(rOldNotesMaster.getBorder().toToolsRect());
pNotesMaster->ScaleObjects(aSize, aNotesBorderRect, true);
- pNotesMaster->SetSize(aSize);
- pNotesMaster->SetBorder(rOldNotesMaster.GetLeftBorder(),
- rOldNotesMaster.GetUpperBorder(),
- rOldNotesMaster.GetRightBorder(),
- rOldNotesMaster.GetLowerBorder());
+ pNotesMaster->setSize(rOldNotesMaster.getSize());
+ pNotesMaster->setBorder(rOldNotesMaster.getBorder());
pNotesMaster->SetOrientation( rOldNotesMaster.GetOrientation() );
pNotesMaster->SetAutoLayout(pNotesMaster->GetAutoLayout());
@@ -1822,11 +1806,8 @@ void SdDrawDocument::SetMasterPage(sal_uInt16 nSdPageNum,
}
pMaster = AllocSdPage(true);
- pMaster->SetSize(pSelectedPage->GetSize());
- pMaster->SetBorder(pSelectedPage->GetLeftBorder(),
- pSelectedPage->GetUpperBorder(),
- pSelectedPage->GetRightBorder(),
- pSelectedPage->GetLowerBorder() );
+ pMaster->setSize(pSelectedPage->getSize());
+ pMaster->setBorder(pSelectedPage->getBorder());
pMaster->SetName(aName);
pMaster->SetLayoutName(aPageLayoutName);
InsertMasterPage(pMaster.get());
@@ -1838,11 +1819,8 @@ void SdDrawDocument::SetMasterPage(sal_uInt16 nSdPageNum,
pNotesMaster = AllocSdPage(true);
pNotesMaster->SetPageKind(PageKind::Notes);
- pNotesMaster->SetSize(pNotes->GetSize());
-e
... etc. - the rest is truncated