/****************************************************************************** * QSkinny - Copyright (C) 2016 Uwe Rathmann * SPDX-License-Identifier: BSD-3-Clause *****************************************************************************/ #ifndef QSK_TICKMARKS_METRICS_H #define QSK_TICKMARKS_METRICS_H #include "QskFunctions.h" #include class QSK_EXPORT QskTickmarksMetrics { Q_GADGET Q_PROPERTY( qreal majorRatio READ majorRatio WRITE setMajorRatio ) Q_PROPERTY( qreal mediumRatio READ mediumRatio WRITE setMediumRatio ) Q_PROPERTY( qreal minorRatio READ minorRatio WRITE setMinorRatio ) public: constexpr QskTickmarksMetrics() noexcept = default; constexpr QskTickmarksMetrics( qreal minorRatio, qreal mediumRatio, qreal majorRatio ) noexcept; constexpr QskTickmarksMetrics( const QskTickmarksMetrics& ) noexcept = default; constexpr QskTickmarksMetrics( QskTickmarksMetrics&& ) noexcept = default; constexpr QskTickmarksMetrics& operator=( const QskTickmarksMetrics& ) noexcept = default; constexpr QskTickmarksMetrics& operator=( QskTickmarksMetrics&& ) noexcept = default; constexpr Q_REQUIRED_RESULT bool operator==( const QskTickmarksMetrics& rhs ) const noexcept; constexpr Q_REQUIRED_RESULT bool operator!=( const QskTickmarksMetrics& rhs ) const noexcept; constexpr Q_REQUIRED_RESULT qreal majorRatio() const noexcept; constexpr Q_REQUIRED_RESULT qreal mediumRatio() const noexcept; constexpr Q_REQUIRED_RESULT qreal minorRatio() const noexcept; constexpr void setMajorRatio( qreal ratio ) noexcept; constexpr void setMediumRatio( qreal ratio ) noexcept; constexpr void setMinorRatio( qreal ratio ) noexcept; constexpr Q_REQUIRED_RESULT qreal operator[]( int index ) const noexcept; constexpr Q_REQUIRED_RESULT qreal& operator[]( int index ) noexcept; private: qreal m_minorRatio = 0.7; qreal m_mediumRatio = 0.85; qreal m_majorRatio = 1.0; }; inline constexpr QskTickmarksMetrics::QskTickmarksMetrics( qreal minorRatio, qreal mediumRatio, qreal majorRatio ) noexcept : m_minorRatio( minorRatio ) , m_mediumRatio( mediumRatio ) , m_majorRatio( majorRatio ) { } inline constexpr qreal QskTickmarksMetrics::majorRatio() const noexcept { return m_majorRatio; } inline constexpr qreal QskTickmarksMetrics::mediumRatio() const noexcept { return m_mediumRatio; } inline constexpr qreal QskTickmarksMetrics::minorRatio() const noexcept { return m_minorRatio; } inline constexpr void QskTickmarksMetrics::setMajorRatio( qreal ratio ) noexcept { m_majorRatio = qBound( 0.0, ratio, 1.0 ); } inline constexpr void QskTickmarksMetrics::setMediumRatio( qreal ratio ) noexcept { m_mediumRatio = qBound( 0.0, ratio, 1.0 ); } inline constexpr void QskTickmarksMetrics::setMinorRatio( qreal ratio ) noexcept { m_minorRatio = qBound( 0.0, ratio, 1.0 ); } inline constexpr bool QskTickmarksMetrics::operator==( const QskTickmarksMetrics& rhs ) const noexcept { return qskFuzzyCompare( m_minorRatio, rhs.m_minorRatio ) && qskFuzzyCompare( m_mediumRatio, rhs.m_mediumRatio ) && qskFuzzyCompare( m_majorRatio, rhs.m_majorRatio ); } inline constexpr bool QskTickmarksMetrics::operator!=( const QskTickmarksMetrics& rhs ) const noexcept { return !( *this == rhs ); } inline constexpr qreal QskTickmarksMetrics::operator[]( int index ) const noexcept { index = index % 3; switch ( index ) { case 0: return m_minorRatio; case 1: return m_mediumRatio; default: return m_majorRatio; } } inline constexpr qreal& QskTickmarksMetrics::operator[]( int index ) noexcept { index = index % 3; switch ( index ) { case 0: return m_minorRatio; case 1: return m_mediumRatio; default: return m_majorRatio; } } #endif