diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingAxis.cc b/src/UI/DocumentViews/AudioVisualizer/TimingAxis.cc index 5f41f1688a6d87c4c48a68b27961b28dc932b553..94b1c7f1abe7440b615f0383531337a0a04e7ab0 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingAxis.cc +++ b/src/UI/DocumentViews/AudioVisualizer/TimingAxis.cc @@ -16,19 +16,21 @@ using namespace Vivy; -TimingAxis::TimingAxis(AudioContext::StreamPtr stream) noexcept +TimingAxis::TimingAxis(AudioContext::StreamPtr stream, int height_, int width_) noexcept : QGraphicsObject() , audioStream(stream) + , height(height_) + , width(width_) { - setPos(0, height); pen = QPen(axisColour); pen.setWidth(penWidth); + refreshTicks(); } QRectF TimingAxis::boundingRect() const { - return QRectF(0, penWidth, scene()->width(), -height - penWidth); + return QRectF(0, penWidth, width + 2*penWidth, -height - penWidth); } /* @@ -38,13 +40,10 @@ TimingAxis::boundingRect() const void TimingAxis::refreshTicks() { - qDebug() << "Refreshing ticks..."; int nbAvailableTicks = availableTicks.size(); - QGraphicsScene *parentScene = scene(); int minorTicksIndex = 0; int length{ int(audioStream->getLength()) }; - int width{ int(parentScene->width()) }; - if (parentScene != nullptr) { + if (width != 0 && length != 0){ for (minorTicksIndex = 0; minorTicksIndex < nbAvailableTicks; minorTicksIndex++) { if (width * availableTicks[minorTicksIndex] / length >= minBetweenMinor) { break; @@ -52,6 +51,7 @@ TimingAxis::refreshTicks() } } + prepareGeometryChange(); if (minorTicksIndex < nbAvailableTicks - 1) { minorTicks = availableTicks[minorTicksIndex]; majorTicks = availableTicks[minorTicksIndex + 1]; @@ -59,7 +59,6 @@ TimingAxis::refreshTicks() minorTicks = 0; majorTicks = availableTicks[minorTicksIndex]; } - update(); } void @@ -70,7 +69,6 @@ TimingAxis::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWi return; int yText = -majorTicksHeight - timeDigitsMargin; - int width{ int(scene()->width()) }; painter->setPen(pen); painter->drawLine(0, 0, audioLength, 0); diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingAxis.hh b/src/UI/DocumentViews/AudioVisualizer/TimingAxis.hh index 6359e7e620131e9ef312c57366e8b5034e38694c..1f7196e48a3a4d248bab70bc90fe568957355bb7 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingAxis.hh +++ b/src/UI/DocumentViews/AudioVisualizer/TimingAxis.hh @@ -20,7 +20,7 @@ class TimingAxis final : public QGraphicsObject { Q_OBJECT public: - explicit TimingAxis(AudioContext::StreamPtr stream) noexcept; + explicit TimingAxis(AudioContext::StreamPtr stream, int height, int width) noexcept; ~TimingAxis() noexcept override = default; QRectF boundingRect() const override; @@ -32,6 +32,8 @@ private: int penWidth{ 1 }; AudioContext::StreamPtr audioStream; + int height{ 30 }; + int width{ 0 }; /* * We use ints here because @@ -47,7 +49,6 @@ private: int majorTicksHeight{ 7 }; int timeDigitsHeight{ 20 }; int timeDigitsMargin{ 3 }; - int height{ 30 }; QString msToString(int i) const noexcept; diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc b/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc index b4327dedefe8aff068ca5f4593246997bc533e10..230827e017d68c6d8861f4c1ed7a103251f494f2 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc +++ b/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc @@ -30,14 +30,19 @@ TimingScene::TimingScene(QImage img_, AudioContext::StreamPtr stream, QWidget *p , img(img_) , audioStream(stream) { - ax = new TimingAxis(stream); + int timingAxisHeight = 30; + // We put a common origin for the items at the bottom of the axis QPixmap pixmap(QPixmap::fromImage(img)); backgroundImg = addPixmap(pixmap); - setSceneRect(QRect(pixmap.rect())); + backgroundImg->setPos(0, timingAxisHeight); + + ax = new TimingAxis(stream, timingAxisHeight, pixmap.width()); addItem(ax); + ax->setPos(0, timingAxisHeight); - ax->refreshTicks(); + // Freeze the scene boundaries + setSceneRect(sceneRect()); if (auto assDocument = currentVivyDocument->getAssSubDocument()) { QVector<Ass::LinePtr> lines = assDocument->getLines(); diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingView.cc b/src/UI/DocumentViews/AudioVisualizer/TimingView.cc index bf971817726a67389304aa8d59150f1fda2154f9..8c31a37524e9ae029a1caa40ac9d38bc5cbfb82c 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingView.cc +++ b/src/UI/DocumentViews/AudioVisualizer/TimingView.cc @@ -7,17 +7,18 @@ TimingView::TimingView(QGraphicsScene *scene, QImage img, AudioContext::StreamPt : QGraphicsView(scene, parent) , audioStream(stream) { - //setFixedHeight(img.height()); - //setMaximumHeight(img.height()); + int interestingViewHeight = int(scene->height() + horizontalScrollBar()->height()); + setFixedHeight(interestingViewHeight); + setMaximumHeight(interestingViewHeight); + setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Minimum); QObject::connect(verticalScrollBar(), &QScrollBar::rangeChanged, this, &TimingView::moveScrollBarToBottom); - verticalScrollBar()->setValue(verticalScrollBar()->maximum()); - //horizontalScrollBar()->setValue(horizontalScrollBar()->minimum()); - centerOn(0, height()); + // We want to see the bottom part of the spectrum, the top is less important if a few pixels get trimmed + centerOn(0, interestingViewHeight); } void