Skip to content

Commit

Permalink
QML: Support for waveform preferences
Browse files Browse the repository at this point in the history
  • Loading branch information
acolombier committed Jan 9, 2024
1 parent 6b92221 commit f788f3d
Show file tree
Hide file tree
Showing 11 changed files with 410 additions and 101 deletions.
4 changes: 4 additions & 0 deletions res/qml/WaveformOverview.qml
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,10 @@ Item {
colorHigh: Theme.white
colorMid: Theme.blue
colorLow: Theme.green
gainHigh: Mixxx.Config.getDouble("[Waveform]", "VisualGain_3", 1.0)
gainAll: Mixxx.Config.getDouble("[Waveform]", "VisualGain_0", 1.0)
gainLow: Mixxx.Config.getDouble("[Waveform]", "VisualGain_1", 1.0)
gainMid: Mixxx.Config.getDouble("[Waveform]", "VisualGain_2", 1.0)
group: root.group
}
}
Expand Down
15 changes: 11 additions & 4 deletions res/qml/WaveformRow.qml
Original file line number Diff line number Diff line change
Expand Up @@ -118,11 +118,14 @@ Item {
Item {
id: waveform

property real effectiveZoomFactor: rateRatioControl.value * zoomControl.value * 100
property real constantRate: Mixxx.Config.getBool("[Waveform]", "ConstantRate", true)
property real screenPos: Mixxx.Config.getDouble("[Waveform]", "PlayMarkerPosition", 0.5)

property real effectiveZoomFactor: (waveform.constantRate ? rateRatioControl.value : 1.0) * zoomControl.value * 100

width: waveformContainer.duration * effectiveZoomFactor
height: parent.height
x: 0.5 * waveformContainer.width - playPositionControl.value * width
x: screenPos * waveformContainer.width - playPositionControl.value * width
visible: root.deckPlayer.isLoaded

WaveformShader {
Expand Down Expand Up @@ -191,11 +194,13 @@ Item {
Repeater {
model: root.deckPlayer.beatsModel

property real alpha: Mixxx.Config.getInt("[Waveform]", "beatGridAlpha", 90) / 100

Rectangle {
width: 1
height: waveform.height
x: (framePosition * 2 / samplesControl.value) * waveform.width
color: Theme.waveformBeatColor
color: Qt.alpha(Theme.waveformBeatColor, alpha)
}
}

Expand Down Expand Up @@ -273,7 +278,9 @@ Item {
ShapePath {
id: playMarkerPath

startX: parent.width / 2
property real screenPos: Mixxx.Config.getDouble("[Waveform]", "PlayMarkerPosition", 0.5)

startX: parent.width * playMarkerPath.screenPos
startY: 0
strokeColor: Theme.waveformCursorColor
strokeWidth: 1
Expand Down
22 changes: 16 additions & 6 deletions res/qml/WaveformShader.qml
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,29 @@ ShaderEffect {
property color highColor: "#0000FF"
property color midColor: "#00FF00"
property color lowColor: "#FF0000"
property real highGain: filterWaveformEnableControl.value ? (filterHighKillControl.value ? 0 : filterHighControl.value) : 1
property real midGain: filterWaveformEnableControl.value ? (filterMidKillControl.value ? 0 : filterMidControl.value) : 1
property real lowGain: filterWaveformEnableControl.value ? (filterLowKillControl.value ? 0 : filterLowControl.value) : 1
property real allGain: pregainControl.value

property var visualGainAll: Mixxx.Config.getDouble("[Waveform]", "VisualGain_0", 1.0)
property var visualGainLow: Mixxx.Config.getDouble("[Waveform]", "VisualGain_1", 1.0)
property var visualGainMid: Mixxx.Config.getDouble("[Waveform]", "VisualGain_2", 1.0)
property var visualGainHigh: Mixxx.Config.getDouble("[Waveform]", "VisualGain_3", 1.0)

property real highGain: (filterWaveformEnableControl.value ? (filterHighKillControl.value ? 0 : filterHighControl.value) : 1) * visualGainHigh
property real midGain: (filterWaveformEnableControl.value ? (filterMidKillControl.value ? 0 : filterMidControl.value) : 1) * visualGainMid
property real lowGain: (filterWaveformEnableControl.value ? (filterLowKillControl.value ? 0 : filterLowControl.value) : 1) * visualGainLow
property real allGain: gainControl.value * 2.0 * visualGainAll // See WaveformWidgetRenderer::getGain()

Component.onCompleted: () => {
console.warn(`visualGainAll: ${visualGainAll}, visualGainLow: ${visualGainLow}, visualGainMid: ${visualGainMid}, visualGainHigh: ${visualGainHigh}`)
}
property Image waveformTexture

fragmentShader: "qrc:/shaders/rgbsignal_qml.frag.qsb"

Mixxx.ControlProxy {
id: pregainControl
id: gainControl

group: root.group
key: "pregain"
key: "total_gain"
}

Mixxx.ControlProxy {
Expand Down
25 changes: 11 additions & 14 deletions src/preferences/dialog/dlgpreferences.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -152,20 +152,17 @@ DlgPreferences::DlgPreferences(
tr("Interface"),
"ic_preferences_interface.svg");

// ugly proxy for determining whether this is being instantiated for QML or legacy QWidgets GUI
if (pSkinLoader) {
DlgPrefWaveform* pWaveformPage = new DlgPrefWaveform(this, m_pConfig, pLibrary);
addPageWidget(PreferencesPage(
pWaveformPage,
new QTreeWidgetItem(contentsTreeWidget, QTreeWidgetItem::Type)),
tr("Waveforms"),
"ic_preferences_waveforms.svg");
connect(pWaveformPage,
&DlgPrefWaveform::reloadUserInterface,
this,
&DlgPreferences::reloadUserInterface,
Qt::DirectConnection);
}
DlgPrefWaveform* pWaveformPage = new DlgPrefWaveform(this, m_pConfig, pLibrary);
addPageWidget(PreferencesPage(
pWaveformPage,
new QTreeWidgetItem(contentsTreeWidget, QTreeWidgetItem::Type)),
tr("Waveforms"),
"ic_preferences_waveforms.svg");
connect(pWaveformPage,
&DlgPrefWaveform::reloadUserInterface,
this,
&DlgPreferences::reloadUserInterface,
Qt::DirectConnection);

addPageWidget(PreferencesPage(
new DlgPrefColors(this, m_pConfig, pLibrary),
Expand Down
Loading

0 comments on commit f788f3d

Please sign in to comment.