[Libreoffice-commits] core.git: include/tools
Tomaž Vajngerl (via logerrit)
logerrit at kemper.freedesktop.org
Mon Apr 26 05:34:12 UTC 2021
include/tools/gen.hxx | 168 ++++++++++++++++++++++++++++----------------------
1 file changed, 96 insertions(+), 72 deletions(-)
New commits:
commit d46f16bb3b1efbf8dc8835221e8e861de4364716
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Fri Apr 23 20:46:35 2021 +0900
Commit: Tomaž Vajngerl <quikee at gmail.com>
CommitDate: Mon Apr 26 07:33:34 2021 +0200
Add unit conversion for Point, Size and Rectangle
This makes it easier to convert between units when they are used
in Point, Size and Rectangle classes, which we use a lot in the
code where conversion of units is needed the most.
constexpr some function on Rectangle as this is needed for the
convert.
Change-Id: I5c7e7c8637e4c9327dd55025be19b8f3f391f395
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114634
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
diff --git a/include/tools/gen.hxx b/include/tools/gen.hxx
index d88e65516951..0f1e942c2eb5 100644
--- a/include/tools/gen.hxx
+++ b/include/tools/gen.hxx
@@ -27,6 +27,7 @@
#include <algorithm>
#include <ostream>
#include <config_options.h>
+#include <o3tl/unit_conversion.hxx>
class SvStream;
namespace rtl
@@ -172,6 +173,18 @@ inline bool operator !=(Point const & p1, Point const & p2)
return !(p1 == p2);
}
+namespace o3tl
+{
+
+constexpr Point convert(const Point& rPoint, o3tl::Length eFrom, o3tl::Length eTo)
+{
+ return Point(
+ o3tl::convert(rPoint.getX(), eFrom, eTo),
+ o3tl::convert(rPoint.getY(), eFrom, eTo));
+}
+
+} // end o3tl
+
template< typename charT, typename traits >
inline std::basic_ostream<charT, traits> & operator <<(
std::basic_ostream<charT, traits> & stream, const Point& point )
@@ -281,6 +294,17 @@ inline Size operator/( const Size &rVal1, const tools::Long nVal2 )
return Size( rVal1.nA/nVal2, rVal1.nB/nVal2 );
}
+namespace o3tl
+{
+
+constexpr Size convert(const Size& rSize, o3tl::Length eFrom, o3tl::Length eTo)
+{
+ return Size(
+ o3tl::convert(rSize.Width(), eFrom, eTo),
+ o3tl::convert(rSize.Height(), eFrom, eTo));
+}
+
+} // end o3tl
template< typename charT, typename traits >
inline std::basic_ostream<charT, traits> & operator <<(
@@ -460,15 +484,28 @@ public:
void SetTop(tools::Long v) { nTop = v; }
void SetBottom(tools::Long v) { nBottom = v; }
- inline Point TopLeft() const;
- inline Point TopRight() const;
- inline Point TopCenter() const;
- inline Point BottomLeft() const;
- inline Point BottomRight() const;
- inline Point BottomCenter() const;
- inline Point LeftCenter() const;
- inline Point RightCenter() const;
- inline Point Center() const;
+ constexpr Point TopLeft() const
+ {
+ return Point( nLeft, nTop );
+ }
+ constexpr Point TopRight() const
+ {
+ return Point( (nRight == RECT_EMPTY) ? nLeft : nRight, nTop );
+ }
+ constexpr Point TopCenter() const
+ {
+ if (IsEmpty())
+ return Point(nLeft, nTop);
+ else
+ return Point(std::min(nLeft, nRight) + std::abs((nRight - nLeft) / 2),
+ std::min(nTop, nBottom));
+ }
+ inline Point BottomLeft() const;
+ inline Point BottomRight() const;
+ inline Point BottomCenter() const;
+ inline Point LeftCenter() const;
+ inline Point RightCenter() const;
+ inline Point Center() const;
/// Move the top and left edges by a delta, preserving width and height
inline void Move( tools::Long nHorzMoveDelta, tools::Long nVertMoveDelta );
@@ -479,12 +516,45 @@ public:
tools::Long AdjustBottom( tools::Long nVertMoveDelta );
inline void SetPos( const Point& rPoint );
void SetSize( const Size& rSize );
- inline Size GetSize() const;
+
+ constexpr Size GetSize() const
+ {
+ return Size(GetWidth(), GetHeight());
+ }
/// Returns the difference between right and left, assuming the range is inclusive.
- inline tools::Long GetWidth() const;
+ constexpr tools::Long GetWidth() const
+ {
+ tools::Long n = 0;
+
+ if (nRight != RECT_EMPTY)
+ {
+ n = nRight - nLeft;
+ if (n < 0)
+ n--;
+ else
+ n++;
+ }
+
+ return n;
+ }
+
/// Returns the difference between bottom and top, assuming the range is inclusive.
- inline tools::Long GetHeight() const;
+ constexpr tools::Long GetHeight() const
+ {
+ tools::Long n = 0;
+
+ if (nBottom != RECT_EMPTY)
+ {
+ n = nBottom - nTop;
+ if (n < 0)
+ n--;
+ else
+ n++;
+ }
+
+ return n;
+ }
tools::Rectangle& Union( const tools::Rectangle& rRect );
tools::Rectangle& Intersection( const tools::Rectangle& rRect );
@@ -500,7 +570,7 @@ public:
void SetEmpty() { nRight = nBottom = RECT_EMPTY; }
void SetWidthEmpty() { nRight = RECT_EMPTY; }
void SetHeightEmpty() { nBottom = RECT_EMPTY; }
- inline bool IsEmpty() const;
+ constexpr bool IsEmpty() const;
bool IsWidthEmpty() const { return nRight == RECT_EMPTY; }
bool IsHeightEmpty() const { return nBottom == RECT_EMPTY; }
@@ -586,21 +656,11 @@ constexpr inline tools::Rectangle::Rectangle( const Point& rLT, const Size& rSiz
, nBottom( rSize.Height() ? nTop+(rSize.Height()-1) : RECT_EMPTY )
{}
-inline bool tools::Rectangle::IsEmpty() const
+constexpr inline bool tools::Rectangle::IsEmpty() const
{
return (nRight == RECT_EMPTY) || (nBottom == RECT_EMPTY);
}
-inline Point tools::Rectangle::TopLeft() const
-{
- return Point( nLeft, nTop );
-}
-
-inline Point tools::Rectangle::TopRight() const
-{
- return Point( (nRight == RECT_EMPTY) ? nLeft : nRight, nTop );
-}
-
inline Point tools::Rectangle::BottomLeft() const
{
return Point( nLeft, (nBottom == RECT_EMPTY) ? nTop : nBottom );
@@ -612,15 +672,6 @@ inline Point tools::Rectangle::BottomRight() const
(nBottom == RECT_EMPTY) ? nTop : nBottom );
}
-inline Point tools::Rectangle::TopCenter() const
-{
- if ( IsEmpty() )
- return Point( nLeft, nTop );
- else
- return Point( std::min( nLeft, nRight ) + std::abs( (nRight - nLeft)/2 ),
- std::min( nTop, nBottom) );
-}
-
inline Point tools::Rectangle::BottomCenter() const
{
if ( IsEmpty() )
@@ -674,45 +725,6 @@ inline void tools::Rectangle::SetPos( const Point& rPoint )
nTop = rPoint.Y();
}
-inline tools::Long tools::Rectangle::GetWidth() const
-{
- tools::Long n;
- if ( nRight == RECT_EMPTY )
- n = 0;
- else
- {
- n = nRight - nLeft;
- if( n < 0 )
- n--;
- else
- n++;
- }
-
- return n;
-}
-
-inline tools::Long tools::Rectangle::GetHeight() const
-{
- tools::Long n;
- if ( nBottom == RECT_EMPTY )
- n = 0;
- else
- {
- n = nBottom - nTop;
- if ( n < 0 )
- n--;
- else
- n++;
- }
-
- return n;
-}
-
-inline Size tools::Rectangle::GetSize() const
-{
- return Size( GetWidth(), GetHeight() );
-}
-
inline tools::Rectangle tools::Rectangle::GetUnion( const tools::Rectangle& rRect ) const
{
tools::Rectangle aTmpRect( *this );
@@ -780,8 +792,20 @@ inline Rectangle operator - ( const Rectangle& rRect, const Point& rPt )
: Rectangle( rRect.nLeft - rPt.X(), rRect.nTop - rPt.Y(),
rRect.nRight - rPt.X(), rRect.nBottom - rPt.Y() );
}
+
+}
+
+namespace o3tl
+{
+
+constexpr tools::Rectangle convert(const tools::Rectangle& rRectangle, o3tl::Length eFrom, o3tl::Length eTo)
+{
+ return tools::Rectangle(o3tl::convert(rRectangle.TopLeft(), eFrom, eTo),
+ o3tl::convert(rRectangle.GetSize(), eFrom, eTo));
}
+} // end o3tl
+
namespace tools
{
template< typename charT, typename traits >
More information about the Libreoffice-commits
mailing list