Skip to content

Add control for playback marker horizontal position - #15617

Draft
mxmilkiib wants to merge 1 commit into
mixxxdj:mainfrom
mxmilkiib:feature/2025.11nov.16-playback-position-control
Draft

Add control for playback marker horizontal position#15617
mxmilkiib wants to merge 1 commit into
mixxxdj:mainfrom
mxmilkiib:feature/2025.11nov.16-playback-position-control

Conversation

@mxmilkiib

Copy link
Copy Markdown
Contributor

Description

Adds a controllable parameter for adjusting the horizontal position of the playback marker/line on waveforms, allowing users to customize where the playback position indicator appears.

Motivation

Users may prefer different playback marker positions for various workflows:

  • DJs mixing may prefer the marker further right to see more upcoming audio
  • Radio DJs may prefer it centered or left for different visual reference
  • Users with ultrawide monitors may want to adjust position for ergonomics

This addresses feature request #14288.

Changes

  • Adds [Waveform],play_marker_position control (range: 0.0 = left, 1.0 = right)
  • Implements ControlPotmeter in WaveformWidgetFactory for smooth value adjustment
  • Exposes control in controller picker menu for MIDI/HID mapping
  • Adds tooltip documentation for the control
  • Preserves existing playback marker position functionality from preferences

Technical Implementation

The control is implemented as a global waveform setting that:

  • Persists across sessions via configuration
  • Updates all active waveform widgets when changed
  • Integrates with the existing playback marker rendering system in WaveformWidgetRenderer
  • Follows Mixxx control object patterns (snake_case naming for mappable controls)
  • Complements the existing preferences slider without replacing it

Testing

  • Code compiles successfully
  • Control is accessible via MIDI/HID mapping
  • UI preferences slider continues to work
  • Position persists across application restarts
  • All waveform widgets update when control changes

Related Issue

Fixes #14288

@mxmilkiib
mxmilkiib force-pushed the feature/2025.11nov.16-playback-position-control branch from a86c404 to 9abc3ea Compare November 16, 2025 03:24
@mxmilkiib
mxmilkiib force-pushed the feature/2025.11nov.16-playback-position-control branch from 49bc629 to 5848e15 Compare January 30, 2026 03:29
@mxmilkiib
mxmilkiib force-pushed the feature/2025.11nov.16-playback-position-control branch 2 times, most recently from 6a31d1f to e05b2e6 Compare February 9, 2026 07:36
@daschuer

daschuer commented Feb 9, 2026

Copy link
Copy Markdown
Member

This feature already exists. See "Play marker position" in the waveforms preferences.

@mxmilkiib

Copy link
Copy Markdown
Contributor Author

grand, thanks, branch retired

@mxmilkiib mxmilkiib closed this Feb 9, 2026
@ronso0

ronso0 commented Feb 9, 2026

Copy link
Copy Markdown
Member

I thought this is about changing the marker pos on the fly. If yes, the pref option has no CO, or does it?

@mxmilkiib

Copy link
Copy Markdown
Contributor Author

oh I just went by "this feature already exists". I'll reopen as there isn't a CO, I've been more focusing on a CI process the last few days than any testing, verification

@mxmilkiib mxmilkiib reopened this Feb 9, 2026
@mxmilkiib
mxmilkiib force-pushed the feature/2025.11nov.16-playback-position-control branch from e05b2e6 to 1571dcc Compare February 22, 2026 10:56
@mxmilkiib
mxmilkiib force-pushed the feature/2025.11nov.16-playback-position-control branch from 1571dcc to 8882d97 Compare May 1, 2026 03:32
@mxmilkiib
mxmilkiib force-pushed the feature/2025.11nov.16-playback-position-control branch 3 times, most recently from 846ee06 to b9e0e34 Compare May 15, 2026 02:54
Comment thread src/controllers/controlpickermenu.cpp Outdated
addControl("[Waveform]",
"play_marker_position",
tr("Playback Marker Position"),
tr("Adjust the horizontal position of the playback marker on the waveforms"),

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.

Waveforms are horizontal in offcial skins, though vertical waveforms are also supported

Suggested change
tr("Adjust the horizontal position of the playback marker on the waveforms"),
tr("Adjust the position of the playback marker on the waveforms"),

Comment thread src/skin/legacy/tooltips.cpp Outdated

add("[Waveform],play_marker_position")
<< tr("Playback Marker Position")
<< tr("Adjust the horizontal position of the playback marker on the waveforms.");

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.

same here

Comment on lines +440 to +454
if (!m_pPlayMarkerPositionCO) {
m_pPlayMarkerPositionCO = std::make_unique<ControlPotmeter>(
ConfigKey(kWaveformGroup, QStringLiteral("play_marker_position")),
0.0,
1.0);
m_pPlayMarkerPositionCO->set(m_playMarkerPosition);
connect(m_pPlayMarkerPositionCO.get(),
&ControlObject::valueChanged,
this,
[this](double value) {
setPlayMarkerPosition(value);
});
} else {
m_pPlayMarkerPositionCO->set(m_playMarkerPosition);
}

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.

Suggested change
if (!m_pPlayMarkerPositionCO) {
m_pPlayMarkerPositionCO = std::make_unique<ControlPotmeter>(
ConfigKey(kWaveformGroup, QStringLiteral("play_marker_position")),
0.0,
1.0);
m_pPlayMarkerPositionCO->set(m_playMarkerPosition);
connect(m_pPlayMarkerPositionCO.get(),
&ControlObject::valueChanged,
this,
[this](double value) {
setPlayMarkerPosition(value);
});
} else {
m_pPlayMarkerPositionCO->set(m_playMarkerPosition);
}
if (!m_pPlayMarkerPositionCO) {
m_pPlayMarkerPositionCO = std::make_unique<ControlPotmeter>(
ConfigKey(kWaveformGroup, QStringLiteral("play_marker_position")),
0.0,
1.0);
m_pPlayMarkerPositionCO->set(m_playMarkerPosition);
connect(m_pPlayMarkerPositionCO.get(),
&ControlObject::valueChanged,
this,
[this](double value) {
setPlayMarkerPosition(value);
});
}
m_pPlayMarkerPositionCO->set(m_playMarkerPosition);

Why do we need a lambda here? The signal and slot signature match, no?

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.

Setting the position in preferences should also update the CO, right?

Comment thread src/waveform/waveformwidgetfactory.h Outdated
#include <memory>
#include <vector>

#include "control/controlpotmeter.h"

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.

move this to the cpp and use forward-declaration here

@mxmilkiib
mxmilkiib force-pushed the feature/2025.11nov.16-playback-position-control branch from b9e0e34 to ceef34b Compare May 17, 2026 02:23
@mxmilkiib
mxmilkiib force-pushed the feature/2025.11nov.16-playback-position-control branch 2 times, most recently from 403ca04 to 956a435 Compare May 26, 2026 19:36
Implements control for adjusting the horizontal position of the playback marker/line over waveforms.

- Adds [Waveform],PlayMarkerPosition control (0.0 = left, 1.0 = right)
- Creates ControlPotmeter for smooth value adjustment
- Exposes control in controller picker menu for MIDI/HID mapping
- Adds tooltip for the control
- Preserves existing playback marker position functionality

Fixes mixxxdj#14288
@mxmilkiib
mxmilkiib force-pushed the feature/2025.11nov.16-playback-position-control branch from 956a435 to 08010eb Compare August 3, 2026 20:54
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.

Control to control the Playback Marker's position?

3 participants