Skip to content
Extraits de code Groupes Projets
Valider f2e5fd3d rédigé par Elliu's avatar Elliu
Parcourir les fichiers

Add time digits to the timingAxis

For now it's not correct as it's calculating from pixels instead of from
ms, will need to rethink the way audio information is stored to fix it
parent e85744c0
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion!14Draft: improve the audio vizualiser
Ce commit fait partie de la requête de fusion !14. Les commentaires créés ici seront créés dans le contexte de cette requête de fusion.
......@@ -9,6 +9,7 @@
#include <QScrollArea>
#include <QScrollBar>
#include <QVBoxLayout>
#include <QTime>
using namespace Vivy;
......@@ -56,13 +57,31 @@ void TimingAxis::paint(QPainter *painter, const QStyleOptionGraphicsItem *option
if (audioLength == 0)
return;
painter->drawLine(x0, y, x1, y);
int ticks_base = y+ticksBase;
int yText = ticks_base - majorTicksHeight - timeDigitsMargin;
int majorTicksUp = ticks_base - majorTicksHeight;
int minorTicksUp = ticks_base - minorTicksHeight;
for (qreal i = majorTicks; i < x1-x0; i += majorTicks){
painter->drawLine(int(x0+i), y-5, int(x0+i), y+5);
painter->drawLine(x0, ticks_base, x1, ticks_base);
for (int i = majorTicks; i < x1-x0; i += majorTicks){
painter->drawText(QPoint(x0+i, yText), msToString(i));
painter->drawLine(int(x0+i), majorTicksUp, int(x0+i), ticks_base);
}
if (minorTicks >= 0)
for (qreal i = minorTicks; i < x1-x0; i += minorTicks)
for (int i = minorTicks; i < x1-x0; i += minorTicks)
if (fmod(i, majorTicks) != 0)
painter->drawLine(int(x0+i), y-2, int(x0+i), y+2);
painter->drawLine(int(x0+i), minorTicksUp, int(x0+i), ticks_base);
}
QString
TimingAxis::msToString(int t) const noexcept
{
qDebug() << "GOT " << t;
QString ret(QString::number(t/1000) + QString(".") + QString::number(t % 1000 / majorTicks));
if (t >= 60000)
ret.prepend(QString::number(t/60000) + QString(":"));
if (t >= 360000)
ret.prepend(QString::number(t/360000) + QString(":"));
return ret;
}
......@@ -25,17 +25,31 @@ public:
private:
static inline constexpr QColor axisColour = QColor(0, 0, 127);
QVector<qreal> availableTicks = { 10, 100, 1000, 10000, 60000, 3600000, 86400000 };
qreal minBetweenMinor{ 5 };
qreal minorTicks;
qreal majorTicks;
qreal penWidth{ 1 };
quint64 audioLength{ 0 };
/*
* We use ints here because
* qPainter->drawLine() and qPainter->drawText()
* restrict us to ints anyways
*/
QVector<int> availableTicks = { 10, 100, 1000, 10000, 60000, 3600000, 86400000 };
qreal minBetweenMinor{ 5 };
int minorTicks;
int majorTicks;
int minorTicksHeight { 3 };
int majorTicksHeight { 7 };
int timeDigitsHeight { 20 };
int timeDigitsMargin { 3 };
int ticksBase { 30 };
int x0{ 0 };
int x1{ 0 };
int y { 0 };
QString msToString(int t) const noexcept;
protected:
public slots:
......
......@@ -75,14 +75,20 @@ TimingScene::handleMousePressEventChar(QGraphicsSceneMouseEvent *, Ass::LinePtr)
{
}
qreal
TimingScene::timeFromPos(qreal x)
quint64
TimingScene::timeFromPos(qreal x) const
{
if (const qreal w = width(); x <= 0 || w <= 0) {
return timeFromPos(quint64(x));
}
quint64
TimingScene::timeFromPos(quint64 x) const
{
if (const quint64 w = quint64(width()); x <= 0 || w <= 0) {
qCritical() << "Try avoid possible divide by zero in the time from position";
return 0;
} else {
return x * qreal(soundLength) / w;
return x * soundLength / w;
}
}
......
......@@ -44,7 +44,8 @@ public:
TimingAxis* getAxis();
private:
quint64 timeFromPos(qreal x);
inline quint64 timeFromPos(qreal x) const;
quint64 timeFromPos(quint64 x) const;
void handleMousePressEventLine(QGraphicsSceneMouseEvent *, Ass::LinePtr) noexcept;
void handleMousePressEventSyl(QGraphicsSceneMouseEvent *, Ass::LinePtr) noexcept;
void handleMousePressEventChar(QGraphicsSceneMouseEvent *, Ass::LinePtr) noexcept;
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter