common/QskScaleEngine.h

Classes

  Name
class QskScaleEngine

Source code

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

#ifndef QSK_SCALE_ENGINE_H
#define QSK_SCALE_ENGINE_H

#include <QskGlobal.h>
#include <qmetatype.h>

class QskScaleTickmarks;
class QskIntervalF;

class QSK_EXPORT QskScaleEngine
{
    Q_GADGET

  public:
    enum Attribute
    {
        Inverted = 1 << 0,
        Floating = 1 << 1
    };

    Q_ENUM( Attribute )
    Q_DECLARE_FLAGS( Attributes, Attribute )

    QskScaleEngine();
    ~QskScaleEngine();

    void setAttribute( Attribute, bool on = true );
    bool testAttribute( Attribute ) const;

    void setAttributes( Attributes );
    Attributes attributes() const;

    QskScaleTickmarks divideScale( qreal x1, qreal x2,
        int maxMajorSteps, int maxMinorSteps, qreal stepSize = 0.0 ) const;

    void autoScale( int maxNumSteps, qreal& x1, qreal& x2, qreal& stepSize ) const;

  private:
    QskIntervalF align( const QskIntervalF&, qreal stepSize ) const;

    QVector< qreal > strip( const QVector< qreal >&, const QskIntervalF& ) const;

    QskScaleTickmarks buildTicks(
        const QskIntervalF&, qreal stepSize, int maxMinorSteps ) const;

    QVector< qreal > buildMajorTicks( const QskIntervalF&, qreal stepSize ) const;

    void buildMinorTicks( const QVector< qreal >& majorTicks,
        int maxMinorSteps, qreal stepSize, QVector< qreal >& minorTicks,
        QVector< qreal >& mediumTicks ) const;

    Attributes m_attributes;
};

#endif

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