diff options
Diffstat (limited to 'src/libui_sdl/DlgVideoSettings.cpp')
-rw-r--r-- | src/libui_sdl/DlgVideoSettings.cpp | 174 |
1 files changed, 132 insertions, 42 deletions
diff --git a/src/libui_sdl/DlgVideoSettings.cpp b/src/libui_sdl/DlgVideoSettings.cpp index aee6d51..3102873 100644 --- a/src/libui_sdl/DlgVideoSettings.cpp +++ b/src/libui_sdl/DlgVideoSettings.cpp @@ -37,7 +37,38 @@ namespace DlgVideoSettings bool opened; uiWindow* win; -// +uiRadioButtons* rbRenderer; +uiCheckbox* cbGLDisplay; +uiCheckbox* cbThreaded3D; +uiCombobox* cbResolution; +uiCheckbox* cbAntialias; + +int old_renderer; +int old_gldisplay; +int old_threaded3D; +int old_resolution; +int old_antialias; + + +void UpdateControls() +{ + int renderer = uiRadioButtonsSelected(rbRenderer); + + if (renderer == 0) + { + uiControlEnable(uiControl(cbGLDisplay)); + uiControlEnable(uiControl(cbThreaded3D)); + uiControlDisable(uiControl(cbResolution)); + uiControlDisable(uiControl(cbAntialias)); + } + else + { + uiControlDisable(uiControl(cbGLDisplay)); + uiControlDisable(uiControl(cbThreaded3D)); + uiControlEnable(uiControl(cbResolution)); + uiControlEnable(uiControl(cbAntialias)); + } +} int OnCloseWindow(uiWindow* window, void* blarg) @@ -46,17 +77,68 @@ int OnCloseWindow(uiWindow* window, void* blarg) return 1; } -void OnResolutionChanged(uiRadioButtons* rb, void* blarg) +void OnRendererChanged(uiRadioButtons* rb, void* blarg) { int id = uiRadioButtonsSelected(rb); +printf("RENDERER CHANGE: %d\n", id); + Config::_3DRenderer = id; + UpdateControls(); + ApplyNewSettings(2); +} - Config::ScreenScale = id; +void OnGLDisplayChanged(uiCheckbox* cb, void* blarg) +{ + Config::ScreenUseGL = uiCheckboxChecked(cb); ApplyNewSettings(2); } +void OnThreaded3DChanged(uiCheckbox* cb, void* blarg) +{ + Config::Threaded3D = uiCheckboxChecked(cb); + ApplyNewSettings(0); +} + +void OnResolutionChanged(uiCombobox* cb, void* blarg) +{ + int id = uiComboboxSelected(cb); + + Config::GL_ScaleFactor = id+1; + ApplyNewSettings(3); +} + +void OnAntialiasChanged(uiCheckbox* cb, void* blarg) +{ + Config::GL_Antialias = uiCheckboxChecked(cb); + ApplyNewSettings(3); +} + void OnCancel(uiButton* btn, void* blarg) { - // restore old settings here + if (old_renderer != Config::_3DRenderer) + { + Config::_3DRenderer = old_renderer; + ApplyNewSettings(2); + } + + if (old_gldisplay != Config::ScreenUseGL) + { + Config::ScreenUseGL = old_gldisplay; + ApplyNewSettings(2); + } + + if (old_threaded3D != Config::Threaded3D) + { + Config::Threaded3D = old_threaded3D; + ApplyNewSettings(0); + } + + if (old_resolution != Config::GL_ScaleFactor || + old_antialias != Config::GL_Antialias) + { + Config::GL_ScaleFactor = old_resolution; + Config::GL_Antialias = old_antialias; + ApplyNewSettings(3); + } uiControlDestroy(uiControl(win)); opened = false; @@ -64,8 +146,6 @@ void OnCancel(uiButton* btn, void* blarg) void OnOk(uiButton* btn, void* blarg) { - // set config entries here - Config::Save(); uiControlDestroy(uiControl(win)); @@ -101,76 +181,70 @@ void Open() uiBoxSetPadded(right, 1); { - uiGroup* grp = uiNewGroup("3D renderer"); + uiGroup* grp = uiNewGroup("Display settings"); uiBoxAppend(left, uiControl(grp), 0); uiGroupSetMargined(grp, 1); uiBox* in_ctrl = uiNewVerticalBox(); uiGroupSetChild(grp, uiControl(in_ctrl)); - uiRadioButtons* rbRenderer = uiNewRadioButtons(); + uiLabel* lbl = uiNewLabel("3D renderer:"); + uiBoxAppend(in_ctrl, uiControl(lbl), 0); + + rbRenderer = uiNewRadioButtons(); uiRadioButtonsAppend(rbRenderer, "Software"); uiRadioButtonsAppend(rbRenderer, "OpenGL"); + uiRadioButtonsOnSelected(rbRenderer, OnRendererChanged, NULL); uiBoxAppend(in_ctrl, uiControl(rbRenderer), 0); + + lbl = uiNewLabel(""); + uiBoxAppend(in_ctrl, uiControl(lbl), 0); + + cbGLDisplay = uiNewCheckbox("OpenGL display"); + uiCheckboxOnToggled(cbGLDisplay, OnGLDisplayChanged, NULL); + uiBoxAppend(in_ctrl, uiControl(cbGLDisplay), 0); } { uiGroup* grp = uiNewGroup("Software renderer"); - uiBoxAppend(left, uiControl(grp), 0); + uiBoxAppend(right, uiControl(grp), 0); uiGroupSetMargined(grp, 1); uiBox* in_ctrl = uiNewVerticalBox(); uiGroupSetChild(grp, uiControl(in_ctrl)); - uiCheckbox* cbThreaded3D = uiNewCheckbox("Threaded"); + cbThreaded3D = uiNewCheckbox("Threaded"); + uiCheckboxOnToggled(cbThreaded3D, OnThreaded3DChanged, NULL); uiBoxAppend(in_ctrl, uiControl(cbThreaded3D), 0); } { uiGroup* grp = uiNewGroup("OpenGL renderer"); - uiBoxAppend(left, uiControl(grp), 0); - uiGroupSetMargined(grp, 1); - - uiBox* in_ctrl = uiNewVerticalBox(); - uiGroupSetChild(grp, uiControl(in_ctrl)); - - uiCheckbox* cbAntialias = uiNewCheckbox("Antialiasing"); - uiBoxAppend(in_ctrl, uiControl(cbAntialias), 0); - } - - { - uiGroup* grp = uiNewGroup("Display settings"); uiBoxAppend(right, uiControl(grp), 0); uiGroupSetMargined(grp, 1); uiBox* in_ctrl = uiNewVerticalBox(); uiGroupSetChild(grp, uiControl(in_ctrl)); - uiLabel* lbl = uiNewLabel("Resolution:"); + uiLabel* lbl = uiNewLabel("Internal resolution:"); uiBoxAppend(in_ctrl, uiControl(lbl), 0); - uiRadioButtons* rbResolution = uiNewRadioButtons(); - uiRadioButtonsOnSelected(rbResolution, OnResolutionChanged, NULL); - uiRadioButtonsAppend(rbResolution, "1x"); - uiRadioButtonsAppend(rbResolution, "2x"); - uiRadioButtonsAppend(rbResolution, "4x"); - uiBoxAppend(in_ctrl, uiControl(rbResolution), 0); - - uiCheckbox* cbWidescreen = uiNewCheckbox("Stretch to 16:9"); - uiBoxAppend(in_ctrl, uiControl(cbWidescreen), 0); + cbResolution = uiNewCombobox(); + uiComboboxOnSelected(cbResolution, OnResolutionChanged, NULL); + for (int i = 1; i <= 8; i++) + { + char txt[64]; + sprintf(txt, "%dx native (%dx%d)", i, 256*i, 192*i); + uiComboboxAppend(cbResolution, txt); + } + uiBoxAppend(in_ctrl, uiControl(cbResolution), 0); lbl = uiNewLabel(""); uiBoxAppend(in_ctrl, uiControl(lbl), 0); - lbl = uiNewLabel("Apply upscaling to:"); - uiBoxAppend(in_ctrl, uiControl(lbl), 0); - - uiRadioButtons* rbApplyScalingTo = uiNewRadioButtons(); - uiRadioButtonsAppend(rbApplyScalingTo, "Both screens"); - uiRadioButtonsAppend(rbApplyScalingTo, "Emphasized screen (see 'Screen sizing')"); - //uiRadioButtonsAppend(rbApplyScalingTo, "Top screen"); - //uiRadioButtonsAppend(rbApplyScalingTo, "Bottom screen"); - uiBoxAppend(in_ctrl, uiControl(rbApplyScalingTo), 0); + cbAntialias = uiNewCheckbox("Antialiasing"); + uiCheckboxOnToggled(cbAntialias, OnAntialiasChanged, NULL); + uiBoxAppend(in_ctrl, uiControl(cbAntialias), 0); } { @@ -190,7 +264,23 @@ void Open() uiBoxAppend(in_ctrl, uiControl(btnok), 0); } - // + Config::_3DRenderer = Config::_3DRenderer ? 1 : 0; + + if (Config::GL_ScaleFactor < 1) Config::GL_ScaleFactor = 1; + else if (Config::GL_ScaleFactor > 8) Config::GL_ScaleFactor = 8; + + old_renderer = Config::_3DRenderer; + old_gldisplay = Config::ScreenUseGL; + old_threaded3D = Config::Threaded3D; + old_resolution = Config::GL_ScaleFactor; + old_antialias = Config::GL_Antialias; + + uiCheckboxSetChecked(cbGLDisplay, Config::ScreenUseGL); + uiCheckboxSetChecked(cbThreaded3D, Config::Threaded3D); + uiComboboxSetSelected(cbResolution, Config::GL_ScaleFactor-1); + uiCheckboxSetChecked(cbAntialias, Config::GL_Antialias); + uiRadioButtonsSetSelected(rbRenderer, Config::_3DRenderer); + UpdateControls(); uiControlShow(uiControl(win)); } |