Skip to content

Add rendergraph capabilities for full support on QML - #15711

Merged
JoergAtGithub merged 7 commits into
mixxxdj:mainfrom
acolombier:feat/qml-settings-interface-waveform-cpp
May 31, 2026
Merged

Add rendergraph capabilities for full support on QML#15711
JoergAtGithub merged 7 commits into
mixxxdj:mainfrom
acolombier:feat/qml-settings-interface-waveform-cpp

Conversation

@acolombier

@acolombier acolombier commented Dec 6, 2025

Copy link
Copy Markdown
Member

Depends on #14887

@acolombier
acolombier marked this pull request as draft December 20, 2025 19:45
@acolombier
acolombier force-pushed the feat/qml-settings-interface-waveform-cpp branch 2 times, most recently from af5868a to 567bb64 Compare February 6, 2026 22:58
@acolombier
acolombier marked this pull request as ready for review February 6, 2026 22:58
@acolombier
acolombier force-pushed the feat/qml-settings-interface-waveform-cpp branch 2 times, most recently from c92c429 to 78bcaa3 Compare February 9, 2026 23:52
@JoergAtGithub

Copy link
Copy Markdown
Member

Please fix the Clazy warnings

@acolombier
acolombier force-pushed the feat/qml-settings-interface-waveform-cpp branch from 78bcaa3 to 01eaf3e Compare April 19, 2026 00:37
@acolombier

acolombier commented Apr 19, 2026

Copy link
Copy Markdown
Member Author

If you are referring to the one in src/qml/qmlconfigproxy.cpp, these are false positive due to the macro expansion, which expand emit (a Qt macro) to Q_EMIT, leading to a false detection of a missing emit macros (https://github.com/KDE/clazy/blob/master/docs/checks/README-incorrect-emit.md). This doesn't seem to happen with more recent version of clazy (it took me some time to reproduce locally...) but when downgrading to the one used in CI, I was able to confirm the problem.

Either we keep it like this or I can remove the macro but this will yield a lot of repetitive boilerplate code.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR expands Mixxx’s QML waveform rendering support by wiring rendergraph-based waveform renderers into the QML scene graph pipeline, adding QML-exposed waveform configuration, and improving rendergraph node invalidation/updates for waveform marks and digits.

Changes:

  • Moves/extends waveform renderer capability reporting and option handling so QML can select supported renderer options (and pass options into renderer factories).
  • Adds QML WaveformDisplay support for static track/position-driven rendering (in addition to group/player-driven rendering) plus an options property.
  • Improves rendergraph update behavior for mark/digits nodes and refactors some waveform renderer initialization behavior.

Reviewed changes

Copilot reviewed 21 out of 21 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
src/waveform/widgets/allshader/waveformwidget.h Forward-decl rendergraph types; inlines supportedOptions() for QML access.
src/waveform/widgets/allshader/waveformwidget.cpp Moves rendergraph includes to the .cpp; removes now-inlined supportedOptions().
src/waveform/visualplayposition.h Adds key() accessor for identifying VisualPlayPosition instances.
src/waveform/renderers/waveformwidgetrenderer.h Adjusts group vs. VisualPlayPosition switching; re-inits on changes.
src/waveform/renderers/waveformwidgetrenderer.cpp Resets control proxies when no group; adds pre-render early return for missing track/samples source.
src/waveform/renderers/waveformrenderersignalbase.h Adds virtual setOptions() hook (no-op default).
src/waveform/renderers/waveformrenderersignalbase.cpp Tweaks EQ-enabled gating logic when EQ enable control is absent.
src/waveform/renderers/waveformrendererabstract.h Adds cached last play marker position for update optimizations.
src/waveform/renderers/waveformrendererabstract.cpp Initializes cached last play marker position.
src/waveform/renderers/allshader/waveformrendermark.h Adds default “next mark position” override support.
src/waveform/renderers/allshader/waveformrendermark.cpp Uses default next-mark sentinel; optimizes play marker geometry updates; improves until-mark time fallback.
src/waveform/renderers/allshader/digitsrenderer.cpp Marks geometry/material dirty after digits updates/clears to ensure SG refresh.
src/qml/qmlwaveformrenderer.h Passes options into factory create(); exposes supported options constants per renderer type.
src/qml/qmlwaveformrenderer.cpp Implements new create() signatures; adds (currently stubbed) high-detail/textured selection path.
src/qml/qmlwaveformoverview.h Adjusts signal signatures for Qt < 6.9 vs >= 6.9 compatibility.
src/qml/qmlwaveformdisplay.h Adds QML properties for static track/position and renderer options; adds enums for waveform type/options.
src/qml/qmlwaveformdisplay.cpp Implements static track/position handling; passes options to renderers; rebuilds scene graph on option changes.
src/qml/qmltrackproxy.h Declares metatype for QmlTrackProxy* for QML/Qt meta-object usage.
src/qml/qmlconfigproxy.h Adds waveform-related QML-facing config properties (type/options/visual gains/etc.).
src/qml/qmlconfigproxy.cpp Implements waveform config property persistence via macros + custom waveformOptions setter.
res/qml/WaveformDisplay.qml Updates QML to use new Config properties instead of invokable methods.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/waveform/renderers/waveformwidgetrenderer.h
Comment thread src/qml/qmlwaveformdisplay.cpp
Comment thread src/qml/qmlwaveformdisplay.cpp
Comment thread src/qml/qmlwaveformrenderer.cpp
Comment thread src/qml/qmlwaveformrenderer.cpp
Comment thread src/qml/qmlwaveformdisplay.cpp
Comment thread src/qml/qmlconfigproxy.cpp Outdated
@acolombier

Copy link
Copy Markdown
Member Author

Addressed Copilot's comment when relevant. What do you think about the clazy situation @JoergAtGithub ?

@JoergAtGithub

Copy link
Copy Markdown
Member

clazy is pass, pre-commit is what is failing here!

@acolombier

acolombier commented May 7, 2026

Copy link
Copy Markdown
Member Author

Ah I hadn't noticed - thanks
It should be fixed now.

@JoergAtGithub

Copy link
Copy Markdown
Member

The Clazy warnings are fixed in main now. Please rebase and squash the fixup!

@acolombier
acolombier force-pushed the feat/qml-settings-interface-waveform-cpp branch from 912bb2b to 1be6ec7 Compare May 31, 2026 19:14
@acolombier

Copy link
Copy Markdown
Member Author

Done @JoergAtGithub !

@JoergAtGithub JoergAtGithub left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

@JoergAtGithub
JoergAtGithub merged commit e3e2f63 into mixxxdj:main May 31, 2026
17 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants