mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-22 20:21:26 +00:00
added render backend selection to the new IWAD picker.
Unlike VkDoom we still need this.
This commit is contained in:
parent
15e9c95419
commit
a2a7667442
5 changed files with 78 additions and 135 deletions
|
@ -16,6 +16,8 @@ public:
|
||||||
void Toggle();
|
void Toggle();
|
||||||
|
|
||||||
double GetPreferredHeight() const;
|
double GetPreferredHeight() const;
|
||||||
|
std::function<void(bool)> FuncChanged;
|
||||||
|
void SetRadioStyle(bool on) { radiostyle = on; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void OnPaint(Canvas* canvas) override;
|
void OnPaint(Canvas* canvas) override;
|
||||||
|
@ -27,5 +29,7 @@ protected:
|
||||||
private:
|
private:
|
||||||
std::string text;
|
std::string text;
|
||||||
bool checked = false;
|
bool checked = false;
|
||||||
|
bool radiostyle = false;
|
||||||
bool mouseDownActive = false;
|
bool mouseDownActive = false;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -84,6 +84,8 @@ void CheckboxLabel::OnKeyUp(EInputKey key)
|
||||||
|
|
||||||
void CheckboxLabel::Toggle()
|
void CheckboxLabel::Toggle()
|
||||||
{
|
{
|
||||||
checked = !checked;
|
bool oldchecked = checked;
|
||||||
|
checked = radiostyle? true : !checked;
|
||||||
Update();
|
Update();
|
||||||
|
if (checked != oldchecked && FuncChanged) FuncChanged(checked);
|
||||||
}
|
}
|
||||||
|
|
|
@ -344,131 +344,6 @@ static void SetQueryIWad(HWND dialog)
|
||||||
queryiwad = query;
|
queryiwad = query;
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
|
||||||
//
|
|
||||||
// IWADBoxCallback
|
|
||||||
//
|
|
||||||
// Dialog proc for the IWAD selector.
|
|
||||||
//
|
|
||||||
//==========================================================================
|
|
||||||
static int* pAutoloadflags;
|
|
||||||
|
|
||||||
BOOL CALLBACK IWADBoxCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|
||||||
{
|
|
||||||
int& flags = *pAutoloadflags;;
|
|
||||||
|
|
||||||
HWND ctrl;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
switch (message)
|
|
||||||
{
|
|
||||||
case WM_INITDIALOG:
|
|
||||||
// Add our program name to the window title
|
|
||||||
{
|
|
||||||
WCHAR label[256];
|
|
||||||
FString newlabel;
|
|
||||||
|
|
||||||
GetWindowTextW(hDlg, label, countof(label));
|
|
||||||
FString alabel(label);
|
|
||||||
newlabel.Format(GAMENAME " %s: %s", GetVersionString(), alabel.GetChars());
|
|
||||||
auto wlabel = newlabel.WideString();
|
|
||||||
SetWindowTextW(hDlg, wlabel.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
// [SP] Upstreamed from Zandronum
|
|
||||||
char szString[256];
|
|
||||||
|
|
||||||
// Check the current video settings.
|
|
||||||
SendDlgItemMessage( hDlg, IDC_WELCOME_FULLSCREEN, BM_SETCHECK, vid_fullscreen ? BST_CHECKED : BST_UNCHECKED, 0 );
|
|
||||||
switch (vid_preferbackend)
|
|
||||||
{
|
|
||||||
case 1:
|
|
||||||
SendDlgItemMessage( hDlg, IDC_WELCOME_VULKAN2, BM_SETCHECK, BST_CHECKED, 0 );
|
|
||||||
break;
|
|
||||||
#ifdef HAVE_GLES2
|
|
||||||
case 2:
|
|
||||||
case 3:
|
|
||||||
SendDlgItemMessage( hDlg, IDC_WELCOME_VULKAN4, BM_SETCHECK, BST_CHECKED, 0 );
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
default:
|
|
||||||
SendDlgItemMessage( hDlg, IDC_WELCOME_VULKAN1, BM_SETCHECK, BST_CHECKED, 0 );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// [SP] This is our's
|
|
||||||
SendDlgItemMessage( hDlg, IDC_WELCOME_NOAUTOLOAD, BM_SETCHECK, (flags & 1) ? BST_CHECKED : BST_UNCHECKED, 0);
|
|
||||||
SendDlgItemMessage( hDlg, IDC_WELCOME_LIGHTS, BM_SETCHECK, (flags & 2) ? BST_CHECKED : BST_UNCHECKED, 0 );
|
|
||||||
SendDlgItemMessage( hDlg, IDC_WELCOME_BRIGHTMAPS, BM_SETCHECK, (flags & 4) ? BST_CHECKED : BST_UNCHECKED, 0 );
|
|
||||||
SendDlgItemMessage( hDlg, IDC_WELCOME_WIDESCREEN, BM_SETCHECK, (flags & 8) ? BST_CHECKED : BST_UNCHECKED, 0 );
|
|
||||||
|
|
||||||
// Set up our version string.
|
|
||||||
snprintf(szString, sizeof(szString), "Version %s.", GetVersionString());
|
|
||||||
SetDlgItemTextA (hDlg, IDC_WELCOME_VERSION, szString);
|
|
||||||
|
|
||||||
// Populate the list with all the IWADs found
|
|
||||||
ctrl = GetDlgItem(hDlg, IDC_IWADLIST);
|
|
||||||
for (i = 0; i < NumWads; i++)
|
|
||||||
{
|
|
||||||
const char *filepart = strrchr(WadList[i].Path.GetChars(), '/');
|
|
||||||
if (filepart == NULL)
|
|
||||||
filepart = WadList[i].Path.GetChars();
|
|
||||||
else
|
|
||||||
filepart++;
|
|
||||||
|
|
||||||
FString work;
|
|
||||||
if (*filepart) work.Format("%s (%s)", WadList[i].Name.GetChars(), filepart);
|
|
||||||
else work = WadList[i].Name.GetChars();
|
|
||||||
std::wstring wide = work.WideString();
|
|
||||||
SendMessage(ctrl, LB_ADDSTRING, 0, (LPARAM)wide.c_str());
|
|
||||||
SendMessage(ctrl, LB_SETITEMDATA, i, (LPARAM)i);
|
|
||||||
}
|
|
||||||
SendMessage(ctrl, LB_SETCURSEL, DefaultWad, 0);
|
|
||||||
SetFocus(ctrl);
|
|
||||||
// Set the state of the "Don't ask me again" checkbox
|
|
||||||
ctrl = GetDlgItem(hDlg, IDC_DONTASKIWAD);
|
|
||||||
SendMessage(ctrl, BM_SETCHECK, queryiwad ? BST_UNCHECKED : BST_CHECKED, 0);
|
|
||||||
// Make sure the dialog is in front. If SHIFT was pressed to force it visible,
|
|
||||||
// then the other window will normally be on top.
|
|
||||||
SetForegroundWindow(hDlg);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case WM_COMMAND:
|
|
||||||
if (LOWORD(wParam) == IDCANCEL)
|
|
||||||
{
|
|
||||||
EndDialog (hDlg, -1);
|
|
||||||
}
|
|
||||||
else if (LOWORD(wParam) == IDOK ||
|
|
||||||
(LOWORD(wParam) == IDC_IWADLIST && HIWORD(wParam) == LBN_DBLCLK))
|
|
||||||
{
|
|
||||||
SetQueryIWad(hDlg);
|
|
||||||
// [SP] Upstreamed from Zandronum
|
|
||||||
vid_fullscreen = SendDlgItemMessage( hDlg, IDC_WELCOME_FULLSCREEN, BM_GETCHECK, 0, 0 ) == BST_CHECKED;
|
|
||||||
#ifdef HAVE_GLES2
|
|
||||||
if (SendDlgItemMessage(hDlg, IDC_WELCOME_VULKAN4, BM_GETCHECK, 0, 0) == BST_CHECKED)
|
|
||||||
vid_preferbackend = 2;
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
if (SendDlgItemMessage(hDlg, IDC_WELCOME_VULKAN2, BM_GETCHECK, 0, 0) == BST_CHECKED)
|
|
||||||
vid_preferbackend = 1;
|
|
||||||
else if (SendDlgItemMessage(hDlg, IDC_WELCOME_VULKAN1, BM_GETCHECK, 0, 0) == BST_CHECKED)
|
|
||||||
vid_preferbackend = 0;
|
|
||||||
|
|
||||||
// [SP] This is our's.
|
|
||||||
flags = 0;
|
|
||||||
if (SendDlgItemMessage(hDlg, IDC_WELCOME_NOAUTOLOAD, BM_GETCHECK, 0, 0) == BST_CHECKED) flags |= 1;
|
|
||||||
if (SendDlgItemMessage(hDlg, IDC_WELCOME_LIGHTS, BM_GETCHECK, 0, 0) == BST_CHECKED) flags |= 2;
|
|
||||||
if (SendDlgItemMessage(hDlg, IDC_WELCOME_BRIGHTMAPS, BM_GETCHECK, 0, 0) == BST_CHECKED) flags |= 4;
|
|
||||||
if (SendDlgItemMessage(hDlg, IDC_WELCOME_WIDESCREEN, BM_GETCHECK, 0, 0) == BST_CHECKED) flags |= 8;
|
|
||||||
ctrl = GetDlgItem (hDlg, IDC_IWADLIST);
|
|
||||||
EndDialog(hDlg, SendMessage (ctrl, LB_GETCURSEL, 0, 0));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// I_PickIWad
|
// I_PickIWad
|
||||||
|
@ -480,7 +355,6 @@ BOOL CALLBACK IWADBoxCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
int I_PickIWad(WadStuff *wads, int numwads, bool showwin, int defaultiwad, int& autoloadflags)
|
int I_PickIWad(WadStuff *wads, int numwads, bool showwin, int defaultiwad, int& autoloadflags)
|
||||||
{
|
{
|
||||||
int vkey;
|
int vkey;
|
||||||
pAutoloadflags = &autoloadflags;
|
|
||||||
if (stricmp(queryiwad_key, "shift") == 0)
|
if (stricmp(queryiwad_key, "shift") == 0)
|
||||||
{
|
{
|
||||||
vkey = VK_SHIFT;
|
vkey = VK_SHIFT;
|
||||||
|
@ -495,14 +369,6 @@ int I_PickIWad(WadStuff *wads, int numwads, bool showwin, int defaultiwad, int&
|
||||||
}
|
}
|
||||||
if (showwin || (vkey != 0 && GetAsyncKeyState(vkey)))
|
if (showwin || (vkey != 0 && GetAsyncKeyState(vkey)))
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
WadList = wads;
|
|
||||||
NumWads = numwads;
|
|
||||||
DefaultWad = defaultiwad;
|
|
||||||
|
|
||||||
return (int)DialogBox(g_hInst, MAKEINTRESOURCE(IDD_IWADDIALOG),
|
|
||||||
(HWND)mainwindow.GetHandle(), (DLGPROC)IWADBoxCallback);
|
|
||||||
*/
|
|
||||||
return LauncherWindow::ExecModal(wads, numwads, defaultiwad, &autoloadflags);
|
return LauncherWindow::ExecModal(wads, numwads, defaultiwad, &autoloadflags);
|
||||||
}
|
}
|
||||||
return defaultiwad;
|
return defaultiwad;
|
||||||
|
|
|
@ -12,6 +12,10 @@
|
||||||
#include <zwidget/widgets/checkboxlabel/checkboxlabel.h>
|
#include <zwidget/widgets/checkboxlabel/checkboxlabel.h>
|
||||||
#include <zwidget/widgets/lineedit/lineedit.h>
|
#include <zwidget/widgets/lineedit/lineedit.h>
|
||||||
|
|
||||||
|
#ifdef RENDER_BACKENDS
|
||||||
|
EXTERN_CVAR(Int, vid_preferbackend);
|
||||||
|
#endif
|
||||||
|
|
||||||
EXTERN_CVAR(Bool, queryiwad);
|
EXTERN_CVAR(Bool, queryiwad);
|
||||||
|
|
||||||
int LauncherWindow::ExecModal(WadStuff* wads, int numwads, int defaultiwad, int* autoloadflags)
|
int LauncherWindow::ExecModal(WadStuff* wads, int numwads, int defaultiwad, int* autoloadflags)
|
||||||
|
@ -73,6 +77,17 @@ LauncherWindow::LauncherWindow(WadStuff* wads, int numwads, int defaultiwad, int
|
||||||
WidescreenCheckbox->SetText("Widescreen");
|
WidescreenCheckbox->SetText("Widescreen");
|
||||||
ParametersLabel->SetText("Additional Parameters:");
|
ParametersLabel->SetText("Additional Parameters:");
|
||||||
|
|
||||||
|
#ifdef RENDER_BACKENDS
|
||||||
|
BackendLabel = new TextLabel(this);
|
||||||
|
VulkanCheckbox = new CheckboxLabel(this);
|
||||||
|
OpenGLCheckbox = new CheckboxLabel(this);
|
||||||
|
GLESCheckbox = new CheckboxLabel(this);
|
||||||
|
BackendLabel->SetText("Render Backend");
|
||||||
|
VulkanCheckbox->SetText("Vulkan");
|
||||||
|
OpenGLCheckbox->SetText("OpenGL");
|
||||||
|
GLESCheckbox->SetText("OpenGL ES");
|
||||||
|
#endif
|
||||||
|
|
||||||
FString welcomeText, versionText;
|
FString welcomeText, versionText;
|
||||||
welcomeText.Format("Welcome to %s!", GAMENAME);
|
welcomeText.Format("Welcome to %s!", GAMENAME);
|
||||||
versionText.Format("Version %s.", GetVersionString());
|
versionText.Format("Version %s.", GetVersionString());
|
||||||
|
@ -88,6 +103,27 @@ LauncherWindow::LauncherWindow(WadStuff* wads, int numwads, int defaultiwad, int
|
||||||
BrightmapsCheckbox->SetChecked(flags & 4);
|
BrightmapsCheckbox->SetChecked(flags & 4);
|
||||||
WidescreenCheckbox->SetChecked(flags & 8);
|
WidescreenCheckbox->SetChecked(flags & 8);
|
||||||
|
|
||||||
|
#ifdef RENDER_BACKENDS
|
||||||
|
OpenGLCheckbox->SetRadioStyle(true);
|
||||||
|
VulkanCheckbox->SetRadioStyle(true);
|
||||||
|
GLESCheckbox->SetRadioStyle(true);
|
||||||
|
OpenGLCheckbox->FuncChanged = [this](bool on) { if (on) { VulkanCheckbox->SetChecked(false); GLESCheckbox->SetChecked(false); }};
|
||||||
|
VulkanCheckbox->FuncChanged = [this](bool on) { if (on) { OpenGLCheckbox->SetChecked(false); GLESCheckbox->SetChecked(false); }};
|
||||||
|
GLESCheckbox->FuncChanged = [this](bool on) { if (on) { VulkanCheckbox->SetChecked(false); OpenGLCheckbox->SetChecked(false); }};
|
||||||
|
switch (vid_preferbackend)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
OpenGLCheckbox->SetChecked(true);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
VulkanCheckbox->SetChecked(true);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
GLESCheckbox->SetChecked(true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int i = 0; i < numwads; i++)
|
for (int i = 0; i < numwads; i++)
|
||||||
{
|
{
|
||||||
const char* filepart = strrchr(wads[i].Path.GetChars(), '/');
|
const char* filepart = strrchr(wads[i].Path.GetChars(), '/');
|
||||||
|
@ -125,6 +161,14 @@ void LauncherWindow::OnPlayButtonClicked()
|
||||||
if (WidescreenCheckbox->GetChecked()) flags |= 8;
|
if (WidescreenCheckbox->GetChecked()) flags |= 8;
|
||||||
*AutoloadFlags = flags;
|
*AutoloadFlags = flags;
|
||||||
|
|
||||||
|
#ifdef RENDER_BACKENDS
|
||||||
|
int v = 1;
|
||||||
|
if (OpenGLCheckbox->GetChecked()) v = 0;
|
||||||
|
else if (VulkanCheckbox->GetChecked()) v = 1;
|
||||||
|
else if (GLESCheckbox->GetChecked()) v = 2;
|
||||||
|
if (v != vid_preferbackend) vid_preferbackend = v;
|
||||||
|
#endif
|
||||||
|
|
||||||
std::string extraargs = ParametersEdit->GetText();
|
std::string extraargs = ParametersEdit->GetText();
|
||||||
if (!extraargs.empty())
|
if (!extraargs.empty())
|
||||||
{
|
{
|
||||||
|
@ -185,6 +229,24 @@ void LauncherWindow::OnGeometryChanged()
|
||||||
y -= 10.0;
|
y -= 10.0;
|
||||||
|
|
||||||
double panelWidth = 150.0;
|
double panelWidth = 150.0;
|
||||||
|
|
||||||
|
#ifdef RENDER_BACKENDS
|
||||||
|
auto yy = y;
|
||||||
|
y -= GLESCheckbox->GetPreferredHeight();
|
||||||
|
double x = GetWidth() / 2 - panelWidth / 2;
|
||||||
|
GLESCheckbox->SetFrameGeometry(x, y, 190.0, GLESCheckbox->GetPreferredHeight());
|
||||||
|
|
||||||
|
y -= OpenGLCheckbox->GetPreferredHeight();
|
||||||
|
OpenGLCheckbox->SetFrameGeometry(x, y, 190.0, OpenGLCheckbox->GetPreferredHeight());
|
||||||
|
|
||||||
|
y -= VulkanCheckbox->GetPreferredHeight();
|
||||||
|
VulkanCheckbox->SetFrameGeometry(x, y, 190.0, VulkanCheckbox->GetPreferredHeight());
|
||||||
|
|
||||||
|
y -= BackendLabel->GetPreferredHeight();
|
||||||
|
BackendLabel->SetFrameGeometry(x, y, 190.0, BackendLabel->GetPreferredHeight());
|
||||||
|
|
||||||
|
y = yy;
|
||||||
|
#endif
|
||||||
y -= DontAskAgainCheckbox->GetPreferredHeight();
|
y -= DontAskAgainCheckbox->GetPreferredHeight();
|
||||||
DontAskAgainCheckbox->SetFrameGeometry(20.0, y, 190.0, DontAskAgainCheckbox->GetPreferredHeight());
|
DontAskAgainCheckbox->SetFrameGeometry(20.0, y, 190.0, DontAskAgainCheckbox->GetPreferredHeight());
|
||||||
WidescreenCheckbox->SetFrameGeometry(GetWidth() - 20.0 - panelWidth, y, panelWidth, WidescreenCheckbox->GetPreferredHeight());
|
WidescreenCheckbox->SetFrameGeometry(GetWidth() - 20.0 - panelWidth, y, panelWidth, WidescreenCheckbox->GetPreferredHeight());
|
||||||
|
|
|
@ -2,6 +2,9 @@
|
||||||
|
|
||||||
#include <zwidget/core/widget.h>
|
#include <zwidget/core/widget.h>
|
||||||
|
|
||||||
|
|
||||||
|
#define RENDER_BACKENDS
|
||||||
|
|
||||||
class ImageBox;
|
class ImageBox;
|
||||||
class TextLabel;
|
class TextLabel;
|
||||||
class CheckboxLabel;
|
class CheckboxLabel;
|
||||||
|
@ -38,6 +41,12 @@ private:
|
||||||
CheckboxLabel* LightsCheckbox = nullptr;
|
CheckboxLabel* LightsCheckbox = nullptr;
|
||||||
CheckboxLabel* BrightmapsCheckbox = nullptr;
|
CheckboxLabel* BrightmapsCheckbox = nullptr;
|
||||||
CheckboxLabel* WidescreenCheckbox = nullptr;
|
CheckboxLabel* WidescreenCheckbox = nullptr;
|
||||||
|
#ifdef RENDER_BACKENDS
|
||||||
|
TextLabel* BackendLabel = nullptr;
|
||||||
|
CheckboxLabel* VulkanCheckbox = nullptr;
|
||||||
|
CheckboxLabel* OpenGLCheckbox = nullptr;
|
||||||
|
CheckboxLabel* GLESCheckbox = nullptr;
|
||||||
|
#endif
|
||||||
PushButton* PlayButton = nullptr;
|
PushButton* PlayButton = nullptr;
|
||||||
PushButton* ExitButton = nullptr;
|
PushButton* ExitButton = nullptr;
|
||||||
ListView* GamesList = nullptr;
|
ListView* GamesList = nullptr;
|
||||||
|
|
Loading…
Reference in a new issue