Skip to content
Extraits de code Groupes Projets
Valider d4367c15 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 e7f4ec5a
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion!29Improve timingView with display of the ASS lines
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <QScrollArea> #include <QScrollArea>
#include <QScrollBar> #include <QScrollBar>
#include <QVBoxLayout> #include <QVBoxLayout>
#include <QTime>
using namespace Vivy; using namespace Vivy;
...@@ -63,13 +64,31 @@ TimingAxis::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget * ...@@ -63,13 +64,31 @@ TimingAxis::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *
if (audioLength == 0) if (audioLength == 0)
return; 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(x0, ticks_base, x1, ticks_base);
painter->drawLine(int(x0 + i), y - 5, int(x0 + i), y + 5);
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) 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) 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: ...@@ -25,17 +25,31 @@ public:
private: private:
static inline constexpr QColor axisColour = QColor(0, 0, 127); 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 }; qreal penWidth{ 1 };
quint64 audioLength{ 0 }; 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 x0{ 0 };
int x1{ 0 }; int x1{ 0 };
int y{ 0 }; int y{ 0 };
QString msToString(int t) const noexcept;
protected: protected:
public slots: public slots:
void refreshTicks(); void refreshTicks();
......
...@@ -70,14 +70,20 @@ TimingScene::handleMousePressEventChar(QGraphicsSceneMouseEvent *, Ass::LinePtr) ...@@ -70,14 +70,20 @@ TimingScene::handleMousePressEventChar(QGraphicsSceneMouseEvent *, Ass::LinePtr)
{ {
} }
qreal quint64
TimingScene::timeFromPos(qreal x) 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"; qCritical() << "Try avoid possible divide by zero in the time from position";
return 0; return 0;
} else { } else {
return x * qreal(soundLength) / w; return x * soundLength / w;
} }
} }
......
...@@ -36,6 +36,8 @@ public: ...@@ -36,6 +36,8 @@ public:
TimingAxis *getAxis(); TimingAxis *getAxis();
private: private:
inline quint64 timeFromPos(qreal x) const;
quint64 timeFromPos(quint64 x) const;
void handleMousePressEventLine(QGraphicsSceneMouseEvent *, Ass::LinePtr) noexcept; void handleMousePressEventLine(QGraphicsSceneMouseEvent *, Ass::LinePtr) noexcept;
void handleMousePressEventSyl(QGraphicsSceneMouseEvent *, Ass::LinePtr) noexcept; void handleMousePressEventSyl(QGraphicsSceneMouseEvent *, Ass::LinePtr) noexcept;
void handleMousePressEventChar(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