diff --git a/src/Lib/Ass/Line.cc b/src/Lib/Ass/Line.cc index 51158b433d8da193e525fae37af1148300f62758..18d2a9830fe44fc0fdd674e8675359493de1e303 100644 --- a/src/Lib/Ass/Line.cc +++ b/src/Lib/Ass/Line.cc @@ -160,7 +160,7 @@ Line::getContentAsText() const noexcept } void -Line::setContent(const QVector<Syl>& syls) noexcept +Line::setContent(const QVector<Syl> &syls) noexcept { content = syls; } diff --git a/src/Lib/Ass/Line.hh b/src/Lib/Ass/Line.hh index 8b8036b2c4fc1e4ebd0333257d57e0088a0d78fd..3ec42714b4a691feccfea06e92cc833bff445b08 100644 --- a/src/Lib/Ass/Line.hh +++ b/src/Lib/Ass/Line.hh @@ -43,7 +43,7 @@ public: StyleProperties getStyleProperties() const noexcept; StyleWeakPtr getStyle() const noexcept; const QVector<Syl> &getContent() const noexcept; - void setContent(const QVector<Syl>&) noexcept; + void setContent(const QVector<Syl> &) noexcept; QVector<Syl> *getContentPtr() noexcept; // FIXME: remove me diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingLine.cc b/src/UI/DocumentViews/AudioVisualizer/TimingLine.cc index 4092b07d525ba24ecfe1efdf88dbd7129977c754..29cd6c3067ff4fe9b9b279a129c489318878fcc2 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingLine.cc +++ b/src/UI/DocumentViews/AudioVisualizer/TimingLine.cc @@ -7,6 +7,11 @@ 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, QGraphicsItem *parent) : QGraphicsObject(parent) , line(*lineptr) @@ -19,10 +24,7 @@ TimingLine::TimingLine(Ass::Line *lineptr, QGraphicsItem *parent) TimingSeparator *timingSeparatorStart = new TimingSeparator(currentTime, 0, TimingSeparator::SeparatorStyle::Start, this); seps.append(timingSeparatorStart); - connect(timingSeparatorStart, &TimingSeparator::positionChanged, this, - &TimingLine::timingSeparatorHasChanged); - connect(timingSeparatorStart, &TimingSeparator::enterPress, this, &TimingLine::sepEnterPress); - connect(timingSeparatorStart, &TimingSeparator::exitPress, this, &TimingLine::sepExitPress); + CONNECT_SEP(timingSeparatorStart); QVector<Ass::Syl> syls = line.getContent(); for (i = 0; i < syls.size(); ++i) { @@ -31,16 +33,11 @@ TimingLine::TimingLine(Ass::Line *lineptr, QGraphicsItem *parent) TimingSyl *timingSyl = new TimingSyl(syls.at(i), currentTime, this); timingSyls.append(timingSyl); - // TODO: Here create the TimingSeparator and connect if (i != 0) { TimingSeparator *timingSeparator = new TimingSeparator(currentTime, i, TimingSeparator::SeparatorStyle::Middle, this); seps.append(timingSeparator); - connect(timingSeparator, &TimingSeparator::positionChanged, this, - &TimingLine::timingSeparatorHasChanged); - connect(timingSeparator, &TimingSeparator::enterPress, this, - &TimingLine::sepEnterPress); - connect(timingSeparator, &TimingSeparator::exitPress, this, &TimingLine::sepExitPress); + CONNECT_SEP(timingSeparator); } currentTime = endSyl; @@ -49,11 +46,9 @@ TimingLine::TimingLine(Ass::Line *lineptr, QGraphicsItem *parent) TimingSeparator *timingSeparatorEnd = new TimingSeparator(currentTime, i, TimingSeparator::SeparatorStyle::End, this); seps.append(timingSeparatorEnd); - connect(timingSeparatorEnd, &TimingSeparator::positionChanged, this, - &TimingLine::timingSeparatorHasChanged); - connect(timingSeparatorEnd, &TimingSeparator::enterPress, this, &TimingLine::sepEnterPress); - connect(timingSeparatorEnd, &TimingSeparator::exitPress, this, &TimingLine::sepExitPress); + CONNECT_SEP(timingSeparatorEnd); } +#undef CONNECT_SEP QRectF TimingLine::boundingRect() const @@ -66,11 +61,10 @@ TimingLine::boundingRect() const 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)); + painter->fillRect(QRectF(tempOffset, 0, + TimingUtils::posFromMs(int(10 * (line.getEnd() - line.getStart()))), + TimingUtils::audioHeight()), + QColor(0, 255, 255, 50)); } void @@ -111,10 +105,10 @@ TimingLine::sepExitPress(int sepIndex) qreal TimingLine::requestMove(int sepIndex, qreal x) { - QRectF sceneRect = mapRectFromScene(scene()->sceneRect()); + QRectF sceneRect = mapRectFromScene(scene()->sceneRect()); QVector<Ass::Syl> syls = line.getContent(); - qreal ret = x; + qreal given = x; qreal mini, maxi; if (sepIndex <= 0) { @@ -122,68 +116,53 @@ TimingLine::requestMove(int sepIndex, qreal x) mini = sceneRect.left(); maxi = sepIndex < syls.size() - 1 ? timingSyls[sepIndex + 1]->pos().x() - : TimingUtils::posFromMs(int(line.getDuration()) * 10); - - if (ret < mini) - ret = mini; - if (ret > maxi) - ret = maxi; + : TimingUtils::posFromMs(int(line.getDuration()) * 10); - tempOffset = ret; + given = qBound(mini, given, maxi); + tempOffset = given; - quint64 dur1 = quint64(TimingUtils::msFromPos(int(seps[1]->pos().x() - ret)) / 10); + quint64 dur1 = quint64(TimingUtils::msFromPos(int(seps[1]->pos().x() - given)) / 10); syls[0].setDuration(dur1); timingSyls[0]->setLen(dur1); - timingSyls[0]->setPos(ret, 0); - line.setStart( - quint64(TimingUtils::msFromPos(mapToScene(seps[0]->pos().x(), 0).x()) / 10)); + timingSyls[0]->setPos(given, 0); + line.setStart(quint64(TimingUtils::msFromPos(mapToScene(seps[0]->pos().x(), 0).x()) / 10)); } else if (sepIndex >= syls.size()) { prepareGeometryChange(); - mini = timingSyls[sepIndex - 1]->pos().x(); - maxi = sceneRect.right(); - - if (ret < mini) - ret = mini; - if (ret > maxi) - ret = maxi; + mini = timingSyls[sepIndex - 1]->pos().x(); + maxi = sceneRect.right(); + given = qBound(mini, given, maxi); quint64 dur2 = - quint64(TimingUtils::msFromPos(int(ret - timingSyls[sepIndex - 1]->pos().x())) / 10); + quint64(TimingUtils::msFromPos(int(given - timingSyls[sepIndex - 1]->pos().x())) / 10); syls[sepIndex - 1].setDuration(dur2); timingSyls[sepIndex - 1]->setLen(dur2); - line.setEnd(line.getStart() + quint64(TimingUtils::msFromPos(int(ret)) / 10)); + line.setEnd(line.getStart() + quint64(TimingUtils::msFromPos(int(given)) / 10)); } else { - mini = timingSyls[sepIndex - 1]->pos().x(); - maxi = sepIndex < syls.size() - 1 ? timingSyls[sepIndex + 1]->pos().x() + mini = timingSyls[sepIndex - 1]->pos().x(); + maxi = sepIndex < syls.size() - 1 ? timingSyls[sepIndex + 1]->pos().x() : TimingUtils::posFromMs(int(line.getDuration() * 10)); - - if (ret < mini) - ret = mini; - if (ret > maxi) - ret = maxi; + given = qBound(mini, given, maxi); quint64 sumDur = syls[sepIndex].getDuration() + syls[sepIndex - 1].getDuration(); quint64 dur1 = quint64( - TimingUtils::msFromPos(int(ret) - int(timingSyls[sepIndex - 1]->pos().x())) / 10); - if (dur1 > sumDur) { - dur1 = sumDur; - } + TimingUtils::msFromPos(int(given) - int(timingSyls[sepIndex - 1]->pos().x())) / 10); + dur1 = qMin(dur1, sumDur); quint64 dur2 = sumDur - dur1; syls[sepIndex - 1].setDuration(dur1); syls[sepIndex].setDuration(dur2); timingSyls[sepIndex - 1]->setLen(dur1); - timingSyls[sepIndex]->setPos(ret, 0); + timingSyls[sepIndex]->setPos(given, 0); timingSyls[sepIndex]->setLen(dur2); } line.setContent(syls); - return ret; + return given; } diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingSeparator.cc b/src/UI/DocumentViews/AudioVisualizer/TimingSeparator.cc index 5c3e7ab4d4ffbc9f8346d15703df919380fddb33..e4c40c94f9990c2b085f6d1fdec189ffd7aeb894 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingSeparator.cc +++ b/src/UI/DocumentViews/AudioVisualizer/TimingSeparator.cc @@ -15,7 +15,6 @@ TimingSeparator::TimingSeparator(int time, int index, SeparatorStyle style_, Tim , sepIndex(index) , parentTimingLine(parent) { - qDebug() << time; setPos(TimingUtils::posFromMs(time), 0); setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemSendsGeometryChanges);