qskinny/src/common/QskBoxBorderMetrics.h

129 lines
3.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 14:10:48 +02:00
#include <qmetatype.h>
2018-08-03 08:15:28 +02:00
#include <qnamespace.h>
2018-07-19 14:10:48 +02:00
#include <qsize.h>
class QVariant;
class QSK_EXPORT QskBoxBorderMetrics
{
2018-08-03 08:15:28 +02:00
public:
2020-05-03 13:40:19 +02:00
constexpr QskBoxBorderMetrics() noexcept;
2018-08-03 08:15:28 +02:00
constexpr QskBoxBorderMetrics(
2020-05-03 13:40:19 +02:00
qreal width, Qt::SizeMode = Qt::AbsoluteSize ) noexcept;
2018-08-03 08:15:28 +02:00
2017-10-18 19:45:56 +02:00
constexpr QskBoxBorderMetrics( qreal left, qreal top,
2020-05-03 13:40:19 +02:00
qreal right, qreal bottom, Qt::SizeMode = Qt::AbsoluteSize ) noexcept;
2020-05-03 13:40:19 +02:00
constexpr QskBoxBorderMetrics( const QskMargins& widths,
Qt::SizeMode sizeMode = Qt::AbsoluteSize ) noexcept;
2020-05-03 13:40:19 +02:00
constexpr bool operator==( const QskBoxBorderMetrics& ) const noexcept;
constexpr bool operator!=( const QskBoxBorderMetrics& ) const noexcept;
2020-05-03 13:40:19 +02:00
constexpr bool isNull() const noexcept;
2020-05-03 13:40:19 +02:00
void setWidthAt( Qt::Edges, qreal width ) noexcept;
qreal widthAt( Qt::Edge ) const noexcept;
2020-05-03 13:40:19 +02:00
void setWidths( const QskMargins& ) noexcept;
constexpr const QskMargins& widths() const noexcept;
2020-05-03 13:40:19 +02:00
void setSizeMode( Qt::SizeMode ) noexcept;
constexpr Qt::SizeMode sizeMode() const noexcept;
2018-08-03 08:15:28 +02:00
QskBoxBorderMetrics interpolated(
2020-05-03 13:40:19 +02:00
const QskBoxBorderMetrics&, qreal value ) const noexcept;
2018-08-03 08:15:28 +02:00
2020-05-03 13:40:19 +02:00
QskBoxBorderMetrics toAbsolute( const QSizeF& ) const noexcept;
2020-05-03 13:40:19 +02:00
uint hash( uint seed = 0 ) const noexcept;
static QVariant interpolate( const QskBoxBorderMetrics&,
const QskBoxBorderMetrics&, qreal progress );
2018-08-03 08:15:28 +02:00
private:
QskMargins m_widths;
Qt::SizeMode m_sizeMode : 2;
};
2020-05-03 13:40:19 +02:00
inline constexpr QskBoxBorderMetrics::QskBoxBorderMetrics() noexcept
2018-08-03 08:15:28 +02:00
: m_sizeMode( Qt::AbsoluteSize )
{
}
2018-08-03 08:15:28 +02:00
inline constexpr QskBoxBorderMetrics::QskBoxBorderMetrics(
2020-05-03 13:40:19 +02:00
qreal width, Qt::SizeMode sizeMode ) noexcept
2018-08-03 08:15:28 +02:00
: m_widths( width )
, m_sizeMode( sizeMode )
{
}
2017-10-18 19:45:56 +02:00
inline constexpr QskBoxBorderMetrics::QskBoxBorderMetrics(
2020-05-03 13:40:19 +02:00
const QskMargins& widths, Qt::SizeMode sizeMode ) noexcept
2018-08-03 08:15:28 +02:00
: m_widths( widths )
, m_sizeMode( sizeMode )
{
}
2018-08-03 08:15:28 +02:00
inline constexpr QskBoxBorderMetrics::QskBoxBorderMetrics(
2020-05-03 13:40:19 +02:00
qreal left, qreal top, qreal right, qreal bottom, Qt::SizeMode sizeMode ) noexcept
2018-08-03 08:15:28 +02:00
: m_widths( left, top, right, bottom )
, m_sizeMode( sizeMode )
2017-10-18 19:45:56 +02:00
{
}
2020-05-03 13:40:19 +02: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 13:40:19 +02:00
inline constexpr bool QskBoxBorderMetrics::isNull() const noexcept
{
return m_widths.isNull();
}
2020-05-03 13:40:19 +02:00
inline constexpr const QskMargins& QskBoxBorderMetrics::widths() const noexcept
{
return m_widths;
}
2020-05-03 13:40:19 +02:00
inline qreal QskBoxBorderMetrics::widthAt( Qt::Edge edge ) const noexcept
{
return m_widths.marginAt( edge );
}
2020-05-03 13:40:19 +02:00
inline constexpr Qt::SizeMode QskBoxBorderMetrics::sizeMode() const noexcept
{
return m_sizeMode;
}
#ifndef QT_NO_DEBUG_STREAM
2020-05-03 13:40:19 +02:00
class QDebug;
QSK_EXPORT QDebug operator<<( QDebug, const QskBoxBorderMetrics& );
#endif
Q_DECLARE_TYPEINFO( QskBoxBorderMetrics, Q_MOVABLE_TYPE );
Q_DECLARE_METATYPE( QskBoxBorderMetrics )
#endif