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

WIP: POC and experimentations for displaying lines

parent 385d5f2b
Branches
Aucune étiquette associée trouvée
1 requête de fusion!29Improve timingView with display of the ASS lines
Pipeline #2443 réussi
......@@ -134,3 +134,21 @@ Line::getIsComment() const noexcept
{
return isComment;
}
quint64
Line::getStart() const noexcept
{
return start;
}
quint64
Line::getEnd() const noexcept
{
return end;
}
QString
Line::getContentAsText() const noexcept
{
return ___contentAsText;
}
......@@ -44,6 +44,10 @@ public:
StyleWeakPtr getStyle() const noexcept;
const QVector<Syl> &getContent() const noexcept;
quint64 getStart() const noexcept;
quint64 getEnd() const noexcept;
QString getContentAsText() const noexcept;
private:
void initSylFromString(const QString &) noexcept;
};
......
......@@ -25,7 +25,7 @@ TimingAxis::TimingAxis(AudioContext::StreamPtr stream, int x0_, int x1_, int y_)
QRectF
TimingAxis::boundingRect() const
{
return QRectF(x0, y - penWidth, x1, y + penWidth);
return QRectF(x0, 0, x1, y + ticksBase + penWidth*2);
}
/*
......
#include "TimingScene.hh"
#include "../../Lib/Utils.hh"
#include "../../Lib/Ass/Ass.hh"
#include "../../Lib/Document/VivyDocument.hh"
#include <QGraphicsLineItem>
#include <QGraphicsPixmapItem>
......@@ -29,7 +32,33 @@ TimingScene::TimingScene(QImage img_, AudioContext::StreamPtr stream, QWidget *p
backgroundImg = addPixmap(pixmap);
ax = new TimingAxis(stream, 0, pixmap.width(), 10);
addItem(ax);
ax->refreshTicks();
if (auto assDocument = currentVivyDocument->getAssSubDocument()){
QVector<Ass::LinePtr> lines = assDocument->getLines();
for (int i = 0; i < lines.size(); ++i) {
if (auto line = lines.at(i).get()){
qreal xstart = posFromTime(line->getStart());
TimingBar* bar = new TimingBar(QLine(int(xstart), 30, int(xstart), int(height())), QColor(127,0,0));
bar->setZValue(10);
addItem(bar);
qreal xend = posFromTime(line->getEnd());
bar = new TimingBar(QLine(int(xend), 30, int(xend), int(height())), QColor(127,0,0));
bar->setZValue(10);
addItem(bar);
QGraphicsRectItem* rect = new QGraphicsRectItem(xstart, 30, xend-xstart, int(height())-30);
addItem(rect);
rect->setBrush(Qt::blue);
rect->setOpacity(0.1);
QGraphicsTextItem* text = new QGraphicsTextItem(line->getContentAsText());
addItem(text);
text->setZValue(5);
text->setTextWidth(xend-xstart-10);
text->setPos(xstart+5, 30+(height()-30)/2);
}
}
}
}
void
......@@ -76,13 +105,13 @@ TimingScene::handleMousePressEventChar(QGraphicsSceneMouseEvent *, Ass::LinePtr)
}
quint64
TimingScene::timeFromPos(qreal x) const
TimingScene::timeFromPos(qreal x) const noexcept
{
return timeFromPos(quint64(x));
}
quint64
TimingScene::timeFromPos(quint64 x) const
TimingScene::timeFromPos(quint64 x) const noexcept
{
if (const quint64 w = quint64(width()); x <= 0 || w <= 0) {
qCritical() << "Try avoid possible divide by zero in the time from position";
......@@ -92,6 +121,17 @@ TimingScene::timeFromPos(quint64 x) const
}
}
qreal
TimingScene::posFromTime(quint64 t) const noexcept
{
if (const quint64 w = quint64(width()); t <= 0 || w <= 0) {
qCritical() << "Try avoid possible divide by zero in the position from time";
return 0;
} else {
return 10 * t * w / audioStream->getLength();
}
}
QGraphicsPixmapItem *
TimingScene::bg() noexcept
{
......
......@@ -37,8 +37,9 @@ public:
TimingAxis *getAxis();
private:
quint64 timeFromPos(qreal x) const;
quint64 timeFromPos(quint64 x) const;
quint64 timeFromPos(qreal x) const noexcept;
quint64 timeFromPos(quint64 x) const noexcept;
qreal posFromTime(quint64 t) const noexcept;
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