diff --git a/src/UI/DocumentViews/TimingAxis.cc b/src/UI/DocumentViews/TimingAxis.cc index 2d7f6c7370b72c71724a9b8cb003f2c728e5f5a5..8abf1d709ba1d881534ca9698a24d19460f7b1ad 100644 --- a/src/UI/DocumentViews/TimingAxis.cc +++ b/src/UI/DocumentViews/TimingAxis.cc @@ -14,7 +14,7 @@ using namespace Vivy; TimingAxis::TimingAxis(qreal soundLength_, int x0_, int x1_, int y_) noexcept : QGraphicsItem() - , soundLength(soundLength_) + , audioLength(soundLength_) , x0(x0_) , x1(x1_) , y(y_) @@ -27,39 +27,48 @@ TimingAxis::boundingRect() const return QRectF(x0, y - penWidth, x1, y + penWidth); } +/* + * Refresh the minor/major ticks value + * For intended results, this function should only be called when scene() returns a valid QGraphicsScene (so not in the constructors) + */ void -TimingAxis::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +TimingAxis::refreshTicks() { - painter->drawLine(x0, y, x1, y); - - if (soundLength == 0) - return; - - qDebug() << "Audio length is " << soundLength; - int minorTicksIndex = 0; - // Find what is our ticks - QGraphicsScene *currScene = scene(); - if (currScene != nullptr) { - for (minorTicksIndex = 0; minorTicksIndex < availableTicks.size(); minorTicksIndex++) { - qDebug() << "Calculated is " - << currScene->width() / (qreal(soundLength) * availableTicks[minorTicksIndex]); - - if (currScene->width() / (qreal(soundLength) * availableTicks[minorTicksIndex]) < + int nbAvailableTicks = availableTicks.size(); + int minorTicksIndex = 0; + QGraphicsScene *parentScene = scene(); + if (parentScene != nullptr) { + for (minorTicksIndex = 0; minorTicksIndex < nbAvailableTicks; minorTicksIndex++) { + if (parentScene->width() / (audioLength * availableTicks[minorTicksIndex]) < minBetweenMinor) { minorTicksIndex = minorTicksIndex == 0 ? 0 : minorTicksIndex - 1; break; } } } - qreal minorTicks = availableTicks[minorTicksIndex]; - qreal majorTicks = availableTicks[minorTicksIndex + 1]; - qDebug() << "Minor ticks : " << minorTicks; - qDebug() << "Major ticks : " << majorTicks; + if (minorTicksIndex < nbAvailableTicks - 1) { + minorTicks = availableTicks[minorTicksIndex]; + majorTicks = availableTicks[minorTicksIndex + 1]; + } else { + minorTicks = -1; + majorTicks = availableTicks[minorTicksIndex]; + } +} + +void +TimingAxis::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + if (audioLength == 0) + return; + + painter->drawLine(x0, y, x1, y); - for (qreal i = majorTicks; i < x1 - x0; i += majorTicks) + for (qreal i = majorTicks; i < x1 - x0; i += majorTicks) { painter->drawLine(int(x0 + i), y - 5, int(x0 + i), y + 5); - for (qreal i = minorTicks; i < x1 - x0; i += minorTicks) - if (fmod(i, majorTicks)) - painter->drawLine(int(x0 + i), y - 2, int(x0 + i), y + 2); + } + if (minorTicks >= 0) + for (qreal i = minorTicks; i < x1 - x0; i += minorTicks) + if (fmod(i, majorTicks) != 0) + painter->drawLine(int(x0 + i), y - 2, int(x0 + i), y + 2); } diff --git a/src/UI/DocumentViews/TimingAxis.hh b/src/UI/DocumentViews/TimingAxis.hh index 70bebf92d2ee6d7a5b4bb4e5ea2fed9c051b095d..fff80a97c65b73d454de7746c8e675808b7476af 100644 --- a/src/UI/DocumentViews/TimingAxis.hh +++ b/src/UI/DocumentViews/TimingAxis.hh @@ -7,13 +7,14 @@ #include <QGraphicsWidget> #include <QPainter> +#include <QGraphicsScene> #include <cmath> namespace Vivy { class TimingAxis final : public QGraphicsItem { public: - explicit TimingAxis(qreal soundLength, int x0, int x1, int y) noexcept; + explicit TimingAxis(qreal audioLength, int x0, int x1, int y) noexcept; ~TimingAxis() noexcept override = default; QRectF boundingRect() const override; @@ -24,14 +25,18 @@ private: QVector<qreal> availableTicks = { 0.01, 0.1, 1, 10, 60, 3600, 86400 }; qreal minBetweenMinor{ 5 }; + qreal minorTicks; + qreal majorTicks; qreal penWidth{ 1 }; - qreal soundLength{ 0 }; + qreal audioLength{ 0 }; int x0{ 0 }; int x1{ 0 }; int y{ 0 }; protected: +public slots: + void refreshTicks(); }; } diff --git a/src/UI/DocumentViews/TimingScene.cc b/src/UI/DocumentViews/TimingScene.cc index 92fcf7a93e3a0411fdfd530c5c75a170aa7f62d3..b81e90c483b4c30fedc8a25667766fe1f6274246 100644 --- a/src/UI/DocumentViews/TimingScene.cc +++ b/src/UI/DocumentViews/TimingScene.cc @@ -29,6 +29,7 @@ TimingScene::TimingScene(QImage img_, qreal soundLength_, QWidget *parent) noexc backgroundImg = addPixmap(pixmap); TimingAxis *ax = new TimingAxis(soundLength, 0, pixmap.width(), 10); addItem(ax); + ax->refreshTicks(); } void