Sélectionner une révision Git
TimingLine.cc 5,40 Kio
#include "TimingLine.hh"
#include <QPainter>
#include <QGraphicsScene>
#include "TimingUtils.hh"
using namespace Vivy;
#define CONNECT_SEP(sep) \
connect(sep, &TimingSeparator::positionChanged, this, &TimingLine::timingSeparatorHasChanged); \
connect(sep, &TimingSeparator::enterPress, this, &TimingLine::sepEnterPress); \
connect(sep, &TimingSeparator::exitPress, this, &TimingLine::sepExitPress);
TimingLine::TimingLine(Ass::Line *lineptr, int index, QGraphicsItem *parent)
: QGraphicsObject(parent)
, line(*lineptr)
, lineIndex(index)
{
setPos(TimingUtils::posFromMs(int(line.getStart()) * 10), TimingUtils::axisHeight());
int currentTime = 0;
int endSyl = 0;
int i;
TimingSeparator *timingSeparatorStart =
new TimingSeparator(currentTime, 0, TimingSeparator::SeparatorStyle::Start, this);
seps.append(timingSeparatorStart);
CONNECT_SEP(timingSeparatorStart);
QVector<Ass::Syl> syls = line.getContent();
for (i = 0; i < syls.size(); ++i) {
endSyl = currentTime + 10 * int(syls.at(i).getDuration());
TimingSyl *timingSyl = new TimingSyl(syls.at(i), currentTime, this);
timingSyls.append(timingSyl);
if (i != 0) {
TimingSeparator *timingSeparator =
new TimingSeparator(currentTime, i, TimingSeparator::SeparatorStyle::Middle, this);
seps.append(timingSeparator);
CONNECT_SEP(timingSeparator);
}
currentTime = endSyl;
}
TimingSeparator *timingSeparatorEnd =
new TimingSeparator(currentTime, i, TimingSeparator::SeparatorStyle::End, this);
seps.append(timingSeparatorEnd);
CONNECT_SEP(timingSeparatorEnd);
}
#undef CONNECT_SEP
QRectF
TimingLine::boundingRect() const
{
return QRectF(tempOffset, 0,
TimingUtils::posFromMs(int(10 * (line.getEnd() - line.getStart()))),
TimingUtils::audioHeight());
}
void
TimingLine::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
painter->fillRect(QRectF(tempOffset, 0,
TimingUtils::posFromMs(int(10 * (line.getEnd() - line.getStart()))),
TimingUtils::audioHeight()),
QColor(0, 255, 255, 50));
}