mirror of https://github.com/PCSX2/pcsx2.git
Added option to control PCSX2 volume only with volume keys, instead of global windows volume. Release shift, control, and alt on deactivate. Fix for changing skip mode on alt-F4 (Accidentally removed the old fix for it in 0.9.5)
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@747 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
90263a17d6
commit
004d559678
|
@ -576,7 +576,21 @@ int WritePrivateProfileInt(wchar_t *s1, wchar_t *s2, int v, wchar_t *ini) {
|
||||||
return WritePrivateProfileStringW(s1, s2, temp, ini);
|
return WritePrivateProfileStringW(s1, s2, temp, ini);
|
||||||
}
|
}
|
||||||
|
|
||||||
int SaveSettings(wchar_t *file = 0) {
|
void SetVolume(int volume) {
|
||||||
|
if (volume > 100) volume = 100;
|
||||||
|
if (volume < 0) volume = 0;
|
||||||
|
config.volume = volume;
|
||||||
|
unsigned int val = 0xFFFF * volume/100;
|
||||||
|
val = val | (val<<16);
|
||||||
|
for (int i=waveOutGetNumDevs()-1; i>=0; i--) {
|
||||||
|
waveOutSetVolume((HWAVEOUT)i, val);
|
||||||
|
}
|
||||||
|
wchar_t ini[MAX_PATH+20];
|
||||||
|
GetSettingsFileName(ini);
|
||||||
|
WritePrivateProfileInt(L"General Settings", L"Volume", config.volume, ini);
|
||||||
|
}
|
||||||
|
|
||||||
|
int SaveSettings(wchar_t *file=0) {
|
||||||
wchar_t ini[MAX_PATH+20];
|
wchar_t ini[MAX_PATH+20];
|
||||||
|
|
||||||
// Need this either way for saving path.
|
// Need this either way for saving path.
|
||||||
|
@ -620,6 +634,9 @@ int SaveSettings(wchar_t *file = 0) {
|
||||||
|
|
||||||
WritePrivateProfileInt(L"General Settings", L"Save State in Title", config.saveStateTitle, file);
|
WritePrivateProfileInt(L"General Settings", L"Save State in Title", config.saveStateTitle, file);
|
||||||
|
|
||||||
|
WritePrivateProfileInt(L"General Settings", L"Vista Volume", config.vistaVolume, file);
|
||||||
|
WritePrivateProfileInt(L"General Settings", L"Volume", config.volume, file);
|
||||||
|
|
||||||
WritePrivateProfileInt(L"Pad1", L"Guitar", config.guitar[0], file);
|
WritePrivateProfileInt(L"Pad1", L"Guitar", config.guitar[0], file);
|
||||||
WritePrivateProfileInt(L"Pad2", L"Guitar", config.guitar[1], file);
|
WritePrivateProfileInt(L"Pad2", L"Guitar", config.guitar[1], file);
|
||||||
WritePrivateProfileInt(L"Pad1", L"Auto Analog", config.AutoAnalog[0], file);
|
WritePrivateProfileInt(L"Pad1", L"Auto Analog", config.AutoAnalog[0], file);
|
||||||
|
@ -735,6 +752,18 @@ int LoadSettings(int force, wchar_t *file) {
|
||||||
|
|
||||||
config.saveStateTitle = GetPrivateProfileBool(L"General Settings", L"Save State in Title", 1, file);
|
config.saveStateTitle = GetPrivateProfileBool(L"General Settings", L"Save State in Title", 1, file);
|
||||||
|
|
||||||
|
config.vistaVolume = GetPrivateProfileBool(L"General Settings", L"Vista Volume", 1, file);
|
||||||
|
config.volume = GetPrivateProfileInt(L"General Settings", L"Volume", 100, file);
|
||||||
|
OSVERSIONINFO os;
|
||||||
|
os.dwOSVersionInfoSize = sizeof(os);
|
||||||
|
config.osVersion = 0;
|
||||||
|
if (GetVersionEx(&os)) {
|
||||||
|
config.osVersion = os.dwMajorVersion;
|
||||||
|
}
|
||||||
|
if (config.osVersion < 6) config.vistaVolume = 0;
|
||||||
|
if (!config.vistaVolume) config.volume = 100;
|
||||||
|
if (config.vistaVolume) SetVolume(config.volume);
|
||||||
|
|
||||||
if (!InitializeRawInput()) {
|
if (!InitializeRawInput()) {
|
||||||
if (config.keyboardApi == RAW) config.keyboardApi = WM;
|
if (config.keyboardApi == RAW) config.keyboardApi = WM;
|
||||||
if (config.mouseApi == RAW) config.mouseApi = WM;
|
if (config.mouseApi == RAW) config.mouseApi = WM;
|
||||||
|
@ -1517,6 +1546,9 @@ INT_PTR CALLBACK GeneralDialogProc(HWND hWnd, unsigned int msg, WPARAM wParam, L
|
||||||
CheckDlgButton(hWnd, IDC_GH2_HACK, BST_CHECKED * config.GH2);
|
CheckDlgButton(hWnd, IDC_GH2_HACK, BST_CHECKED * config.GH2);
|
||||||
CheckDlgButton(hWnd, IDC_SAVE_STATE_TITLE, BST_CHECKED * config.saveStateTitle);
|
CheckDlgButton(hWnd, IDC_SAVE_STATE_TITLE, BST_CHECKED * config.saveStateTitle);
|
||||||
|
|
||||||
|
CheckDlgButton(hWnd, IDC_VISTA_VOLUME, BST_CHECKED * config.vistaVolume);
|
||||||
|
if (config.osVersion < 6) EnableWindow(GetDlgItem(hWnd, IDC_VISTA_VOLUME), 0);
|
||||||
|
|
||||||
CheckDlgButton(hWnd, IDC_GUITAR1, BST_CHECKED * config.guitar[0]);
|
CheckDlgButton(hWnd, IDC_GUITAR1, BST_CHECKED * config.guitar[0]);
|
||||||
CheckDlgButton(hWnd, IDC_GUITAR2, BST_CHECKED * config.guitar[1]);
|
CheckDlgButton(hWnd, IDC_GUITAR2, BST_CHECKED * config.guitar[1]);
|
||||||
CheckDlgButton(hWnd, IDC_ANALOG_START1, BST_CHECKED * config.AutoAnalog[0]);
|
CheckDlgButton(hWnd, IDC_ANALOG_START1, BST_CHECKED * config.AutoAnalog[0]);
|
||||||
|
@ -1608,6 +1640,13 @@ INT_PTR CALLBACK GeneralDialogProc(HWND hWnd, unsigned int msg, WPARAM wParam, L
|
||||||
config.GH2 = (IsDlgButtonChecked(hWnd, IDC_GH2_HACK) == BST_CHECKED);
|
config.GH2 = (IsDlgButtonChecked(hWnd, IDC_GH2_HACK) == BST_CHECKED);
|
||||||
config.saveStateTitle = (IsDlgButtonChecked(hWnd, IDC_SAVE_STATE_TITLE) == BST_CHECKED);
|
config.saveStateTitle = (IsDlgButtonChecked(hWnd, IDC_SAVE_STATE_TITLE) == BST_CHECKED);
|
||||||
|
|
||||||
|
u8 newVistaVolume = (IsDlgButtonChecked(hWnd, IDC_VISTA_VOLUME) == BST_CHECKED);
|
||||||
|
if (config.vistaVolume != newVistaVolume) {
|
||||||
|
config.vistaVolume = newVistaVolume;
|
||||||
|
SetVolume(100);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
unsigned int needUpdate = 0;
|
unsigned int needUpdate = 0;
|
||||||
unsigned int disablePad1New = (IsDlgButtonChecked(hWnd, IDC_DISABLE_PAD1) == BST_CHECKED);
|
unsigned int disablePad1New = (IsDlgButtonChecked(hWnd, IDC_DISABLE_PAD1) == BST_CHECKED);
|
||||||
unsigned int disablePad2New = (IsDlgButtonChecked(hWnd, IDC_DISABLE_PAD2) == BST_CHECKED);
|
unsigned int disablePad2New = (IsDlgButtonChecked(hWnd, IDC_DISABLE_PAD2) == BST_CHECKED);
|
||||||
|
|
|
@ -38,6 +38,12 @@ public:
|
||||||
|
|
||||||
u8 saveStateTitle;
|
u8 saveStateTitle;
|
||||||
|
|
||||||
|
u8 vistaVolume;
|
||||||
|
int volume;
|
||||||
|
|
||||||
|
// Unlike the others, not a changeable value.
|
||||||
|
DWORD osVersion;
|
||||||
|
|
||||||
wchar_t lastSaveConfigPath[MAX_PATH+1];
|
wchar_t lastSaveConfigPath[MAX_PATH+1];
|
||||||
wchar_t lastSaveConfigFileName[MAX_PATH+1];
|
wchar_t lastSaveConfigFileName[MAX_PATH+1];
|
||||||
};
|
};
|
||||||
|
@ -48,6 +54,8 @@ void UnloadConfigs();
|
||||||
|
|
||||||
void AddIgnore(LPARAM k);
|
void AddIgnore(LPARAM k);
|
||||||
|
|
||||||
|
void SetVolume(int volume);
|
||||||
|
|
||||||
int LoadSettings(int force = 0, wchar_t *file = 0);
|
int LoadSettings(int force = 0, wchar_t *file = 0);
|
||||||
|
|
||||||
void CALLBACK PADconfigure();
|
void CALLBACK PADconfigure();
|
||||||
|
|
|
@ -320,6 +320,7 @@ public:
|
||||||
did->Unacquire();
|
did->Unacquire();
|
||||||
did->Release();
|
did->Release();
|
||||||
ReleaseDirectInput();
|
ReleaseDirectInput();
|
||||||
|
did = 0;
|
||||||
active = 0;
|
active = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -428,7 +428,9 @@ void InputDeviceManager::DisableAllDevices() {
|
||||||
|
|
||||||
void InputDeviceManager::DisableDevice(int index) {
|
void InputDeviceManager::DisableDevice(int index) {
|
||||||
devices[index]->enabled = 0;
|
devices[index]->enabled = 0;
|
||||||
if (devices[index]->active) devices[index]->Deactivate();
|
if (devices[index]->active) {
|
||||||
|
devices[index]->Deactivate();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ForceFeedbackEffectType *Device::GetForcefeedbackEffect(wchar_t *id) {
|
ForceFeedbackEffectType *Device::GetForcefeedbackEffect(wchar_t *id) {
|
||||||
|
|
|
@ -97,6 +97,16 @@ LRESULT CALLBACK IgnoreKeyboardHook(int code, WPARAM wParam, LPARAM lParam) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (config.vistaVolume) {
|
||||||
|
if (key->vkCode == VK_VOLUME_DOWN) {
|
||||||
|
SetVolume(config.volume-3);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (key->vkCode == VK_VOLUME_UP) {
|
||||||
|
SetVolume(config.volume+3);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (wParam == WM_KEYUP || wParam == WM_SYSKEYUP) {
|
else if (wParam == WM_KEYUP || wParam == WM_SYSKEYUP) {
|
||||||
KBDLLHOOKSTRUCT* key = (KBDLLHOOKSTRUCT*) lParam;
|
KBDLLHOOKSTRUCT* key = (KBDLLHOOKSTRUCT*) lParam;
|
||||||
|
|
|
@ -132,10 +132,14 @@ u8 Cap (int i) {
|
||||||
return (u8) i;
|
return (u8) i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RefreshEnabledDevices() enables everything that can potentially
|
||||||
// Just like RefreshEnabledDevices(), but takes into account
|
// be bound to, as well as the "Ignore keyboard" device.
|
||||||
// mouse and focus state and which devices have bindings for
|
//
|
||||||
// enabled pads. Also releases keyboards if window is not focused.
|
// This enables everything that input should be read from while the
|
||||||
|
// emulator is running. Takes into account mouse and focus state
|
||||||
|
// and which devices have bindings for enabled pads. Releases
|
||||||
|
// keyboards if window is not focused. Releases game devices if
|
||||||
|
// background monitoring is not checked.
|
||||||
// And releases games if not focused and config.background is not set.
|
// And releases games if not focused and config.background is not set.
|
||||||
void UpdateEnabledDevices(int updateList = 0) {
|
void UpdateEnabledDevices(int updateList = 0) {
|
||||||
// Enable all devices I might want. Can ignore the rest.
|
// Enable all devices I might want. Can ignore the rest.
|
||||||
|
@ -156,7 +160,7 @@ void UpdateEnabledDevices(int updateList = 0) {
|
||||||
|
|
||||||
// Disable ignore keyboard if don't have focus or there are no keys to ignore.
|
// Disable ignore keyboard if don't have focus or there are no keys to ignore.
|
||||||
if (dev->api == IGNORE_KEYBOARD) {
|
if (dev->api == IGNORE_KEYBOARD) {
|
||||||
if (config.keyboardApi == NO_API || !activeWindow || !dev->pads[0].numBindings) {
|
if ((!config.vistaVolume && (config.keyboardApi == NO_API || !dev->pads[0].numBindings)) || !activeWindow) {
|
||||||
dm->DisableDevice(i);
|
dm->DisableDevice(i);
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
|
@ -629,6 +633,8 @@ struct QueryInfo {
|
||||||
|
|
||||||
int saveStateIndex = 0;
|
int saveStateIndex = 0;
|
||||||
|
|
||||||
|
// Implements a couple of the hacks, also responsible for monitoring device addition/removal and focus
|
||||||
|
// changes.
|
||||||
ExtraWndProcResult HackWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *output) {
|
ExtraWndProcResult HackWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *output) {
|
||||||
switch (uMsg) {
|
switch (uMsg) {
|
||||||
case WM_SETTEXT:
|
case WM_SETTEXT:
|
||||||
|
@ -659,6 +665,12 @@ ExtraWndProcResult HackWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPara
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WM_ACTIVATEAPP:
|
case WM_ACTIVATEAPP:
|
||||||
|
// Release any buttons PCSX2 may think are down when
|
||||||
|
// losing/gaining focus.
|
||||||
|
QueueKeyEvent(VK_SHIFT, KEYRELEASE);
|
||||||
|
QueueKeyEvent(VK_MENU, KEYRELEASE);
|
||||||
|
QueueKeyEvent(VK_CONTROL, KEYRELEASE);
|
||||||
|
|
||||||
// Need to do this when not reading input from gs thread.
|
// Need to do this when not reading input from gs thread.
|
||||||
// Checking for that case not worth the effort.
|
// Checking for that case not worth the effort.
|
||||||
EnterCriticalSection(&readInputCriticalSection);
|
EnterCriticalSection(&readInputCriticalSection);
|
||||||
|
@ -1112,6 +1124,7 @@ keyEvent* CALLBACK PADkeyEvent() {
|
||||||
Update(2);
|
Update(2);
|
||||||
}
|
}
|
||||||
static char shiftDown = 0;
|
static char shiftDown = 0;
|
||||||
|
static char altDown = 0;
|
||||||
static keyEvent ev;
|
static keyEvent ev;
|
||||||
if (!GetQueuedKeyEvent(&ev)) return 0;
|
if (!GetQueuedKeyEvent(&ev)) return 0;
|
||||||
if ((ev.key == VK_ESCAPE || (int)ev.key == -2) && ev.evt == KEYPRESS && config.escapeFullscreenHack) {
|
if ((ev.key == VK_ESCAPE || (int)ev.key == -2) && ev.evt == KEYPRESS && config.escapeFullscreenHack) {
|
||||||
|
@ -1145,18 +1158,21 @@ keyEvent* CALLBACK PADkeyEvent() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// So don't change skip mode on alt-F4.
|
||||||
|
if (ev.key == VK_F4 && altDown) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (ev.key == VK_LSHIFT || ev.key == VK_RSHIFT || ev.key == VK_SHIFT) {
|
if (ev.key == VK_LSHIFT || ev.key == VK_RSHIFT || ev.key == VK_SHIFT) {
|
||||||
ev.key = VK_SHIFT;
|
ev.key = VK_SHIFT;
|
||||||
if (ev.evt == KEYPRESS)
|
shiftDown = (ev.evt == KEYPRESS);
|
||||||
shiftDown = 1;
|
|
||||||
else
|
|
||||||
shiftDown = 0;
|
|
||||||
}
|
}
|
||||||
else if (ev.key == VK_LCONTROL || ev.key == VK_RCONTROL) {
|
else if (ev.key == VK_LCONTROL || ev.key == VK_RCONTROL) {
|
||||||
ev.key = VK_CONTROL;
|
ev.key = VK_CONTROL;
|
||||||
}
|
}
|
||||||
else if (ev.key == VK_LMENU || ev.key == VK_RMENU) {
|
else if (ev.key == VK_LMENU || ev.key == VK_RMENU || ev.key == VK_SHIFT) {
|
||||||
ev.key = VK_MENU;
|
ev.key = VK_MENU;
|
||||||
|
altDown = (ev.evt == KEYPRESS);
|
||||||
}
|
}
|
||||||
return &ev;
|
return &ev;
|
||||||
}
|
}
|
||||||
|
|
|
@ -265,12 +265,13 @@ BEGIN
|
||||||
CONTROL "Send escape on window close",IDC_CLOSE_HACK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,224,223,113,10
|
CONTROL "Send escape on window close",IDC_CLOSE_HACK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,224,223,113,10
|
||||||
CONTROL "Exit emulator on window close",IDC_CLOSE_HACK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,224,235,112,10
|
CONTROL "Exit emulator on window close",IDC_CLOSE_HACK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,224,235,112,10
|
||||||
CONTROL "Disable screensaver",IDC_DISABLE_SCREENSAVER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,224,247,80,10
|
CONTROL "Disable screensaver",IDC_DISABLE_SCREENSAVER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,224,247,80,10
|
||||||
CONTROL "Safe fullscreen exit on escape (For GSDX+DX10)",IDC_ESCAPE_FULLSCREEN_HACK,
|
CONTROL "Safe fullscreen exit on escape",IDC_ESCAPE_FULLSCREEN_HACK,
|
||||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,224,259,171,10
|
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,224,259,112,10
|
||||||
CONTROL "Use GS thread (Recommended)",IDC_GS_THREAD_INPUT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,224,271,116,10
|
CONTROL "Use GS thread (Recommended)",IDC_GS_THREAD_INPUT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,224,271,116,10
|
||||||
CONTROL "Always hide cursor",IDC_FORCE_HIDE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,336,223,71,10
|
CONTROL "Always hide cursor",IDC_FORCE_HIDE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,336,223,71,10
|
||||||
CONTROL "Save state # in title",IDC_SAVE_STATE_TITLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,336,235,79,10
|
CONTROL "Save state # in title",IDC_SAVE_STATE_TITLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,336,235,79,10
|
||||||
CONTROL "Guitar Hero 2 Hack",IDC_GH2_HACK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,336,247,76,10
|
CONTROL "App Local Volume",IDC_VISTA_VOLUME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,336,247,71,10
|
||||||
|
CONTROL "Guitar Hero 2 Hack",IDC_GH2_HACK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,336,259,76,10
|
||||||
GROUPBOX "Debugging",IDC_STATIC,216,285,79,25
|
GROUPBOX "Debugging",IDC_STATIC,216,285,79,25
|
||||||
CONTROL "Enable logging",IDC_DEBUG_FILE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,223,296,63,10
|
CONTROL "Enable logging",IDC_DEBUG_FILE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,223,296,63,10
|
||||||
PUSHBUTTON "Load",ID_LOAD,313,295,48,15
|
PUSHBUTTON "Load",ID_LOAD,313,295,48,15
|
||||||
|
|
|
@ -42,6 +42,8 @@
|
||||||
#define IDC_FORCE_HIDE2 1125
|
#define IDC_FORCE_HIDE2 1125
|
||||||
#define IDC_GH2_HACK 1125
|
#define IDC_GH2_HACK 1125
|
||||||
#define IDC_FORCEFEEDBACK_HACK1 1126
|
#define IDC_FORCEFEEDBACK_HACK1 1126
|
||||||
|
#define IDC_GH2_HACK2 1126
|
||||||
|
#define IDC_VISTA_VOLUME 1126
|
||||||
#define IDC_DISABLE_SCREENSAVER4 1127
|
#define IDC_DISABLE_SCREENSAVER4 1127
|
||||||
#define IDC_FORCEFEEDBACK_HACK2 1127
|
#define IDC_FORCEFEEDBACK_HACK2 1127
|
||||||
#define IDC_GS_THREAD_INPUT 1128
|
#define IDC_GS_THREAD_INPUT 1128
|
||||||
|
|
Loading…
Reference in New Issue