From 14cc009c61714273fce8f6faf5b67b961a261795 Mon Sep 17 00:00:00 2001 From: SeeLook <seelook@gmail.com> Date: Sat, 8 Feb 2025 17:08:12 +0100 Subject: [PATCH] Migrate to QEvent::ApplicationPaletteChanged --- src/charts/qml/ChartTipMelody.qml | 1 + src/charts/tbarchartdelegate.cpp | 14 +++++++++----- src/charts/tbarchartdelegate.h | 5 +++++ src/charts/tlinchartdelegate.cpp | 13 +++++++++---- src/charts/tlinchartdelegate.h | 3 +++ src/libs/core/score/tbeamobject.cpp | 22 ++++++++++++++-------- src/libs/core/score/tbeamobject.h | 3 +++ src/libs/core/score/tmeasureobject.cpp | 17 +++++++++++------ src/libs/core/score/tmeasureobject.h | 3 +++ src/libs/core/score/tnoteitem.cpp | 12 +++++++++--- src/libs/core/score/tnoteitem.h | 3 +++ src/libs/core/score/tscoreobject.cpp | 6 +++--- src/libs/core/score/tstafflines.cpp | 13 +++++++++---- src/libs/core/score/tstafflines.h | 3 +++ src/libs/core/tnootkaqml.cpp | 14 ++++++++++---- src/libs/core/tnootkaqml.h | 4 ++++ src/main/tmainscoreobject.cpp | 20 ++++++++++++-------- src/main/tmainscoreobject.h | 4 +++- src/main/tnameitem.cpp | 21 +++++++++++++++++---- src/main/tnameitem.h | 12 +++++------- 20 files changed, 136 insertions(+), 57 deletions(-) diff --git a/src/charts/qml/ChartTipMelody.qml b/src/charts/qml/ChartTipMelody.qml index a0d758b4..89006fca 100644 --- a/src/charts/qml/ChartTipMelody.qml +++ b/src/charts/qml/ChartTipMelody.qml @@ -4,6 +4,7 @@ import "../" import "../score" +import Nootka import Nootka.Charts 1.0 import QtQuick 2.12 import Score 1.0 diff --git a/src/charts/tbarchartdelegate.cpp b/src/charts/tbarchartdelegate.cpp index 95e339d6..d2080fa2 100644 --- a/src/charts/tbarchartdelegate.cpp +++ b/src/charts/tbarchartdelegate.cpp @@ -38,12 +38,8 @@ QString trStyle(QColor c) TbarChartDelegate::TbarChartDelegate(QQuickItem *parent) : QQuickPaintedItem(parent) { - // setRenderTarget(QQuickPaintedItem::FramebufferObject); setAntialiasing(true); - - connect(qApp, &QGuiApplication::paletteChanged, this, [=] { - update(); - }); + qApp->installEventFilter(this); } TbarChartDelegate::~TbarChartDelegate() @@ -176,3 +172,11 @@ void TbarChartDelegate::paint(QPainter *painter) painter->setBrush(QBrush(grad)); painter->drawRoundedRect(rect, width() / 8.0, width() / 8.0); } + +bool TbarChartDelegate::eventFilter(QObject *obj, QEvent *event) +{ + if (obj == qApp && event->type() == QEvent::ApplicationPaletteChange) { + update(); + } + return QObject::eventFilter(obj, event); +} diff --git a/src/charts/tbarchartdelegate.h b/src/charts/tbarchartdelegate.h index 256ed601..d25e1e74 100644 --- a/src/charts/tbarchartdelegate.h +++ b/src/charts/tbarchartdelegate.h @@ -68,6 +68,11 @@ signals: void groupNrChanged(); void examChanged(); +protected: +#if !defined(Q_OS_ANDROID) + virtual bool eventFilter(QObject *obj, QEvent *event) override; +#endif + private: TchartItem *m_chart = nullptr; bool m_hovered = false; diff --git a/src/charts/tlinchartdelegate.cpp b/src/charts/tlinchartdelegate.cpp index 3f6aad09..f0697ad3 100644 --- a/src/charts/tlinchartdelegate.cpp +++ b/src/charts/tlinchartdelegate.cpp @@ -45,19 +45,16 @@ TlinChartDelegate::TlinChartDelegate(QQuickItem *parent) : QQuickPaintedItem(parent) { - // setRenderTarget(QQuickPaintedItem::FramebufferObject); setAntialiasing(true); setAcceptHoverEvents(true); m_qInf = new TtipInfo(); - connect(qApp, &QGuiApplication::paletteChanged, this, [=] { - update(); - }); connect(this, &QQuickItem::heightChanged, this, [=] { calcProgressRangeY(); emit pointYChanged(); }); + qApp->installEventFilter(this); } TlinChartDelegate::~TlinChartDelegate() @@ -398,3 +395,11 @@ void TlinChartDelegate::calcProgressRangeY() m_thisAverY = 0.0; } } + +bool TlinChartDelegate::eventFilter(QObject *obj, QEvent *event) +{ + if (obj == qApp && event->type() == QEvent::ApplicationPaletteChange) { + update(); + } + return QObject::eventFilter(obj, event); +} diff --git a/src/charts/tlinchartdelegate.h b/src/charts/tlinchartdelegate.h index 3cdceeec..860b8539 100644 --- a/src/charts/tlinchartdelegate.h +++ b/src/charts/tlinchartdelegate.h @@ -110,6 +110,9 @@ protected: void hoverEnterEvent(QHoverEvent *e) override; void hoverMoveEvent(QHoverEvent *e) override; void hoverLeaveEvent(QHoverEvent *) override; +#if !defined(Q_OS_ANDROID) + virtual bool eventFilter(QObject *obj, QEvent *event) override; +#endif private: TchartItem *m_chart = nullptr; diff --git a/src/libs/core/score/tbeamobject.cpp b/src/libs/core/score/tbeamobject.cpp index 589600ba..afb55ac9 100644 --- a/src/libs/core/score/tbeamobject.cpp +++ b/src/libs/core/score/tbeamobject.cpp @@ -62,19 +62,17 @@ TbeamObject::TbeamObject(TnotePair *sn, TmeasureObject *m) setAntialiasing(true); addNote(sn); setParent(m_measure->score()); - connect(qApp, &QGuiApplication::paletteChanged, this, [=] { - update(); - }); connect(this, &QQuickPaintedItem::visibleChanged, this, [=] { if (isVisible() && count() > 1) drawBeam(); }); + qApp->installEventFilter(this); } TbeamObject::~TbeamObject() { // qDebug() << " [BEAM] deleted of id" << (m_notes.isEmpty() ? -1 : first()->index()); - for (TnotePair *np : qAsConst(m_notes)) { + for (TnotePair *np : std::as_const(m_notes)) { np->addChange(TnotePair::e_beamChanged); np->setBeam(nullptr); // resetBeam(np); @@ -127,7 +125,7 @@ void TbeamObject::prepareBeam() int stemDirStrength = 0; bool stemsUpPossible = true; qreal hiNote = 99.0, loNote = 0.0; - for (TnotePair *np : qAsConst(m_notes)) { + for (TnotePair *np : std::as_const(m_notes)) { stemDirStrength += np->item()->notePosY() - (m_measure->staff()->upperLine() + (m_measure->score()->isPianoStaff() && np->item()->notePosY() > m_measure->staff()->upperLine() + 13.0 ? 26.0 : 4.0)); @@ -150,7 +148,7 @@ void TbeamObject::prepareBeam() if ((allStemsDown && stemTop < upperMidLine) || (!allStemsDown && stemTop > upperMidLine)) stemTop = upperMidLine; // keep beam on staff middle line } - for (TnotePair *np : qAsConst(m_notes)) { + for (TnotePair *np : std::as_const(m_notes)) { np->note()->rtm.setStemDown(allStemsDown); np->addChange(TnotePair::e_stemDirChanged); np->item()->setStemHeight(qAbs(np->item()->notePosY() - stemTop)); @@ -223,7 +221,7 @@ bool TbeamObject::removeNote(TnotePair *np) { bool deleteBeam = false; int noteId = m_notes.indexOf(np); - if (noteId == -1) { // TODO remove this if does not occur + if (noteId == -1) { qDebug() << " [BEAM] of note id" << first()->index() << "has no note to remove"; return false; } @@ -293,7 +291,7 @@ void TbeamObject::setMeasure(TmeasureObject *m) void TbeamObject::deleteBeam() { m_measure->score()->storeBeam(this); - for (TnotePair *np : qAsConst(m_notes)) { + for (TnotePair *np : std::as_const(m_notes)) { resetBeam(np); } m_16beams.clear(); @@ -302,6 +300,14 @@ void TbeamObject::deleteBeam() m_measure = nullptr; } +bool TbeamObject::eventFilter(QObject *obj, QEvent *event) +{ + if (obj == qApp && event->type() == QEvent::ApplicationPaletteChange) { + update(); + } + return QObject::eventFilter(obj, event); +} + void TbeamObject::resetBeam(TnotePair *noteToRemove) { noteToRemove->note()->rtm.setBeam(Trhythm::e_noBeam); // restore beams diff --git a/src/libs/core/score/tbeamobject.h b/src/libs/core/score/tbeamobject.h index 1536c250..5706ffcd 100644 --- a/src/libs/core/score/tbeamobject.h +++ b/src/libs/core/score/tbeamobject.h @@ -95,6 +95,9 @@ protected: void setMeasure(TmeasureObject *m); void deleteBeam(); +#if !defined(Q_OS_ANDROID) + virtual bool eventFilter(QObject *obj, QEvent *event) override; +#endif private: void resetBeam(TnotePair *noteToRemove); diff --git a/src/libs/core/score/tmeasureobject.cpp b/src/libs/core/score/tmeasureobject.cpp index 708b7cf6..c906a9d5 100644 --- a/src/libs/core/score/tmeasureobject.cpp +++ b/src/libs/core/score/tmeasureobject.cpp @@ -51,10 +51,7 @@ TmeasureObject::TmeasureObject(int nr, TscoreObject *parent) m_duration = m_score->meter()->duration(); m_free = m_duration; - connect(qApp, &QGuiApplication::paletteChanged, this, [=] { - if (m_barLine) - m_barLine->setProperty("color", qApp->palette().text().color()); - }); + qApp->installEventFilter(this); } TmeasureObject::~TmeasureObject() @@ -74,7 +71,7 @@ void TmeasureObject::setStaff(TstaffItem *st) { if (m_staff != st) { m_staff = st; - for (TnotePair *np : qAsConst(m_notes)) + for (TnotePair *np : std::as_const(m_notes)) np->item()->setStaff(m_staff); } } @@ -178,7 +175,7 @@ void TmeasureObject::insertNote(TnoteItem *afterItem) // cut note duration if it is longer than possible measure duration starting from the item auto newRtmList = Trhythm::resolve(workDur > possibleDur ? possibleDur : workDur); Tpairs nl; - for (Trhythm rtm : qAsConst(newRtmList)) { + for (Trhythm rtm : std::as_const(newRtmList)) { Tnote newNote(0, 0, 0, Trhythm(rtm.rhythm(), true)); auto np = m_score->insertSilently(afterItem->index(), newNote, this); m_notes.removeAt(afterIdInBar); @@ -620,6 +617,14 @@ void TmeasureObject::insertSilently(int id, TnotePair *np) np->item()->setNoteNameVisible(true); } +bool TmeasureObject::eventFilter(QObject *obj, QEvent *event) +{ + if (obj == qApp && event->type() == QEvent::ApplicationPaletteChange) { + if (m_barLine) + m_barLine->setProperty("color", qApp->palette().text().color()); + } + return QObject::eventFilter(obj, event); +} // ################################################################################################# // ################### PRIVATE ############################################ // ################################################################################################# diff --git a/src/libs/core/score/tmeasureobject.h b/src/libs/core/score/tmeasureobject.h index 80c35ff9..8cd3e187 100644 --- a/src/libs/core/score/tmeasureobject.h +++ b/src/libs/core/score/tmeasureobject.h @@ -196,6 +196,9 @@ protected: * squeezes extra note @p np silently, without invoking visual changes */ void insertSilently(int id, TnotePair *np); +#if !defined(Q_OS_ANDROID) + virtual bool eventFilter(QObject *obj, QEvent *event) override; +#endif private: void clearAccidState(); diff --git a/src/libs/core/score/tnoteitem.cpp b/src/libs/core/score/tnoteitem.cpp index 0c579397..e54ff3b3 100644 --- a/src/libs/core/score/tnoteitem.cpp +++ b/src/libs/core/score/tnoteitem.cpp @@ -102,9 +102,7 @@ TnoteItem::TnoteItem(TstaffItem *staffObj, TnotePair *wrapper) setAcceptedMouseButtons(Qt::LeftButton | Qt::RightButton); updateNoteHead(); - connect(qApp, &QGuiApplication::paletteChanged, this, [=] { - setColor(qApp->palette().text().color()); - }); + qApp->installEventFilter(this); } TnoteItem::~TnoteItem() @@ -944,3 +942,11 @@ void TnoteItem::checkAddLinesVisibility() m_underLoLines[1]->setVisible(v && m_notePosY >= staff()->upperLine() + 34.0); } } + +bool TnoteItem::eventFilter(QObject *obj, QEvent *event) +{ + if (obj == qApp && event->type() == QEvent::ApplicationPaletteChange) { + setColor(qApp->palette().text().color()); + } + return QObject::eventFilter(obj, event); +} diff --git a/src/libs/core/score/tnoteitem.h b/src/libs/core/score/tnoteitem.h index 08b8a4d3..400f2b83 100644 --- a/src/libs/core/score/tnoteitem.h +++ b/src/libs/core/score/tnoteitem.h @@ -213,6 +213,9 @@ protected: void mousePressEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; +#if !defined(Q_OS_ANDROID) + virtual bool eventFilter(QObject *obj, QEvent *event) override; +#endif private: TstaffItem *m_staff; diff --git a/src/libs/core/score/tscoreobject.cpp b/src/libs/core/score/tscoreobject.cpp index 17b5352a..bc007946 100644 --- a/src/libs/core/score/tscoreobject.cpp +++ b/src/libs/core/score/tscoreobject.cpp @@ -210,7 +210,7 @@ void TscoreObject::setKeySignature(int k) m_accidInKeyArray[(startVal + sign * (i * 4)) % 7] = 0; } m_keyChanged = true; - for (TmeasureObject *m : qAsConst(m_measures)) + for (TmeasureObject *m : std::as_const(m_measures)) m->keySignatureChanged(); if (notesCount() > 0) adjustScoreWidth(); @@ -1605,11 +1605,11 @@ void TscoreObject::clearScorePrivate() setSelectedItem(nullptr); m_activeBarNr = -1; changeActiveNote(nullptr); - for (TnotePair *s : qAsConst(m_segments)) { + for (TnotePair *s : std::as_const(m_segments)) { s->flush(); m_spareSegments << s; } - for (TmeasureObject *m : qAsConst(m_measures)) { + for (TmeasureObject *m : std::as_const(m_measures)) { m->flush(); m_spareMeasures << m; } diff --git a/src/libs/core/score/tstafflines.cpp b/src/libs/core/score/tstafflines.cpp index a3675dfb..7a0f3dd5 100644 --- a/src/libs/core/score/tstafflines.cpp +++ b/src/libs/core/score/tstafflines.cpp @@ -35,9 +35,7 @@ TstaffLines::TstaffLines(QQuickItem *parent) setRenderTarget(QQuickPaintedItem::FramebufferObject); setAntialiasing(true); setHeight(9.0); - connect(qApp, &QGuiApplication::paletteChanged, this, [=] { - update(); - }); + qApp->installEventFilter(this); } void TstaffLines::setStaffScale(qreal stScale) @@ -64,9 +62,16 @@ void TstaffLines::paint(QPainter *painter) void TstaffLines::geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) { - // QQuickPaintedItem::geometryChange(newGeometry, oldGeometry); if (newGeometry.width() != oldGeometry.width() || newGeometry.height() != oldGeometry.height()) { setTextureSize(QSize(qRound(m_staffScale * newGeometry.width()), qRound(newGeometry.height() * m_staffScale))); update(); } } + +bool TstaffLines::eventFilter(QObject *obj, QEvent *event) +{ + if (obj == qApp && event->type() == QEvent::ApplicationPaletteChange) { + update(); + } + return QObject::eventFilter(obj, event); +} diff --git a/src/libs/core/score/tstafflines.h b/src/libs/core/score/tstafflines.h index 0b6d0305..76948a02 100644 --- a/src/libs/core/score/tstafflines.h +++ b/src/libs/core/score/tstafflines.h @@ -41,6 +41,9 @@ public: protected: void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override; +#if !defined(Q_OS_ANDROID) + virtual bool eventFilter(QObject *obj, QEvent *event) override; +#endif private: qreal m_staffScale = 1.0; diff --git a/src/libs/core/tnootkaqml.cpp b/src/libs/core/tnootkaqml.cpp index 35b06b5f..f11f8d48 100644 --- a/src/libs/core/tnootkaqml.cpp +++ b/src/libs/core/tnootkaqml.cpp @@ -572,10 +572,7 @@ void TnootkaQML::setQmlEngine(QQmlEngine *e) connect(m_aboutAct, &Taction::triggered, this, &TnootkaQML::aboutActTriggered); m_messageColor = qApp->palette().highlight().color(); - connect(qApp, &QGuiApplication::paletteChanged, this, [=] { - setMessageColor(qApp->palette().highlight().color()); - m_scoreAct->setBgColor(qApp->palette().highlight().color()); - }); + qApp->installEventFilter(this); } /** @@ -920,3 +917,12 @@ QList<Tnote> &TnootkaQML::scoreNoteList() const { return m_scoreObject->noteList(); } + +bool TnootkaQML::eventFilter(QObject *obj, QEvent *event) +{ + if (obj == qApp && event->type() == QEvent::ApplicationPaletteChange) { + setMessageColor(qApp->palette().highlight().color()); + m_scoreAct->setBgColor(qApp->palette().highlight().color()); + } + return QObject::eventFilter(obj, event); +} diff --git a/src/libs/core/tnootkaqml.h b/src/libs/core/tnootkaqml.h index e8ba162e..b23a0c82 100644 --- a/src/libs/core/tnootkaqml.h +++ b/src/libs/core/tnootkaqml.h @@ -313,6 +313,10 @@ protected: void warnNewerVersionSlot(const QString &fileName); +#if !defined(Q_OS_ANDROID) + virtual bool eventFilter(QObject *obj, QEvent *event) override; +#endif + private: static TnootkaQML *m_instance; diff --git a/src/main/tmainscoreobject.cpp b/src/main/tmainscoreobject.cpp index 47a1f9ad..2b6bd001 100644 --- a/src/main/tmainscoreobject.cpp +++ b/src/main/tmainscoreobject.cpp @@ -113,7 +113,6 @@ TmainScoreObject::TmainScoreObject(QObject *parent) m_nextNoteAct->createQmlShortcut(&actionsComp, "StandardKey.MoveToNextChar"); m_prevNoteAct->createQmlShortcut(&actionsComp, "StandardKey.MoveToPreviousChar"); - connect(qApp, &QGuiApplication::paletteChanged, this, &TmainScoreObject::paletteSlot); connect(SOUND, &Tsound::playingChanged, this, [=] { m_playAct->setIconTag(SOUND->playing() ? QLatin1String("stopMelody") : QLatin1String("playMelody")); m_playAct->setText(SOUND->playing() ? qTR("QShortcut", "Stop") : qTR("TtoolBar", "Play")); @@ -122,6 +121,7 @@ TmainScoreObject::TmainScoreObject(QObject *parent) isExamChangedSlot(); connect(NOO, &TnootkaQML::wantOpenXml, this, &TmainScoreObject::openXmlFileSlot); + qApp->installEventFilter(this); } TmainScoreObject::~TmainScoreObject() @@ -601,7 +601,8 @@ void TmainScoreObject::isExamChangedSlot() if (m_questionMark) { m_questionMark->setParentItem(qvariant_cast<QQuickItem *>(qobject_cast<QQuickItem *>(m_scoreObj->parent())->property("bgRect"))); m_questionMark->setVisible(false); - paletteSlot(); + if (m_questionMark) + m_questionMark->setProperty("color", scoreBackgroundColor(GLOB->EquestionColor, 40)); } } singleModeSlot(); @@ -657,12 +658,6 @@ void TmainScoreObject::singleModeSlot() } } -void TmainScoreObject::paletteSlot() -{ - if (m_questionMark) - m_questionMark->setProperty("color", scoreBackgroundColor(GLOB->EquestionColor, 40)); -} - void TmainScoreObject::applyCorrectSlot() { markNoteHead(GLOB->correctColor(), m_correctNoteId); @@ -789,3 +784,12 @@ void TmainScoreObject::checkExtraStaves() } } } + +bool TmainScoreObject::eventFilter(QObject *obj, QEvent *event) +{ + if (obj == qApp && event->type() == QEvent::ApplicationPaletteChange) { + if (m_questionMark) + m_questionMark->setProperty("color", scoreBackgroundColor(GLOB->EquestionColor, 40)); + } + return QObject::eventFilter(obj, event); +} diff --git a/src/main/tmainscoreobject.h b/src/main/tmainscoreobject.h index 17597db6..56d217d2 100644 --- a/src/main/tmainscoreobject.h +++ b/src/main/tmainscoreobject.h @@ -182,7 +182,6 @@ protected: void randMelodySlot(); void isExamChangedSlot(); void singleModeSlot(); - void paletteSlot(); void getMelodyNameSlot(); void playScoreSlot(); void gotItNoteSelectedSlot(); @@ -193,6 +192,9 @@ protected: void checkSingleNoteVisibility(); void checkExtraStaves(); +#if !defined(Q_OS_ANDROID) + virtual bool eventFilter(QObject *obj, QEvent *event) override; +#endif protected slots: void applyCorrectSlot(); diff --git a/src/main/tnameitem.cpp b/src/main/tnameitem.cpp index cbb37dd9..f5dad0b1 100644 --- a/src/main/tnameitem.cpp +++ b/src/main/tnameitem.cpp @@ -43,13 +43,10 @@ TnameItem::TnameItem(QQuickItem *parent) m_note.setOctave(-4); m_bgColor = qApp->palette().base().color(); m_bgColor.setAlpha(175); - connect(qApp, &QGuiApplication::paletteChanged, this, [=] { - if (!m_questionAsked) // update color only when question is not asked - changeNameBgColor(qApp->palette().base().color()); - }); connect(GLOB, &Tglobals::showEnharmNotesChanged, this, &TnameItem::nameTextChanged); connect(GLOB, &Tglobals::noteNameStyleChanged, this, &TnameItem::nameTextChanged); connect(GLOB, &Tglobals::seventhIsBChanged, this, &TnameItem::nameTextChanged); + qApp->installEventFilter(this); } TnameItem::~TnameItem() @@ -273,3 +270,19 @@ void TnameItem::finishCorrectAnim() { emit correctionFinished(); } + +bool TnameItem::eventFilter(QObject *obj, QEvent *event) +{ + if (obj == qApp && event->type() == QEvent::ApplicationPaletteChange) { + if (!m_questionAsked) // update color only when question is not asked + changeNameBgColor(qApp->palette().base().color()); + } + return QObject::eventFilter(obj, event); +} + +void TnameItem::changeNameBgColor(const QColor &c) +{ + m_bgColor = c; + m_bgColor.setAlpha(175); + emit bgColorChanged(); +} diff --git a/src/main/tnameitem.h b/src/main/tnameitem.h index 03353ebd..811ac253 100644 --- a/src/main/tnameitem.h +++ b/src/main/tnameitem.h @@ -118,13 +118,11 @@ signals: void correctName(); void correctionFinished(); -private: - void changeNameBgColor(const QColor &c) - { - m_bgColor = c; - m_bgColor.setAlpha(175); - emit bgColorChanged(); - } +protected: +#if !defined(Q_OS_ANDROID) + virtual bool eventFilter(QObject *obj, QEvent *event) override; +#endif + void changeNameBgColor(const QColor &c); private: Tnote m_note, m_okNote; -- GitLab