qskinny/src/common/QskBoxBorderMetrics.h

206 lines
5.4 KiB
C
Raw Normal View History

/******************************************************************************
* QSkinny - Copyright (C) 2016 Uwe Rathmann
* This file may be used under the terms of the QSkinny License, Version 1.0
*****************************************************************************/
#ifndef QSK_BOX_BORDER_METRICS_H
#define QSK_BOX_BORDER_METRICS_H
#include "QskMargins.h"
2018-07-19 12:10:48 +00:00
#include <qmetatype.h>
2018-08-03 06:15:28 +00:00
#include <qnamespace.h>
2018-07-19 12:10:48 +00:00
#include <qsize.h>
class QVariant;
class QSK_EXPORT QskBoxBorderMetrics
{
2021-09-18 13:01:04 +00:00
Q_GADGET
Q_PROPERTY( QskMargins widths READ widths WRITE setWidths )
Q_PROPERTY( Qt::SizeMode sizeMode READ sizeMode WRITE setSizeMode )
Q_PROPERTY( qreal left READ left WRITE setLeft )
Q_PROPERTY( qreal top READ top WRITE setTop )
Q_PROPERTY( qreal right READ right WRITE setRight )
Q_PROPERTY( qreal bottom READ bottom WRITE setBottom )
2018-08-03 06:15:28 +00:00
public:
2020-05-03 11:40:19 +00:00
constexpr QskBoxBorderMetrics() noexcept;
2018-08-03 06:15:28 +00:00
constexpr QskBoxBorderMetrics(
2020-05-03 11:40:19 +00:00
qreal width, Qt::SizeMode = Qt::AbsoluteSize ) noexcept;
2018-08-03 06:15:28 +00:00
2017-10-18 17:45:56 +00:00
constexpr QskBoxBorderMetrics( qreal left, qreal top,
2020-05-03 11:40:19 +00:00
qreal right, qreal bottom, Qt::SizeMode = Qt::AbsoluteSize ) noexcept;
2020-05-03 11:40:19 +00:00
constexpr QskBoxBorderMetrics( const QskMargins& widths,
Qt::SizeMode sizeMode = Qt::AbsoluteSize ) noexcept;
2020-09-28 07:03:35 +00:00
constexpr QskBoxBorderMetrics( const QMarginsF& widths,
Qt::SizeMode sizeMode = Qt::AbsoluteSize ) noexcept;
2020-05-03 11:40:19 +00:00
constexpr bool operator==( const QskBoxBorderMetrics& ) const noexcept;
constexpr bool operator!=( const QskBoxBorderMetrics& ) const noexcept;
2020-05-03 11:40:19 +00:00
constexpr bool isNull() const noexcept;
2020-05-03 11:40:19 +00:00
void setWidthAt( Qt::Edges, qreal width ) noexcept;
qreal widthAt( Qt::Edge ) const noexcept;
2020-05-03 11:40:19 +00:00
void setWidths( const QskMargins& ) noexcept;
constexpr const QskMargins& widths() const noexcept;
constexpr qreal left() const noexcept;
constexpr qreal top() const noexcept;
constexpr qreal right() const noexcept;
constexpr qreal bottom() const noexcept;
void setLeft( qreal ) noexcept;
void setTop( qreal ) noexcept;
void setRight( qreal ) noexcept;
void setBottom( qreal ) noexcept;
2020-05-03 11:40:19 +00:00
void setSizeMode( Qt::SizeMode ) noexcept;
constexpr Qt::SizeMode sizeMode() const noexcept;
2018-08-03 06:15:28 +00:00
QskBoxBorderMetrics interpolated(
2020-05-03 11:40:19 +00:00
const QskBoxBorderMetrics&, qreal value ) const noexcept;
2018-08-03 06:15:28 +00:00
2020-05-03 11:40:19 +00:00
QskBoxBorderMetrics toAbsolute( const QSizeF& ) const noexcept;
QskHashValue hash( QskHashValue seed = 0 ) const noexcept;
static QVariant interpolate( const QskBoxBorderMetrics&,
const QskBoxBorderMetrics&, qreal progress );
2022-03-30 10:28:45 +00:00
constexpr bool isEquidistant() const noexcept;
2018-08-03 06:15:28 +00:00
private:
QskMargins m_widths;
2020-10-09 06:20:36 +00:00
Qt::SizeMode m_sizeMode;
};
2020-05-03 11:40:19 +00:00
inline constexpr QskBoxBorderMetrics::QskBoxBorderMetrics() noexcept
2018-08-03 06:15:28 +00:00
: m_sizeMode( Qt::AbsoluteSize )
{
}
2018-08-03 06:15:28 +00:00
inline constexpr QskBoxBorderMetrics::QskBoxBorderMetrics(
2020-05-03 11:40:19 +00:00
qreal width, Qt::SizeMode sizeMode ) noexcept
2018-08-03 06:15:28 +00:00
: m_widths( width )
, m_sizeMode( sizeMode )
{
}
2020-09-28 07:03:35 +00:00
inline constexpr QskBoxBorderMetrics::QskBoxBorderMetrics(
const QMarginsF& widths, Qt::SizeMode sizeMode ) noexcept
: m_widths( widths )
, m_sizeMode( sizeMode )
{
}
2017-10-18 17:45:56 +00:00
inline constexpr QskBoxBorderMetrics::QskBoxBorderMetrics(
2020-05-03 11:40:19 +00:00
const QskMargins& widths, Qt::SizeMode sizeMode ) noexcept
2018-08-03 06:15:28 +00:00
: m_widths( widths )
, m_sizeMode( sizeMode )
{
}
2018-08-03 06:15:28 +00:00
inline constexpr QskBoxBorderMetrics::QskBoxBorderMetrics(
2020-05-03 11:40:19 +00:00
qreal left, qreal top, qreal right, qreal bottom, Qt::SizeMode sizeMode ) noexcept
2018-08-03 06:15:28 +00:00
: m_widths( left, top, right, bottom )
, m_sizeMode( sizeMode )
2017-10-18 17:45:56 +00:00
{
}
2020-05-03 11:40:19 +00:00
inline constexpr bool QskBoxBorderMetrics::operator==(
const QskBoxBorderMetrics& other ) const noexcept
{
return ( m_sizeMode == other.m_sizeMode ) && ( m_widths == other.m_widths );
}
inline constexpr bool QskBoxBorderMetrics::operator!=(
const QskBoxBorderMetrics& other ) const noexcept
{
return !( *this == other );
}
2020-05-03 11:40:19 +00:00
inline constexpr bool QskBoxBorderMetrics::isNull() const noexcept
{
return m_widths.isNull();
}
2022-03-30 10:28:45 +00:00
inline constexpr bool QskBoxBorderMetrics::isEquidistant() const noexcept
{
return m_widths.isEquidistant();
}
2020-05-03 11:40:19 +00:00
inline constexpr const QskMargins& QskBoxBorderMetrics::widths() const noexcept
{
return m_widths;
}
2020-05-03 11:40:19 +00:00
inline qreal QskBoxBorderMetrics::widthAt( Qt::Edge edge ) const noexcept
{
return m_widths.marginAt( edge );
}
inline constexpr qreal QskBoxBorderMetrics::left() const noexcept
{
return m_widths.left();
}
inline constexpr qreal QskBoxBorderMetrics::top() const noexcept
{
return m_widths.top();
}
inline constexpr qreal QskBoxBorderMetrics::right() const noexcept
{
return m_widths.right();
}
inline constexpr qreal QskBoxBorderMetrics::bottom() const noexcept
{
return m_widths.bottom();
}
inline void QskBoxBorderMetrics::setLeft( qreal left ) noexcept
{
return m_widths.setLeft( left );
}
inline void QskBoxBorderMetrics::setTop( qreal top ) noexcept
{
return m_widths.setTop( top );
}
inline void QskBoxBorderMetrics::setRight( qreal right ) noexcept
{
return m_widths.setRight( right );
}
inline void QskBoxBorderMetrics::setBottom( qreal bottom ) noexcept
{
return m_widths.setBottom( bottom );
}
2020-05-03 11:40:19 +00:00
inline constexpr Qt::SizeMode QskBoxBorderMetrics::sizeMode() const noexcept
{
return m_sizeMode;
}
#ifndef QT_NO_DEBUG_STREAM
2020-05-03 11:40:19 +00:00
class QDebug;
QSK_EXPORT QDebug operator<<( QDebug, const QskBoxBorderMetrics& );
#endif
Q_DECLARE_TYPEINFO( QskBoxBorderMetrics, Q_MOVABLE_TYPE );
Q_DECLARE_METATYPE( QskBoxBorderMetrics )
#endif