[SNDVOL32] Take the balance between channels into account for the volume trackbar...
authorEric Kohl <eric.kohl@reactos.org>
Tue, 5 Feb 2019 19:33:43 +0000 (20:33 +0100)
committerEric Kohl <eric.kohl@reactos.org>
Tue, 5 Feb 2019 19:33:43 +0000 (20:33 +0100)
base/applications/sndvol32/tray.c

index 5970adc..59d5874 100644 (file)
@@ -125,15 +125,13 @@ OnTrayInitMixer(
     if (mixerGetControlDetails((HMIXEROBJ)pDialogData->hMixer, &mxcd, MIXER_OBJECTF_HMIXER | MIXER_GETCONTROLDETAILSF_VALUE) != MMSYSERR_NOERROR)
         return;
 
-    pDialogData->maxVolume = pDialogData->volumeInitValues[0].dwValue;
-    pDialogData->maxChannel = 0;
-    for (i = 1; i < pDialogData->volumeChannels; i++)
+    pDialogData->maxVolume = 0;
+    for (i = 0; i < pDialogData->volumeChannels; i++)
     {
+        pDialogData->volumeCurrentValues[i].dwValue = pDialogData->volumeInitValues[i].dwValue;
+
         if (pDialogData->volumeInitValues[i].dwValue > pDialogData->maxVolume)
-        {
             pDialogData->maxVolume = pDialogData->volumeInitValues[i].dwValue;
-            pDialogData->maxChannel = i;
-        }
     }
 
     /* Initialize the volume trackbar */
@@ -209,18 +207,30 @@ OnVScroll(
     LPARAM lParam)
 {
     MIXERCONTROLDETAILS mxcd;
-    DWORD dwPos, dwVolume, i;
+    DWORD dwPosition, dwVolume, i;
 
     switch (LOWORD(wParam))
     {
-        case TB_THUMBTRACK:
+        case TB_THUMBPOSITION:
+            break;
+
+        case TB_ENDTRACK:
+            PlaySound((LPCTSTR)SND_ALIAS_SYSTEMDEFAULT, NULL, SND_ASYNC | SND_ALIAS_ID);
+            break;
+
+        default:
+            dwPosition = VOLUME_MAX - (DWORD)SendDlgItemMessage(hwndDlg, IDC_LINE_SLIDER_VERT, TBM_GETPOS, 0, 0);
 
-            dwPos = VOLUME_MAX - (DWORD)SendDlgItemMessage(hwndDlg, IDC_LINE_SLIDER_VERT, TBM_GETPOS, 0, 0);
-            dwVolume = (dwPos * pDialogData->volumeStep) + pDialogData->volumeMinimum;
+            if (dwPosition == VOLUME_MIN)
+                dwVolume = pDialogData->volumeMinimum;
+            else if (dwPosition == VOLUME_MAX)
+                dwVolume = pDialogData->volumeMaximum;
+            else
+                dwVolume = (dwPosition * pDialogData->volumeStep) + pDialogData->volumeMinimum;
 
             for (i = 0; i < pDialogData->volumeChannels; i++)
             {
-                if (i == pDialogData->maxChannel)
+                if (pDialogData->volumeInitValues[i].dwValue == pDialogData->maxVolume)
                 {
                     pDialogData->volumeCurrentValues[i].dwValue = dwVolume;
                 }
@@ -242,13 +252,6 @@ OnVScroll(
                                    &mxcd,
                                    MIXER_OBJECTF_HMIXER | MIXER_SETCONTROLDETAILSF_VALUE);
             break;
-
-        case TB_ENDTRACK:
-            PlaySound((LPCTSTR)SND_ALIAS_SYSTEMDEFAULT, NULL, SND_ASYNC | SND_ALIAS_ID);
-            break;
-
-        default:
-            break;
     }
 }