diff --git a/CMakeLists.txt b/CMakeLists.txt index 3feb433be94d72e58fd2f41f8a7b02ff1de0a10c..72ea33271f26e9a5aec319d29a5819f4278e4567 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -110,12 +110,14 @@ if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") target_compile_options(Vivy PRIVATE -Weverything - # Disable some things because we want C++20 and don't control some Qt generated files... + # Qt generated files... -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-c++98-c++11-c++14-c++17-compat-pedantic -Wno-c++20-compat + -Wno-unsafe-buffer-usage -Wno-unused-parameter # Different versions of MPV... -Wno-switch-enum + -Wno-source-uses-openmp -Wno-reserved-identifier -Wno-extra-semi-stmt -Wno-redundant-parens diff --git a/src/Lib/Audio.cc b/src/Lib/Audio.cc index fba13efeb71860bc44d120e6358faa247adf2a9a..e3b6d72d96a7b56d96e664a56e76787f1f24dc7f 100644 --- a/src/Lib/Audio.cc +++ b/src/Lib/Audio.cc @@ -217,10 +217,10 @@ AudioStream::getDecodedDecalage() const noexcept return getDecodedChunkSize() - overlap; } -quint64 +qint64 AudioStream::getLength() const noexcept { - return quint64(std::chrono::duration_cast<std::chrono::milliseconds>( - std::chrono::microseconds(dataFormat->duration)) - .count()); + return qint64(std::chrono::duration_cast<std::chrono::milliseconds>( + std::chrono::microseconds(dataFormat->duration)) + .count()); } diff --git a/src/Lib/Audio.hh b/src/Lib/Audio.hh index 5492f8d48aedda889a8d76ee194f61d056b326a5..7216fbff3c3c098f578c6c824c6157962f617554 100644 --- a/src/Lib/Audio.hh +++ b/src/Lib/Audio.hh @@ -33,7 +33,7 @@ public: // Some getters int getChannels() const noexcept; int getSampleRate() const noexcept; - quint64 getLength() const noexcept; + qint64 getLength() const noexcept; qint64 getBitRate() const noexcept; QJsonObject getProperties() const noexcept override; diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingAxis.cc b/src/UI/DocumentViews/AudioVisualizer/TimingAxis.cc index 60a6d8df2d9b0bd4b5ab820ae2bf4f3f230df93d..b7296c645ea92a2c25c70fbd1287f71342e4b2ed 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingAxis.cc +++ b/src/UI/DocumentViews/AudioVisualizer/TimingAxis.cc @@ -7,23 +7,24 @@ TimingAxis::TimingAxis() noexcept : QGraphicsObject() { pen = QPen(axisColour); - pen.setWidth(penWidth); + pen.setWidth(static_cast<int>(penWidth)); } QRectF TimingAxis::boundingRect() const { - return QRectF(0, 10+penWidth, getTimingParam()->audioWidth() + 2 * penWidth, - -2*getTimingParam()->axisHeight() - penWidth); + return QRectF(0, static_cast<int>(10 + penWidth), + static_cast<int>(getTimingParam()->audioWidth() + 2 * penWidth), + static_cast<int>(-2 * getTimingParam()->axisHeight() - penWidth)); } void TimingAxis::onParamsChanged() { - qsizetype nbAvailableTicks = availableTicks.size(); - int minorTicksIndex = 0; - int length = getTimingParam()->audioLength(); - int width = getTimingParam()->audioWidth(); + qsizetype nbAvailableTicks = availableTicks.size(); + qint64 minorTicksIndex = 0; + qint64 length = getTimingParam()->audioLength(); + qint64 width = getTimingParam()->audioWidth(); if (width != 0 && length != 0) { for (minorTicksIndex = 0; minorTicksIndex < nbAvailableTicks; minorTicksIndex++) { if (width * availableTicks[minorTicksIndex] / length >= minBetweenMinor) { @@ -44,16 +45,16 @@ TimingAxis::onParamsChanged() } void -TimingAxis::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +TimingAxis::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) { - int audioLength = getTimingParam()->audioLength(); + qint64 audioLength = getTimingParam()->audioLength(); if (audioLength == 0) return; - int yText = -majorTicksHeight - timeDigitsMargin; + const int yText = static_cast<int>((-majorTicksHeight) - timeDigitsMargin); painter->setPen(pen); - painter->drawLine(0, 0, audioLength, 0); + painter->drawLine(0, 0, static_cast<int>(audioLength), 0); /* * We may want to calculate width/audioLength @@ -63,16 +64,16 @@ TimingAxis::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWi * It should be faster at the cost of precision : * should look whether this precision loss is negligible or not */ - for (int i = 0; i < audioLength; i += majorTicks) { - int pos = getTimingParam()->posFromMs(i); + for (qint64 i = 0; i < audioLength; i += majorTicks) { + const int pos = static_cast<int>(getTimingParam()->posFromMs(i)); painter->drawText(QPoint(pos, yText), getTimingParam()->printMajorTicks(i)); - painter->drawLine(pos, 0, pos, -majorTicksHeight); + painter->drawLine(pos, 0, pos, static_cast<int>(-majorTicksHeight)); } if (minorTicks > 0) { - for (int i = 0; i < audioLength; i += minorTicks) { - int pos = getTimingParam()->posFromMs(i); + for (qint64 i = 0; i < audioLength; i += minorTicks) { + const int pos = static_cast<int>(getTimingParam()->posFromMs(i)); if (Q_LIKELY(fmod(i, majorTicks) < DBL_EPSILON)) - painter->drawLine(pos, 0, pos, -minorTicksHeight); + painter->drawLine(pos, 0, pos, static_cast<int>(-minorTicksHeight)); } } } diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingAxis.hh b/src/UI/DocumentViews/AudioVisualizer/TimingAxis.hh index 266c0431373e7e2df91b388cfe1e3d5998d642c0..e13990a42acc4e1aeff58080a853bb503e58fee3 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingAxis.hh +++ b/src/UI/DocumentViews/AudioVisualizer/TimingAxis.hh @@ -23,24 +23,23 @@ public: private: static inline constexpr QColor axisColour = QColor(255, 220, 220); QPen pen; - int penWidth{ 1 }; + qint64 penWidth{ 1 }; /* * 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 }; - int minBetweenMinor{ 10 }; - int minorTicks; - int majorTicks; + QVector<qint64> availableTicks = { 10, 100, 1000, 10000, 60000, 3600000, 86400000 }; + qint64 minBetweenMinor{ 10 }; + qint64 minorTicks; + qint64 majorTicks; - int minorTicksHeight{ 3 }; - int majorTicksHeight{ 7 }; - int timeDigitsHeight{ 20 }; - int timeDigitsMargin{ 3 }; + qint64 minorTicksHeight{ 3 }; + qint64 majorTicksHeight{ 7 }; + qint64 timeDigitsHeight{ 20 }; + qint64 timeDigitsMargin{ 3 }; -protected: public slots: void onParamsChanged(); }; diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingBar.hh b/src/UI/DocumentViews/AudioVisualizer/TimingBar.hh index 01c529ad728c1e4dfcec1f672cc64a73064ead30..5dfbd2af0b96ec1bc6fdf7397e7d874ac2f59d5a 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingBar.hh +++ b/src/UI/DocumentViews/AudioVisualizer/TimingBar.hh @@ -14,8 +14,8 @@ public: ~TimingBar() noexcept override = default; private: - static inline constexpr int bar_demi_width = 2; - static inline constexpr int bar_width = 2 * bar_demi_width; + static inline constexpr qint64 bar_demi_width = 2; + static inline constexpr qint64 bar_width = 2 * bar_demi_width; protected: //void mousePressEvent(QGraphicsSceneMouseEvent*); diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingCursor.cc b/src/UI/DocumentViews/AudioVisualizer/TimingCursor.cc index 1ef531d09a7a1ebf650011add8a80e452c4681f7..6ec41c41dd81fe09ada659f9c96e4f0d032a8632 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingCursor.cc +++ b/src/UI/DocumentViews/AudioVisualizer/TimingCursor.cc @@ -12,13 +12,13 @@ TimingCursor::TimingCursor() QRectF TimingCursor::boundingRect() const { - return QRectF(-maxWidth, 0, maxWidth * 2, getTimingParam()->audioHeight()); + return QRectF(-maxWidth, 0, maxWidth * 2, static_cast<int>(getTimingParam()->audioHeight())); } void -TimingCursor::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +TimingCursor::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) { - painter->drawLine(0, 0, 0, getTimingParam()->audioHeight()); + painter->drawLine(0, 0, 0, static_cast<int>(getTimingParam()->audioHeight())); QRectF textRectangle = textRect; QPointF sceneLeft = mapFromScene(QPointF(0, 0)); @@ -38,6 +38,6 @@ TimingCursor::setTime(QString str) noexcept void TimingCursor::onParamsChanged() { - textRect = QRectF(0, 10, maxWidth, - getTimingParam()->audioHeight() - 20); // TODO : remove 10/20 magic numbers + // TODO : remove 10/20 magic numbers + textRect = QRectF(0, 10, maxWidth, static_cast<int>(getTimingParam()->audioHeight() - 20)); } diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingLine.cc b/src/UI/DocumentViews/AudioVisualizer/TimingLine.cc index 3e6045647424f37447c76f98dcc2402ea66e595d..5fd4e49a17430db0986b7119633b75e3a0a314b7 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingLine.cc +++ b/src/UI/DocumentViews/AudioVisualizer/TimingLine.cc @@ -3,9 +3,9 @@ using namespace Vivy; -TimingLine::TimingLine(VVLib::ASSLine _line[], int index, QGraphicsItem *parent) +TimingLine::TimingLine(VVLib::ASSLine l[], qint64 index, QGraphicsItem *parent) : QGraphicsObject(parent) - , line(_line) + , line(l) , lineIndex(index) { } @@ -16,31 +16,32 @@ TimingLine::boundingRect() const const auto end = VVLib::ASSLineGetFiniTime(line); const auto start = VVLib::ASSLineGetStartTime(line); return QRectF(tempOffset, 0, getTimingParam()->posFromMs(int(10 * (end - start))), - getTimingParam()->audioHeight()); + static_cast<int>(getTimingParam()->audioHeight())); } void -TimingLine::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +TimingLine::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) { const auto end = VVLib::ASSLineGetFiniTime(line); const auto start = VVLib::ASSLineGetStartTime(line); - painter->fillRect(QRectF(tempOffset, 0, getTimingParam()->posFromMs(int(10 * (end - start))), - getTimingParam()->audioHeight()), - QColor(0, 255, 255, 50)); + const QRectF rect(tempOffset, 0, + static_cast<int>(getTimingParam()->posFromMs(10 * (end - start))), + static_cast<int>(getTimingParam()->audioHeight())); + painter->fillRect(rect, QColor(0, 255, 255, 50)); } void -TimingLine::timingSeparatorHasChanged(int sylIndex, qreal x) +TimingLine::timingSeparatorHasChanged([[maybe_unused]] qint64 sylIndex, [[maybe_unused]] qreal x) { } void -TimingLine::sepEnterPress(int sepIndex) +TimingLine::sepEnterPress([[maybe_unused]] qint64 sepIndex) { } void -TimingLine::sepExitPress(int sepIndex) +TimingLine::sepExitPress(qint64 sepIndex) { if (qAbs(tempOffset) <= DBL_EPSILON) { prepareGeometryChange(); @@ -66,10 +67,10 @@ TimingLine::sepExitPress(int sepIndex) } qreal -TimingLine::requestMove(int sepIndex, qreal x) +TimingLine::requestMove(qint64 sepIndex, qreal x) { - QRectF sceneRect = mapRectFromScene(scene()->sceneRect()); - const auto syls_count = VVLib::ASSLineGetSyllabesCount(line); + QRectF sceneRect = mapRectFromScene(scene()->sceneRect()); + const qint64 syls_count = static_cast<qint64>(VVLib::ASSLineGetSyllabesCount(line)); qreal mini, maxi, given = x; if (sepIndex <= 0) { @@ -101,7 +102,8 @@ TimingLine::requestMove(int sepIndex, qreal x) qint64 dur2 = qint64( getTimingParam()->msFromPos(int(given - timingSyls[sepIndex - 1]->pos().x())) / 10); - VVLib::ASSSyllabeSetDuration(VVLib::ASSLineGetSyllabeAt(line, sepIndex - 1), dur2); + VVLib::ASSSyllabeSetDuration( + VVLib::ASSLineGetSyllabeAt(line, static_cast<quint64>(sepIndex - 1)), dur2); timingSyls[sepIndex - 1]->setLen(dur2); VVLib::ASSLineSetFiniTime(line, VVLib::ASSLineGetStartTime(line) + qint64(getTimingParam()->msFromPos(int(given)) / 10)); @@ -114,17 +116,18 @@ TimingLine::requestMove(int sepIndex, qreal x) : getTimingParam()->posFromMs(int(VVLib::ASSLineGetDuration(line) * 10)); given = qBound(mini, given, maxi); - qint64 sumDur = - VVLib::ASSSyllabeGetDuration(VVLib::ASSLineGetSyllabeAt(line, sepIndex)) + - VVLib::ASSSyllabeGetDuration(VVLib::ASSLineGetSyllabeAt(line, sepIndex - 1)); - qint64 dur1 = qint64( - getTimingParam()->msFromPos(int(given) - int(timingSyls[sepIndex - 1]->pos().x())) / - 10); - dur1 = qMin(dur1, sumDur); + const auto current_syl = VVLib::ASSLineGetSyllabeAt(line, static_cast<quint64>(sepIndex)); + const auto prev_syl = VVLib::ASSLineGetSyllabeAt(line, static_cast<quint64>(sepIndex - 1)); + + const qint64 sumDur = + VVLib::ASSSyllabeGetDuration(current_syl) + VVLib::ASSSyllabeGetDuration(prev_syl); + const qint64 dur1 = qMin( + getTimingParam()->msFromPos(int(given) - int(timingSyls[sepIndex - 1]->pos().x())) / 10, + sumDur); qint64 dur2 = sumDur - dur1; - VVLib::ASSSyllabeSetDuration(VVLib::ASSLineGetSyllabeAt(line, sepIndex - 1), dur1); - VVLib::ASSSyllabeSetDuration(VVLib::ASSLineGetSyllabeAt(line, sepIndex), dur2); + VVLib::ASSSyllabeSetDuration(prev_syl, dur1); + VVLib::ASSSyllabeSetDuration(current_syl, dur2); timingSyls[sepIndex - 1]->setLen(dur1); timingSyls[sepIndex]->setPos(given, 0); @@ -142,11 +145,11 @@ TimingLine::requestMove(int sepIndex, qreal x) void TimingLine::onParamsChanged() { - setPos(getTimingParam()->posFromMs(int(VVLib::ASSLineGetStartTime(line) * 10)), - getTimingParam()->axisHeight()); - int currentTime = 0; - int endSyl = 0; - size_t i; + setPos(static_cast<qreal>(getTimingParam()->posFromMs(VVLib::ASSLineGetStartTime(line) * 10)), + static_cast<qreal>(getTimingParam()->axisHeight())); + qint64 currentTime = 0; + qint64 endSyl = 0; + qint64 i; setZValue(Z_LINE_BACKGROUND); @@ -155,8 +158,9 @@ TimingLine::onParamsChanged() seps.append(timingSeparatorStart); CONNECT_SEP(timingSeparatorStart); - for (i = 0; i < VVLib::ASSLineGetSyllabesCount(line); i += 1) { - auto *syllabe = VVLib::ASSLineGetSyllabeAt(line, i); + const qint64 syls_count = static_cast<qint64>(VVLib::ASSLineGetSyllabesCount(line)); + for (i = 0; i < syls_count; i += 1) { + auto *syllabe = VVLib::ASSLineGetSyllabeAt(line, static_cast<quint64>(i)); endSyl = currentTime + 10 * int(VVLib::ASSSyllabeGetDuration(syllabe)); TimingSyl *timingSyl = new TimingSyl(syllabe, currentTime, this); diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingLine.hh b/src/UI/DocumentViews/AudioVisualizer/TimingLine.hh index 5b9df2826979a0fa21fd9733c5310eae0f47f296..1d76c931cff772abc2e431bf0184237abb874b47 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingLine.hh +++ b/src/UI/DocumentViews/AudioVisualizer/TimingLine.hh @@ -11,7 +11,7 @@ namespace Vivy class TimingLine final : public QGraphicsObject { Q_OBJECT public: - explicit TimingLine(VVLib::ASSLine[], int, QGraphicsItem * = nullptr); + explicit TimingLine(VVLib::ASSLine[], qint64, QGraphicsItem * = nullptr); QRectF boundingRect() const override; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; @@ -20,20 +20,20 @@ private: VVLib::ASSLine *const line; QVector<TimingSeparator *> seps; QVector<TimingSyl *> timingSyls; - int lineIndex; + qint64 lineIndex; qreal tempOffset{ 0 }; public: - qreal requestMove(int, qreal); + qreal requestMove(qint64, qreal); signals: - void lineChanged(int); + void lineChanged(qint64); public slots: - void timingSeparatorHasChanged(int, qreal); - void sepEnterPress(int); - void sepExitPress(int); + void timingSeparatorHasChanged(qint64, qreal); + void sepEnterPress(qint64); + void sepExitPress(qint64); void onParamsChanged(); }; diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingParams.cc b/src/UI/DocumentViews/AudioVisualizer/TimingParams.cc index b18c1c00812f4e4535ef984441d6702ca8a0246d..4dd45756d459adc6db1b90659d468337246de275 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingParams.cc +++ b/src/UI/DocumentViews/AudioVisualizer/TimingParams.cc @@ -59,7 +59,7 @@ TimingParams::getRebuildSceneButton() const noexcept } void -TimingParams::adjustFlip(QRectF *rect, qreal left, qreal right) noexcept +TimingParams::adjustFlip(QRectF *rect, [[maybe_unused]] qreal left, qreal right) noexcept { if (Q_UNLIKELY(right - rect->right() < 0)) { qreal w = rect->width(); @@ -81,7 +81,7 @@ TimingParams::adjustTranslate(QRectF *rect, qreal left, qreal right) noexcept } QString -TimingParams::printMajorTicks(int t) noexcept +TimingParams::printMajorTicks(qint64 t) noexcept { // TODO : adapt to different ticks (not everytime with "." first) QString ret( @@ -95,12 +95,12 @@ TimingParams::printMajorTicks(int t) noexcept } QString -TimingParams::printCursor(int t) noexcept +TimingParams::printCursor(qint64 t) noexcept { - int absT = abs(t); + qint64 absT = abs(t); // TODO : adapt to different ticks (not everytime with "." first) QString ret( - QString::fromLatin1(t < 0 ? "-" : "" ) + + QString::fromLatin1(t < 0 ? "-" : "") + QStringLiteral("%1").arg(absT % 60000 / 1000, absT >= 60000 ? 2 : 1, 10, QLatin1Char('0')) + QString(".") + QString::number(absT % 1000 / m_minorTicks)); if (absT >= 60000) diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingParams.hh b/src/UI/DocumentViews/AudioVisualizer/TimingParams.hh index 332d5b92d0842ed18d5a21e30966b531d493ae66..a53f65cc4055284666cac42e1436de84efa3f61e 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingParams.hh +++ b/src/UI/DocumentViews/AudioVisualizer/TimingParams.hh @@ -12,13 +12,13 @@ #define getTimingScene() static_cast<TimingScene *>(scene()) #define getTimingParam() getTimingScene()->getParams() -#define Z_SPECTER -1000 -#define Z_AXIS 10 -#define Z_LINE_BACKGROUND -100 -#define Z_SEPARATOR_START_END 1000 -#define Z_SEPARATOR_MIDDLE 100 -#define Z_LINE_SYL_TEXT 50 -#define Z_CURSOR_BAR 500 +#define Z_SPECTER (-1000) +#define Z_AXIS (10) +#define Z_LINE_BACKGROUND (-100) +#define Z_SEPARATOR_START_END (1000) +#define Z_SEPARATOR_MIDDLE (100) +#define Z_LINE_SYL_TEXT (50) +#define Z_CURSOR_BAR (500) namespace Vivy { @@ -40,62 +40,68 @@ public: private: // Managed by TimingAxis - int m_majorTicks{1}, m_minorTicks{1}; + qint64 m_majorTicks{ 1 }, m_minorTicks{ 1 }; // Managed by TimingScene - int m_axisHeight{1}, m_audioWidth{1}, m_audioLength{1}, m_audioHeight{1}; + qint64 m_axisHeight{ 1 }, m_audioWidth{ 1 }, m_audioLength{ 1 }, m_audioHeight{ 1 }; // Self-managed - qreal m_wl{0}, m_lw{0}; - qreal m_audioWidthScale{1}; + qreal m_wl{ 0 }, m_lw{ 0 }; + qreal m_audioWidthScale{ 1 }; public: void adjustTranslate(QRectF *, qreal, qreal) noexcept; void adjustFlip(QRectF *, qreal, qreal) noexcept; - QString printMajorTicks(int) noexcept; - QString printCursor(int) noexcept; + QString printMajorTicks(qint64) noexcept; + QString printCursor(qint64) noexcept; - inline void setTicks(int t, int T) noexcept + inline void setTicks(qint64 t, qint64 T) noexcept { m_minorTicks = t; m_majorTicks = T; } - inline void setAxisHeight(int x) { m_axisHeight = x; } - inline void setAudioHeight(int x) { m_audioHeight = x; } - inline void setAudioWidth(int x) + inline void setAxisHeight(qint64 x) noexcept { m_axisHeight = x; } + inline void setAudioHeight(qint64 x) noexcept { m_audioHeight = x; } + inline void setAudioWidth(qint64 x) noexcept { - m_audioWidth = int(x * m_audioWidthScale); + m_audioWidth = x * static_cast<qint64>(m_audioWidthScale); updateRatios(); } - inline void setAudioLength(int x) + inline void setAudioLength(qint64 x) noexcept { m_audioLength = x; updateRatios(); } - inline int axisHeight() { return m_axisHeight; } - inline int audioHeight() { return m_audioHeight; } - inline int audioWidth() { return m_audioWidth; } - inline int audioLength() { return m_audioLength; } + inline qint64 axisHeight() const noexcept { return m_axisHeight; } + inline qint64 audioHeight() const noexcept { return m_audioHeight; } + inline qint64 audioWidth() const noexcept { return m_audioWidth; } + inline qint64 audioLength() const noexcept { return m_audioLength; } - inline void setAudioWidthScale(int s) + inline void setAudioWidthScale(qint64 s) noexcept { - m_audioWidthScale = 1 + 0.01 * s; + m_audioWidthScale = 1.0 + 0.01 * static_cast<qreal>(s); setAudioWidth(m_audioWidth); updateRatios(); } - template <typename T> T posFromMs(T t) noexcept { - return T(t * m_wl); + template <typename T> T posFromMs(T t) noexcept + { + return static_cast<T>(static_cast<qreal>(t) * m_wl); } - template <typename T> T posFromMs(T t, int audioWidth, int audioLength) noexcept { - return audioLength == 0 ? 0 : T(qint64(t) * qint64(audioWidth) / audioLength); + + template <typename T> T posFromMs(T t, qint64 audioWidth, qint64 audioLength) noexcept + { + return audioLength == 0 ? 0 : qint64(t) * audioWidth / audioLength; } - template <typename T> T msFromPos(T x) noexcept { - return T(x * m_lw); + template <typename T> T msFromPos(T x) noexcept + { + return static_cast<T>(static_cast<qreal>(x) * m_lw); } - template <typename T> T msFromPos(T x, int audioLength, int audioWidth) noexcept { - return audioWidth == 0 ? 0 : int(qint64(x) * qint64(audioLength) / audioWidth); + + template <typename T> T msFromPos(T x, qint64 audioLength, qint64 audioWidth) noexcept + { + return audioWidth == 0 ? 0 : qint64(x) * audioLength / audioWidth; } private: diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc b/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc index d4b80f0ef7e9e3859390e167feab22160822d24c..339354ebd6086034ae2a9eb0a1fc46f7444a1353 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc +++ b/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc @@ -56,7 +56,7 @@ TimingScene::mousePressEvent(QGraphicsSceneMouseEvent *event) noexcept void TimingScene::handleMousePressEventLine(QGraphicsSceneMouseEvent *event, VVLib::ASSLine p[]) noexcept { - const qint64 time = timeFromPos(event->scenePos().x()); + const qint64 time = timeFromPos(static_cast<qint64>(event->scenePos().x())); if (const auto &btn = event->button(); btn == Qt::LeftButton) { VVLib::ASSLineSetStartTime(p, static_cast<int64_t>(time)); } else if (btn == Qt::RightButton) { @@ -111,10 +111,10 @@ TimingScene::rebuildScene() } timingLines.clear(); - QPixmap pixmap(QPixmap::fromImage(img)); + const QPixmap pixmap(QPixmap::fromImage(img)); backgroundImg = addPixmap(pixmap); backgroundImg->setZValue(Z_SPECTER); - backgroundImg->setPos(0, params->axisHeight()); + backgroundImg->setPos(0.0, static_cast<qreal>(params->axisHeight())); params->setAudioHeight(pixmap.height()); params->setAudioWidth(img.width()); @@ -124,16 +124,17 @@ TimingScene::rebuildScene() addItem(ax); ax->onParamsChanged(); ax->setZValue(Z_AXIS); - ax->setPos(0, params->axisHeight()); + ax->setPos(0.0, static_cast<qreal>(params->axisHeight())); cursor = new TimingCursor(); addItem(cursor); cursor->onParamsChanged(); - cursor->setPos(0, params->axisHeight()); + cursor->setPos(0.0, static_cast<qreal>(params->axisHeight())); // Freeze the scene boundaries - QRectF sRect = sceneRect(); - setSceneRect(QRectF(0, sRect.top(), params->audioWidth(), sRect.height()).normalized()); + const QRectF sRect = sceneRect(); + const QRectF rect(0.0, sRect.top(), static_cast<qreal>(params->audioWidth()), sRect.height()); + setSceneRect(rect.normalized()); if (auto assDocument = rootVivyDocument.getAssSubDocument()) { QVector<VVLib::ASSLine *> lines = assDocument->getLines(); @@ -178,10 +179,10 @@ TimingScene::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent) noexcept QGraphicsScene::mouseMoveEvent(mouseEvent); } -quint64 -TimingScene::timeFromPos(quint64 x) const noexcept +qint64 +TimingScene::timeFromPos(qint64 x) const noexcept { - if (const quint64 w = quint64(width()); x <= 0 || w <= 0) { + if (const qint64 w = qint64(width()); x <= 0 || w <= 0) { qCritical() << "Try avoid possible divide by zero in the time from position"; return 0; } else { @@ -189,10 +190,10 @@ TimingScene::timeFromPos(quint64 x) const noexcept } } -quint64 -TimingScene::posFromTime(quint64 t) const noexcept +qint64 +TimingScene::posFromTime(qint64 t) const noexcept { - if (const quint64 w = quint64(width()); t <= 0 || w <= 0) { + if (const qint64 w = qint64(width()); t <= 0 || w <= 0) { qCritical() << "Try avoid possible divide by zero in the position from time"; return 0; } else { diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingScene.hh b/src/UI/DocumentViews/AudioVisualizer/TimingScene.hh index e9102fcab6312106b9ed45384f53a97fc34058b2..d631ad9d3c39e963ddc9b0a23f96002b1222c83f 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingScene.hh +++ b/src/UI/DocumentViews/AudioVisualizer/TimingScene.hh @@ -59,8 +59,8 @@ private: void handleMousePressEventChar(QGraphicsSceneMouseEvent *, VVLib::ASSLine[]) noexcept; private: - quint64 timeFromPos(quint64 x) const noexcept; - quint64 posFromTime(quint64 t) const noexcept; + qint64 timeFromPos(qint64 x) const noexcept; + qint64 posFromTime(qint64 t) const noexcept; public slots: void updateScene(QImage, AudioContext::StreamPtr); diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingSeparator.cc b/src/UI/DocumentViews/AudioVisualizer/TimingSeparator.cc index 2f0248efea2665321dd6626df663ea6ccbcd5f39..dff9ca336e68a8b5c8ce1051225454358edce7b3 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingSeparator.cc +++ b/src/UI/DocumentViews/AudioVisualizer/TimingSeparator.cc @@ -4,13 +4,14 @@ using namespace Vivy; -TimingSeparator::TimingSeparator(int time, int index, SeparatorStyle style_, TimingLine *parent) +TimingSeparator::TimingSeparator(qint64 time, qint64 index, SeparatorStyle style_, + TimingLine *parent) : QGraphicsObject(parent) , style(style_) , sepIndex(index) , parentTimingLine(parent) { - setPos(getTimingParam()->posFromMs(time), 0); + setPos(static_cast<qreal>(getTimingParam()->posFromMs(time)), 0); setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemSendsGeometryChanges); setAcceptHoverEvents(true); @@ -37,14 +38,14 @@ TimingSeparator::TimingSeparator(int time, int index, SeparatorStyle style_, Tim QRectF TimingSeparator::boundingRect() const { - return QRectF(-widthPaw, 0, 2 * widthPaw, getTimingParam()->audioHeight()); + return QRectF(-widthPaw, 0, 2 * widthPaw, static_cast<int>(getTimingParam()->audioHeight())); } void -TimingSeparator::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +TimingSeparator::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) { painter->setPen(pen); - int height = getTimingParam()->audioHeight(); + int height = static_cast<int>(getTimingParam()->audioHeight()); int top = 1 + pen.width() / 2; int bottom = height - 1 - pen.width() / 2; diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingSeparator.hh b/src/UI/DocumentViews/AudioVisualizer/TimingSeparator.hh index ca3fa9559363d156cd9e0c0a4565e08af37eb7d4..c2942814d9887b258ab1c438b120c5bf9be45237 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingSeparator.hh +++ b/src/UI/DocumentViews/AudioVisualizer/TimingSeparator.hh @@ -12,7 +12,7 @@ public: enum class SeparatorStyle { Start, Middle, End }; public: - explicit TimingSeparator(int, int, SeparatorStyle, TimingLine *); + explicit TimingSeparator(qint64, qint64, SeparatorStyle, TimingLine *); QRectF boundingRect() const override; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; @@ -21,15 +21,15 @@ private: SeparatorStyle style; int widthPaw = 5; QPen pen; - int sepIndex; + qint64 sepIndex; TimingLine *parentTimingLine; bool inhibMove{ false }; signals: - void positionChanged(int, qreal); - void enterPress(int); - void exitPress(int); + void positionChanged(qint64, qreal); + void enterPress(qint64); + void exitPress(qint64); protected: QVariant itemChange(GraphicsItemChange change, const QVariant &value) noexcept override; diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingSyl.cc b/src/UI/DocumentViews/AudioVisualizer/TimingSyl.cc index 7d09bc9441d2773513405ccfd0a425d9122b3dcc..081021f0e321135cd9ec17820fad57fc8410c874 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingSyl.cc +++ b/src/UI/DocumentViews/AudioVisualizer/TimingSyl.cc @@ -4,23 +4,23 @@ using namespace Vivy; -TimingSyl::TimingSyl(VVLib::ASSSyllabe syl_[], int startTime, QGraphicsItem *parent) +TimingSyl::TimingSyl(VVLib::ASSSyllabe syl_[], qint64 startTime, QGraphicsItem *parent) : QGraphicsObject(parent) , syl(syl_) { setZValue(Z_LINE_SYL_TEXT); - setPos(getTimingParam()->posFromMs(startTime), 0); + setPos(static_cast<qreal>(getTimingParam()->posFromMs(startTime)), 0.0); } QRectF TimingSyl::boundingRect() const { - const auto dur = VVLib::ASSSyllabeGetDuration(syl); - return QRectF(0, 0, dur, getTimingParam()->audioHeight()); + const qreal dur = static_cast<qreal>(VVLib::ASSSyllabeGetDuration(syl)); + return QRectF(0, 0, dur, static_cast<qreal>(getTimingParam()->audioHeight())); } void -TimingSyl::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +TimingSyl::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) { const auto str = VVLib::ASSSyllabeGetContent(syl); painter->drawText(boundingRect(), Qt::AlignCenter, @@ -28,7 +28,7 @@ TimingSyl::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWid } void -TimingSyl::setLen(quint64 len) +TimingSyl::setLen(qint64 len) { prepareGeometryChange(); VVLib::ASSSyllabeSetDuration(syl, len); diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingSyl.hh b/src/UI/DocumentViews/AudioVisualizer/TimingSyl.hh index 84c77996ec5c88b63908d4270dff682e2d53c116..3a0d4d857495becec8ba4114f0ade92c400841b6 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingSyl.hh +++ b/src/UI/DocumentViews/AudioVisualizer/TimingSyl.hh @@ -8,7 +8,7 @@ namespace Vivy class TimingSyl final : public QGraphicsObject { Q_OBJECT public: - explicit TimingSyl(VVLib::ASSSyllabe[], int, QGraphicsItem *parent = nullptr); + explicit TimingSyl(VVLib::ASSSyllabe[], qint64, QGraphicsItem *parent = nullptr); QRectF boundingRect() const override; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; @@ -17,7 +17,7 @@ private: VVLib::ASSSyllabe *const syl; public: - void setLen(quint64 len); + void setLen(qint64 len); }; } diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingView.cc b/src/UI/DocumentViews/AudioVisualizer/TimingView.cc index 953b5c4211ffeb6085156995e728202893721400..b4f69fe7d82e606231a5dc15e3e3a70b39948fb8 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingView.cc +++ b/src/UI/DocumentViews/AudioVisualizer/TimingView.cc @@ -3,7 +3,7 @@ using namespace Vivy; -TimingView::TimingView(QGraphicsScene *scene, QImage img, AudioContext::StreamPtr stream, +TimingView::TimingView(QGraphicsScene *scene, QImage, AudioContext::StreamPtr stream, QWidget *parent) noexcept : QGraphicsView(scene, parent) , audioStream(stream) @@ -31,7 +31,7 @@ TimingView::wheelEvent(QWheelEvent *event) noexcept } void -TimingView::moveScrollBarToBottom(int, int max) noexcept +TimingView::moveScrollBarToBottom(qint64, qint64 max) noexcept { - verticalScrollBar()->setValue(max); + verticalScrollBar()->setValue(static_cast<int>(max)); } diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingView.hh b/src/UI/DocumentViews/AudioVisualizer/TimingView.hh index 1651777348ab0284ad8024920626ab29019fa7c9..6b5aea3da819269e18e1b597053c9c2f725bbc48 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingView.hh +++ b/src/UI/DocumentViews/AudioVisualizer/TimingView.hh @@ -14,7 +14,7 @@ namespace Vivy class TimingView final : public QGraphicsView { Q_OBJECT - static inline constexpr int wheelAngleToScrollRatio = 5; + static inline constexpr qint64 wheelAngleToScrollRatio = 5; TimingScene *currentScene{ nullptr }; AudioContext::StreamPtr audioStream; @@ -30,6 +30,6 @@ public: void wheelEvent(QWheelEvent *) noexcept override; public slots: - void moveScrollBarToBottom(int, int) noexcept; + void moveScrollBarToBottom(qint64, qint64) noexcept; }; }