common/QskArcMetrics.h

Classes

  Name
class QskArcMetrics

Functions

  Name
QDebug operator«(QDebug debug, const QskArcMetrics & metrics)
  Q_DECLARE_TYPEINFO(QskArcMetrics , Q_MOVABLE_TYPE )

Functions Documentation

function operator«

QDebug operator<<(
    QDebug debug,
    const QskArcMetrics & metrics
)

function Q_DECLARE_TYPEINFO

Q_DECLARE_TYPEINFO(
    QskArcMetrics ,
    Q_MOVABLE_TYPE 
)

Source code

/******************************************************************************
 * QSkinny - Copyright (C) 2021 Uwe Rathmann
 * This file may be used under the terms of the QSkinny License, Version 1.0
 *****************************************************************************/

#ifndef QSK_ARC_METRICS_H
#define QSK_ARC_METRICS_H

#include "QskFunctions.h"

#include <qmetatype.h>

class QVariant;

class QSK_EXPORT QskArcMetrics
{
    Q_GADGET

    Q_PROPERTY( qreal width READ width WRITE setWidth )
    Q_PROPERTY( qreal startAngle READ startAngle WRITE setStartAngle )
    Q_PROPERTY( qreal spanAngle READ spanAngle WRITE setSpanAngle )
    Q_PROPERTY( Qt::SizeMode sizeMode READ sizeMode WRITE setSizeMode )

  public:
    constexpr QskArcMetrics() noexcept;
    constexpr QskArcMetrics( qreal width, qreal startAngle, qreal spanAngle,
                             Qt::SizeMode = Qt::AbsoluteSize ) noexcept;

    bool operator==( const QskArcMetrics& ) const noexcept;
    bool operator!=( const QskArcMetrics& ) const noexcept;

    constexpr bool isNull() const noexcept;

    void setWidth( qreal width ) noexcept;
    constexpr qreal width() const noexcept;

    void setStartAngle( qreal startAngle ) noexcept;
    constexpr qreal startAngle() const noexcept;

    void setSpanAngle( qreal spanAngle ) noexcept;
    constexpr qreal spanAngle() const noexcept;

    constexpr qreal endAngle() const noexcept;

    void setSizeMode( Qt::SizeMode ) noexcept;
    constexpr Qt::SizeMode sizeMode() const noexcept;

    QskArcMetrics interpolated( const QskArcMetrics&,
        qreal value ) const noexcept;

    QskArcMetrics toAbsolute( const QSizeF& ) const noexcept;

    uint hash( uint seed = 0 ) const noexcept;

    static QVariant interpolate( const QskArcMetrics&,
        const QskArcMetrics&, qreal progress );

  private:
    qreal m_width;
    qreal m_startAngle;
    qreal m_spanAngle;
    Qt::SizeMode m_sizeMode;
};

inline constexpr QskArcMetrics::QskArcMetrics() noexcept
    : m_width( 0 )
    , m_startAngle( 0 )
    , m_spanAngle( 0 )
    , m_sizeMode( Qt::AbsoluteSize )
{
}

inline constexpr QskArcMetrics::QskArcMetrics(
        qreal width, qreal startAngle, qreal spanAngle,
        Qt::SizeMode sizeMode ) noexcept
    : m_width( width )
    , m_startAngle( startAngle )
    , m_spanAngle( spanAngle )
    , m_sizeMode( sizeMode )
{
}

inline bool QskArcMetrics::operator==(
    const QskArcMetrics& other ) const noexcept
{
    return ( qskFuzzyCompare( m_width, other.m_width )
             && qskFuzzyCompare( m_startAngle, other.m_startAngle )
             && qskFuzzyCompare( m_spanAngle, other.m_spanAngle )
             && m_sizeMode == other.m_sizeMode );
}

inline bool QskArcMetrics::operator!=(
    const QskArcMetrics& other ) const noexcept
{
    return !( *this == other );
}

inline constexpr bool QskArcMetrics::isNull() const noexcept
{
    return qFuzzyIsNull( m_width ) || qFuzzyIsNull( m_spanAngle );
}

inline constexpr qreal QskArcMetrics::width() const noexcept
{
    return m_width;
}

inline constexpr qreal QskArcMetrics::startAngle() const noexcept
{
    return m_startAngle;
}

inline constexpr qreal QskArcMetrics::spanAngle() const noexcept
{
    return m_spanAngle;
}

inline constexpr qreal QskArcMetrics::endAngle() const noexcept
{
    return m_startAngle + m_spanAngle;
}

inline constexpr Qt::SizeMode QskArcMetrics::sizeMode() const noexcept
{
    return m_sizeMode;
}

#ifndef QT_NO_DEBUG_STREAM

class QDebug;
QSK_EXPORT QDebug operator<<( QDebug, const QskArcMetrics& );

#endif

Q_DECLARE_TYPEINFO( QskArcMetrics, Q_MOVABLE_TYPE );
Q_DECLARE_METATYPE( QskArcMetrics )

#endif

Updated on 28 July 2023 at 14:02:29 CEST