win32: Shaders: Save parameters and restore on cancel.

Also, change "Parameters" button to "Parameters..." to indicate
it opens a dialog box.

Adjust the spacing and remove the message about custom shader files.
This commit is contained in:
Brandon Wright 2019-02-02 19:08:19 -06:00
parent b46a954874
commit 28d668fff7
4 changed files with 40 additions and 25 deletions

View File

@ -164,49 +164,59 @@ CShaderParamDlg::~CShaderParamDlg()
bool CShaderParamDlg::show() bool CShaderParamDlg::show()
{ {
saved_parameters = shader.param;
if(DialogBoxParam(GUI.hInstance, MAKEINTRESOURCE(IDD_DIALOG_SHADER_PARAMS), GUI.hWnd, DlgShaderParams, (LPARAM)this) == IDOK) if(DialogBoxParam(GUI.hInstance, MAKEINTRESOURCE(IDD_DIALOG_SHADER_PARAMS), GUI.hWnd, DlgShaderParams, (LPARAM)this) == IDOK)
{ {
save_custom_shader(); save_custom_shader();
return true; return true;
} }
shader.param = saved_parameters;
WinRefreshDisplay();
return false; return false;
} }
void CShaderParamDlg::createContent(HWND hDlg) void CShaderParamDlg::createContent(HWND hDlg)
{ {
#define LEFT_OFFSET 10
#define TOP_OFFSET 10
#define HORIZONTAL_SPACE 20
#define VERTICAL_SPACE 15
#define DESC_WIDTH_CHARS 50
#define EDIT_WIDTH_CHARS 10
HWND parent = GetDlgItem(hDlg, IDC_STATIC_CONTAINER); HWND parent = GetDlgItem(hDlg, IDC_STATIC_CONTAINER);
// override static wndproc so we can handle the up/down messages, save original proc so we can forward everything else // override static wndproc so we can handle the up/down messages, save original proc so we can forward everything else
oldStaticProc = (WNDPROC)GetWindowLongPtr(parent, GWLP_WNDPROC); oldStaticProc = (WNDPROC)GetWindowLongPtr(parent, GWLP_WNDPROC);
SetWindowLongPtr(parent, GWLP_WNDPROC, (LONG_PTR)WndProcContainerStatic); SetWindowLongPtr(parent, GWLP_WNDPROC, (LONG_PTR)WndProcContainerStatic);
SetWindowLongPtr(parent, GWLP_USERDATA, (LONG_PTR)this); SetWindowLongPtr(parent, GWLP_USERDATA, (LONG_PTR)this);
unsigned int top = TOP_OFFSET; RECT clientRect;
GetClientRect(parent, &clientRect);
const int HORIZONTAL_MARGIN = 10;
const int VERTICAL_MARGIN = 10;
const int HORIZONTAL_SPACE = 20;
const int VERTICAL_SPACE = 5;
unsigned int desc_left = HORIZONTAL_MARGIN;
unsigned int desc_width = (clientRect.right - clientRect.left) * 3 / 4 - desc_left - HORIZONTAL_SPACE / 2;
unsigned int edit_left = desc_left + desc_width + HORIZONTAL_SPACE;
unsigned int edit_width = clientRect.right - clientRect.left - edit_left - HORIZONTAL_MARGIN;
unsigned int top = VERTICAL_MARGIN;
for(int i = 0; i < shader.param.size(); i++) { for(int i = 0; i < shader.param.size(); i++) {
GLSLParam &p = shader.param[i]; GLSLParam &p = shader.param[i];
TCHAR desc[270]; TCHAR desc[270];
_stprintf(desc, TEXT("%s [%g-%g]"), (TCHAR*)_tFromChar(p.name), p.min, p.max); _stprintf(desc, TEXT("%s [%g-%g]"), (TCHAR*)_tFromChar(p.name), p.min, p.max);
HWND item = CreateWindow(TEXT("STATIC"), desc, SS_LEFTNOWORDWRAP | WS_VISIBLE | WS_CHILD, LEFT_OFFSET, (INT)(top + avgCharHeight * 0.2), DESC_WIDTH_CHARS * avgCharWidth, avgCharHeight, parent, (HMENU)(UINT_PTR)(IDC_PARAMS_START_STATIC + i), GUI.hInstance, NULL); HWND item = CreateWindow(TEXT("STATIC"), desc, SS_LEFTNOWORDWRAP | WS_VISIBLE | WS_CHILD, desc_left, (INT)(top + avgCharHeight * 0.3), desc_width, avgCharHeight, parent, (HMENU)(UINT_PTR)(IDC_PARAMS_START_STATIC + i), GUI.hInstance, NULL);
SendMessage(item, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(FALSE, 0)); SendMessage(item, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(FALSE, 0));
TCHAR val[100]; TCHAR val[100];
_stprintf(val, TEXT("%g"), p.val); _stprintf(val, TEXT("%g"), p.val);
unsigned int edit_left = LEFT_OFFSET + DESC_WIDTH_CHARS * avgCharWidth + HORIZONTAL_SPACE; item = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("EDIT"), val, ES_AUTOHSCROLL | WS_VISIBLE | WS_CHILD | WS_TABSTOP, edit_left , top, edit_width, (INT)(avgCharHeight * 1.7), parent, (HMENU)(UINT_PTR)(IDC_PARAMS_START_EDIT + i), GUI.hInstance, NULL);
item = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("EDIT"), val, ES_AUTOHSCROLL | WS_VISIBLE | WS_CHILD | WS_TABSTOP, edit_left , top, EDIT_WIDTH_CHARS * avgCharWidth, (INT)(avgCharHeight * 1.7), parent, (HMENU)(UINT_PTR)(IDC_PARAMS_START_EDIT + i), GUI.hInstance, NULL);
SendMessage(item, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(FALSE, 0)); SendMessage(item, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(FALSE, 0));
item = CreateWindow(UPDOWN_CLASS, NULL, WS_CHILDWINDOW | WS_VISIBLE | UDS_AUTOBUDDY | UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_HOTTRACK, 0, 0, 0, 0, parent, (HMENU)(UINT_PTR)(IDC_PARAMS_START_UPDOWN + i), GUI.hInstance, NULL); item = CreateWindow(UPDOWN_CLASS, NULL, WS_CHILDWINDOW | WS_VISIBLE | UDS_AUTOBUDDY | UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_HOTTRACK, 0, 0, 0, 0, parent, (HMENU)(UINT_PTR)(IDC_PARAMS_START_UPDOWN + i), GUI.hInstance, NULL);
SendMessage(item, UDM_SETRANGE, 0, MAKELONG(10, -10)); // we don't use this range, simply set it so the up arrow is positive and down arrow negative SendMessage(item, UDM_SETRANGE, 0, MAKELONG(10, -10)); // we don't use this range, simply set it so the up arrow is positive and down arrow negative
top += avgCharHeight + VERTICAL_SPACE; top += (INT)(avgCharHeight * 1.7 + VERTICAL_SPACE);
} }
RECT clientRect, windowRect; RECT windowRect;
GetClientRect(parent, &clientRect); GetClientRect(parent, &clientRect);
HWND scrollbar = GetDlgItem(hDlg,IDC_SCROLLBAR_PARAMS); HWND scrollbar = GetDlgItem(hDlg,IDC_SCROLLBAR_PARAMS);
SCROLLINFO si = { 0 }; SCROLLINFO si = { 0 };

View File

@ -20,6 +20,7 @@ private:
unsigned int avgCharWidth; unsigned int avgCharWidth;
unsigned int avgCharHeight; unsigned int avgCharHeight;
int scrollpos; int scrollpos;
std::vector<GLSLParam> saved_parameters;
WNDPROC oldStaticProc; WNDPROC oldStaticProc;

View File

@ -540,9 +540,9 @@
// //
#ifdef APSTUDIO_INVOKED #ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS #ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 161 #define _APS_NEXT_RESOURCE_VALUE 162
#define _APS_NEXT_COMMAND_VALUE 40178 #define _APS_NEXT_COMMAND_VALUE 40178
#define _APS_NEXT_CONTROL_VALUE 3030 #define _APS_NEXT_CONTROL_VALUE 3032
#define _APS_NEXT_SYMED_VALUE 101 #define _APS_NEXT_SYMED_VALUE 101
#endif #endif
#endif #endif

View File

@ -222,7 +222,7 @@ BEGIN
CONTROL "Reduce Input Lag",IDC_REDUCEINPUTLAG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,118,76,10 CONTROL "Reduce Input Lag",IDC_REDUCEINPUTLAG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,118,76,10
CONTROL "Scale messages with EPX if possible",IDC_MESSAGES_SCALE, CONTROL "Scale messages with EPX if possible",IDC_MESSAGES_SCALE,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,162,153,10 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,162,153,10
PUSHBUTTON "Parameters",IDC_SHADER_GLSL_PARAMETERS,112,222,49,12,WS_DISABLED PUSHBUTTON "Parameters...",IDC_SHADER_GLSL_PARAMETERS,112,222,60,12,WS_DISABLED
END END
IDD_CHEATER DIALOGEX 0, 0, 375, 194 IDD_CHEATER DIALOGEX 0, 0, 375, 194
@ -540,17 +540,16 @@ BEGIN
COMBOBOX IDC_HOSTNAME,60,5,110,40,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_HOSTNAME,60,5,110,40,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
END END
IDD_DIALOG_SHADER_PARAMS DIALOGEX 0, 0, 309, 205 IDD_DIALOG_SHADER_PARAMS DIALOGEX 0, 0, 306, 204
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Shader Parameters" CAPTION "Shader Parameters"
FONT 8, "MS Shell Dlg", 400, 0, 0x1 FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN BEGIN
DEFPUSHBUTTON "OK",IDOK,144,184,50,14 PUSHBUTTON "OK",IDOK,144,186,50,14
PUSHBUTTON "Cancel",IDCANCEL,198,184,50,14 PUSHBUTTON "Cancel",IDCANCEL,198,186,50,14
LTEXT "",IDC_STATIC_CONTAINER,7,35,282,142,WS_BORDER SCROLLBAR IDC_SCROLLBAR_PARAMS,288,6,12,174,SBS_VERT
SCROLLBAR IDC_SCROLLBAR_PARAMS,289,35,12,142,SBS_VERT DEFPUSHBUTTON "Apply",IDAPPLY,252,186,50,14
PUSHBUTTON "Apply",IDAPPLY,253,184,50,14 LTEXT "",IDC_STATIC_CONTAINER,6,6,282,174,WS_BORDER
LTEXT "Changing these parameters will create a new ""custom_shader_params.glslp / .slangp"" file in the snes9x directory that contains the parameters and references to your currently loaded shader. This will then be used as your current OpenGL shader.",IDC_STATIC,7,7,295,28
END END
IDD_DIALOG_XAUDIO2_INIT_ERROR DIALOGEX 0, 0, 277, 92 IDD_DIALOG_XAUDIO2_INIT_ERROR DIALOGEX 0, 0, 277, 92
@ -701,9 +700,9 @@ BEGIN
IDD_DIALOG_SHADER_PARAMS, DIALOG IDD_DIALOG_SHADER_PARAMS, DIALOG
BEGIN BEGIN
LEFTMARGIN, 7 LEFTMARGIN, 7
RIGHTMARGIN, 302 RIGHTMARGIN, 299
TOPMARGIN, 7 TOPMARGIN, 7
BOTTOMMARGIN, 198 BOTTOMMARGIN, 197
END END
IDD_DIALOG_XAUDIO2_INIT_ERROR, DIALOG IDD_DIALOG_XAUDIO2_INIT_ERROR, DIALOG
@ -757,6 +756,11 @@ BEGIN
0 0
END END
IDD_DIALOG_SHADER_PARAMS AFX_DIALOG_LAYOUT
BEGIN
0
END
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// //