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

Properly (for the eyes) draw all lines, syl, and separators

parent d1fb2fa9
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
...@@ -35,3 +35,9 @@ Syl::getContent() const noexcept ...@@ -35,3 +35,9 @@ Syl::getContent() const noexcept
{ {
return content; return content;
} }
quint64
Syl::getDuration() const noexcept
{
return duration;
}
...@@ -21,7 +21,7 @@ public: ...@@ -21,7 +21,7 @@ public:
ReadAssTags // Read ass tags ReadAssTags // Read ass tags
}; };
explicit Syl(const Syl &) noexcept = default; //explicit Syl(const Syl &) noexcept = default; // FIXME: define copy contructor
explicit Syl(Line *const, const QString &, explicit Syl(Line *const, const QString &,
ConstructMode mode = ConstructMode::ReadAssTags) noexcept; ConstructMode mode = ConstructMode::ReadAssTags) noexcept;
...@@ -29,6 +29,7 @@ public: ...@@ -29,6 +29,7 @@ public:
~Syl() noexcept = default; ~Syl() noexcept = default;
QString getContent() const noexcept; QString getContent() const noexcept;
quint64 getDuration() const noexcept;
private: private:
static quint64 getDurationFromString(const QString &) noexcept; static quint64 getDurationFromString(const QString &) noexcept;
......
...@@ -4,12 +4,29 @@ ...@@ -4,12 +4,29 @@
#include <QGraphicsScene> #include <QGraphicsScene>
#include "TimingUtils.hh" #include "TimingUtils.hh"
#include "TimingSyl.hh"
#include "TimingSeparator.hh"
using namespace Vivy; using namespace Vivy;
TimingLine::TimingLine(QGraphicsItem *parent) TimingLine::TimingLine(Ass::Line *lineptr, QGraphicsItem *parent)
: QGraphicsItem(parent) : QGraphicsObject(parent)
, line(*lineptr)
{ {
setPos(TimingUtils::posFromMs(int(line.getStart())*10), TimingUtils::axisHeight());
int currentTime = 0;
QVector<Ass::Syl> syls = line.getContent();
for (int i = 0; i < syls.size(); ++i){
int endSyl = currentTime + 10 * int(syls.at(i).getDuration());
TimingSyl* timingSyl = new TimingSyl(syls.at(i), currentTime, this);
// TODO: Here create the TimingSeparator and connect
TimingSeparator* timingSeparatorStart = new TimingSeparator(currentTime, i != 0 ? TimingSeparator::SeparatorStyle::Middle : TimingSeparator::SeparatorStyle::Start, this);
TimingSeparator* timingSeparatorEnd = new TimingSeparator(endSyl, i != syls.size()-1 ? TimingSeparator::SeparatorStyle::Middle : TimingSeparator::SeparatorStyle::End, this);
currentTime = endSyl;
}
} }
QRectF QRectF
......
#pragma once #pragma once
#include <QGraphicsItem> #include <QGraphicsObject>
#include "../../../Lib/Ass/Ass.hh"
namespace Vivy namespace Vivy
{ {
class TimingLine final : public QGraphicsItem { class TimingLine final : public QGraphicsObject {
Q_OBJECT
public: public:
explicit TimingLine(QGraphicsItem *parent = nullptr); explicit TimingLine(Ass::Line*, QGraphicsItem* = nullptr);
QRectF boundingRect() const override; QRectF boundingRect() const override;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
private:
Ass::Line line;
}; };
} }
...@@ -20,6 +20,10 @@ ...@@ -20,6 +20,10 @@
#include "TimingUtils.hh" #include "TimingUtils.hh"
#include "TimingAxis.hh"
#include "TimingCursor.hh"
#include "TimingLine.hh"
using namespace Vivy; using namespace Vivy;
TimingScene::TimingScene(QWidget *parent) noexcept TimingScene::TimingScene(QWidget *parent) noexcept
...@@ -60,7 +64,7 @@ TimingScene::rebuildScene() ...@@ -60,7 +64,7 @@ TimingScene::rebuildScene()
TimingUtils::setAudioHeight(pixmap.height()); TimingUtils::setAudioHeight(pixmap.height());
TimingUtils::setAudioWidth(img.width()); TimingUtils::setAudioWidth(img.width());
TimingUtils::setAudioLength(audioStream->getLength()); TimingUtils::setAudioLength(int(audioStream->getLength()));
ax = new TimingAxis(); ax = new TimingAxis();
addItem(ax); addItem(ax);
...@@ -76,7 +80,11 @@ TimingScene::rebuildScene() ...@@ -76,7 +80,11 @@ TimingScene::rebuildScene()
if (auto assDocument = currentVivyDocument->getAssSubDocument()) { if (auto assDocument = currentVivyDocument->getAssSubDocument()) {
QVector<Ass::LinePtr> lines = assDocument->getLines(); QVector<Ass::LinePtr> lines = assDocument->getLines();
for (int i = 0; i < lines.size(); ++i) { for (int i = 0; i < lines.size(); ++i) {
if (auto line = lines.at(i).get()) {} if (auto line = lines.at(i).get()) {
TimingLine* timingLine = new TimingLine(line);
addItem(timingLine);
// TODO: Here connect timingLine.linechanged to lineassmodel or something
}
} }
} }
} }
......
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
#include "../../../Lib/Utils.hh" #include "../../../Lib/Utils.hh"
#include "../../../Lib/Audio.hh" #include "../../../Lib/Audio.hh"
#include "../../../Lib/Ass/Ass.hh" #include "../../../Lib/Ass/Ass.hh"
#include "TimingBar.hh"
#include "TimingAxis.hh" #include "TimingAxis.hh"
#include "TimingCursor.hh" #include "TimingCursor.hh"
......
...@@ -7,18 +7,56 @@ ...@@ -7,18 +7,56 @@
using namespace Vivy; using namespace Vivy;
TimingSeparator::TimingSeparator(QGraphicsItem *parent) TimingSeparator::TimingSeparator(int time, SeparatorStyle style_, QGraphicsItem* parent)
: QGraphicsItem(parent) : QGraphicsObject(parent)
, style(style_)
{ {
setPos(TimingUtils::posFromMs(time), 0);
switch(style){
case SeparatorStyle::Start:
pen = QPen(QColor(0, 0, 255));
break;
case SeparatorStyle::Middle:
pen = QPen(QColor(180, 0, 180));
break;
case SeparatorStyle::End:
pen = QPen(QColor(255, 0, 0));
break;
}
// Putting even-size width seems to be undefined behaviour for pixel drawing : stick to odd
pen.setWidth(1);
} }
QRectF QRectF
TimingSeparator::boundingRect() const TimingSeparator::boundingRect() const
{ {
return QRectF(); return QRectF(-widthPaw, 0, 2*widthPaw, TimingUtils::audioHeight());
} }
void void
TimingSeparator::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) TimingSeparator::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{ {
painter->setPen(pen);
int height = TimingUtils::audioHeight();
int top = 1 + pen.width()/2;
int bottom = height - 1 - pen.width()/2;
painter->drawLine(0, top, 0, bottom);
switch(style){
case SeparatorStyle::Start:
painter->drawLine(0, top, widthPaw, top);
painter->drawLine(0, bottom, widthPaw, bottom);
break;
case SeparatorStyle::Middle:
painter->drawLine(-widthPaw, top, widthPaw, top);
painter->drawLine(-widthPaw, bottom, widthPaw, bottom);
break;
case SeparatorStyle::End:
painter->drawLine(-widthPaw, top, 0, top);
painter->drawLine(-widthPaw, bottom, 0, bottom);
break;
}
} }
#pragma once #pragma once
#include <QGraphicsItem> #include <QGraphicsObject>
namespace Vivy namespace Vivy
{ {
class TimingSeparator final : public QGraphicsItem { class TimingSeparator final : public QGraphicsObject {
Q_OBJECT
public: public:
explicit TimingSeparator(QGraphicsItem *parent = nullptr); enum class SeparatorStyle {
Start,
Middle,
End
};
public:
explicit TimingSeparator(int, SeparatorStyle style = SeparatorStyle::Middle, QGraphicsItem *parent = nullptr);
QRectF boundingRect() const override; QRectF boundingRect() const override;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
private:
SeparatorStyle style;
int widthPaw = 5;
QPen pen;
}; };
} }
...@@ -4,21 +4,25 @@ ...@@ -4,21 +4,25 @@
#include <QGraphicsScene> #include <QGraphicsScene>
#include "TimingUtils.hh" #include "TimingUtils.hh"
#include "TimingSeparator.hh"
using namespace Vivy; using namespace Vivy;
TimingSyl::TimingSyl(QGraphicsItem *parent) TimingSyl::TimingSyl(Ass::Syl syl_, int startTime, QGraphicsItem *parent)
: QGraphicsItem(parent) : QGraphicsObject(parent)
, syl(syl_)
{ {
setPos(TimingUtils::posFromMs(startTime), 0);
} }
QRectF QRectF
TimingSyl::boundingRect() const TimingSyl::boundingRect() const
{ {
return QRectF(); return QRectF(0, 0, int(syl.getDuration()),TimingUtils::audioHeight());
} }
void void
TimingSyl::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) TimingSyl::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{ {
painter->drawText(boundingRect(), Qt::AlignCenter, syl.getContent());
} }
#pragma once #pragma once
#include <QGraphicsItem> #include <QGraphicsObject>
#include "../../../Lib/Ass/Ass.hh"
namespace Vivy namespace Vivy
{ {
class TimingSyl final : public QGraphicsItem { class TimingSyl final : public QGraphicsObject {
Q_OBJECT
public: public:
explicit TimingSyl(QGraphicsItem *parent = nullptr); explicit TimingSyl(Ass::Syl, int, QGraphicsItem *parent = nullptr);
QRectF boundingRect() const override; QRectF boundingRect() const override;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
private:
Ass::Syl syl;
}; };
} }
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter