From 958ab1df967f845ed776f550adf800e735659ef9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tam=C3=A1s=20B=C3=A1lint=20Misius?= Date: Sun, 11 Jun 2023 18:52:18 +0200 Subject: [PATCH] Make Grave (the key under Esc) exiting the console optional Also fix perfectCirclePressure copypasta. --- src/PowderToy.cpp | 2 ++ src/gui/console/ConsoleView.cpp | 3 ++- src/gui/interface/Engine.h | 1 + src/gui/options/OptionsController.cpp | 5 +++++ src/gui/options/OptionsController.h | 1 + src/gui/options/OptionsModel.cpp | 12 ++++++++++++ src/gui/options/OptionsModel.h | 2 ++ src/gui/options/OptionsView.cpp | 24 ++++++++++++++++++------ src/gui/options/OptionsView.h | 3 ++- 9 files changed, 45 insertions(+), 8 deletions(-) diff --git a/src/PowderToy.cpp b/src/PowderToy.cpp index 685a93f79..897370a0a 100644 --- a/src/PowderToy.cpp +++ b/src/PowderToy.cpp @@ -277,6 +277,7 @@ int main(int argc, char * argv[]) auto &prefs = GlobalPrefs::Ref(); scale = prefs.Get("Scale", 1); + auto graveExitsConsole = prefs.Get("GraveExitsConsole", true); resizable = prefs.Get("Resizable", false); fullscreen = prefs.Get("Fullscreen", false); altFullscreen = prefs.Get("AltFullscreen", false); @@ -381,6 +382,7 @@ int main(int argc, char * argv[]) auto &engine = ui::Engine::Ref(); engine.g = new Graphics(); engine.Scale = scale; + engine.GraveExitsConsole = graveExitsConsole; engine.SetResizable(resizable); engine.Fullscreen = fullscreen; engine.SetAltFullscreen(altFullscreen); diff --git a/src/gui/console/ConsoleView.cpp b/src/gui/console/ConsoleView.cpp index c17d1de88..c6529c00a 100644 --- a/src/gui/console/ConsoleView.cpp +++ b/src/gui/console/ConsoleView.cpp @@ -5,6 +5,7 @@ #include "ConsoleCommand.h" #include "gui/interface/Label.h" #include "gui/interface/Textbox.h" +#include "gui/interface/Engine.h" #include "SimulationConfig.h" #include #include @@ -24,7 +25,7 @@ ConsoleView::ConsoleView(): void ConsoleView::DoKeyPress(int key, int scan, bool repeat, bool shift, bool ctrl, bool alt) { - if ((scan == SDL_SCANCODE_GRAVE && key != '~') || key == SDLK_ESCAPE) + if ((ui::Engine::Ref().GraveExitsConsole && scan == SDL_SCANCODE_GRAVE && key != '~') || key == SDLK_ESCAPE) { if (!repeat) doClose = true; diff --git a/src/gui/interface/Engine.h b/src/gui/interface/Engine.h index 2ce8f37c0..3e8bbe69d 100644 --- a/src/gui/interface/Engine.h +++ b/src/gui/interface/Engine.h @@ -82,6 +82,7 @@ namespace ui int drawingFrequencyLimit; Graphics * g; int Scale; + bool GraveExitsConsole; bool Fullscreen; unsigned int FrameIndex; diff --git a/src/gui/options/OptionsController.cpp b/src/gui/options/OptionsController.cpp index f3c338378..4a67e2bd1 100644 --- a/src/gui/options/OptionsController.cpp +++ b/src/gui/options/OptionsController.cpp @@ -97,6 +97,11 @@ void OptionsController::SetScale(int scale) model->SetScale(scale); } +void OptionsController::SetGraveExitsConsole(bool graveExitsConsole) +{ + model->SetGraveExitsConsole(graveExitsConsole); +} + void OptionsController::SetResizable(bool resizable) { model->SetResizable(resizable); diff --git a/src/gui/options/OptionsController.h b/src/gui/options/OptionsController.h index 8634c5961..d211f981c 100644 --- a/src/gui/options/OptionsController.h +++ b/src/gui/options/OptionsController.h @@ -28,6 +28,7 @@ public: void SetAltFullscreen(bool altFullscreen); void SetForceIntegerScaling(bool forceIntegerScaling); void SetScale(int scale); + void SetGraveExitsConsole(bool graveExitsConsole); void SetResizable(bool resizable); void SetFastQuit(bool fastquit); void SetDecoSpace(int decoSpace); diff --git a/src/gui/options/OptionsModel.cpp b/src/gui/options/OptionsModel.cpp index e41f0a7db..7c49960b1 100644 --- a/src/gui/options/OptionsModel.cpp +++ b/src/gui/options/OptionsModel.cpp @@ -156,6 +156,18 @@ void OptionsModel::SetScale(int scale) notifySettingsChanged(); } +bool OptionsModel::GetGraveExitsConsole() +{ + return ui::Engine::Ref().GraveExitsConsole; +} + +void OptionsModel::SetGraveExitsConsole(bool graveExitsConsole) +{ + ui::Engine::Ref().GraveExitsConsole = graveExitsConsole; + GlobalPrefs::Ref().Set("GraveExitsConsole", graveExitsConsole); + notifySettingsChanged(); +} + bool OptionsModel::GetResizable() { return ui::Engine::Ref().GetResizable(); diff --git a/src/gui/options/OptionsModel.h b/src/gui/options/OptionsModel.h index 580296bf5..23f340471 100644 --- a/src/gui/options/OptionsModel.h +++ b/src/gui/options/OptionsModel.h @@ -39,6 +39,8 @@ public: void SetCustomGravityY(float y); int GetScale(); void SetScale(int scale); + bool GetGraveExitsConsole(); + void SetGraveExitsConsole(bool graveExitsConsole); bool GetResizable(); void SetResizable(bool resizable); bool GetFullscreen(); diff --git a/src/gui/options/OptionsView.cpp b/src/gui/options/OptionsView.cpp index 93ccc4f20..c8606497e 100644 --- a/src/gui/options/OptionsView.cpp +++ b/src/gui/options/OptionsView.cpp @@ -377,15 +377,26 @@ OptionsView::OptionsView(): scrollPanel->AddChild(includePressure); currentY+=20; - perfectCirclePressure = new ui::Checkbox(ui::Point(8, currentY), ui::Point(1, 16), "Perfect Circle", ""); - autowidth(perfectCirclePressure); - perfectCirclePressure->SetActionCallback({ [this] { c->SetPerfectCircle(perfectCirclePressure->GetChecked()); } }); - tempLabel = new ui::Label(ui::Point(perfectCirclePressure->Position.X+Graphics::TextSize(perfectCirclePressure->GetText()).X+19, currentY), ui::Point(1, 16), "\bg- Better circle brush, without incorrect points on edges"); + perfectCircle = new ui::Checkbox(ui::Point(8, currentY), ui::Point(1, 16), "Perfect Circle", ""); + autowidth(perfectCircle); + perfectCircle->SetActionCallback({ [this] { c->SetPerfectCircle(perfectCircle->GetChecked()); } }); + tempLabel = new ui::Label(ui::Point(perfectCircle->Position.X+Graphics::TextSize(perfectCircle->GetText()).X+19, currentY), ui::Point(1, 16), "\bg- Better circle brush, without incorrect points on edges"); autowidth(tempLabel); tempLabel->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; tempLabel->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; scrollPanel->AddChild(tempLabel); - scrollPanel->AddChild(perfectCirclePressure); + scrollPanel->AddChild(perfectCircle); + + currentY+=20; + graveExitsConsole = new ui::Checkbox(ui::Point(8, currentY), ui::Point(1, 16), "Key Under Esc Exits Console", ""); + autowidth(graveExitsConsole); + graveExitsConsole->SetActionCallback({ [this] { c->SetGraveExitsConsole(graveExitsConsole->GetChecked()); } }); + tempLabel = new ui::Label(ui::Point(graveExitsConsole->Position.X+Graphics::TextSize(graveExitsConsole->GetText()).X+19, currentY), ui::Point(1, 16), "\bg- Uncheck this if that key is 0 on your keyboard"); + autowidth(tempLabel); + tempLabel->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; + tempLabel->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; + scrollPanel->AddChild(tempLabel); + scrollPanel->AddChild(graveExitsConsole); currentY+=20; decoSpace = new ui::DropDown(ui::Point(8, currentY), ui::Point(60, 16)); @@ -528,7 +539,8 @@ void OptionsView::NotifySettingsChanged(OptionsModel * sender) showAvatars->SetChecked(sender->GetShowAvatars()); mouseClickRequired->SetChecked(sender->GetMouseClickRequired()); includePressure->SetChecked(sender->GetIncludePressure()); - perfectCirclePressure->SetChecked(sender->GetPerfectCircle()); + perfectCircle->SetChecked(sender->GetPerfectCircle()); + graveExitsConsole->SetChecked(sender->GetGraveExitsConsole()); momentumScroll->SetChecked(sender->GetMomentumScroll()); } diff --git a/src/gui/options/OptionsView.h b/src/gui/options/OptionsView.h index cdb262006..b6145fbf6 100644 --- a/src/gui/options/OptionsView.h +++ b/src/gui/options/OptionsView.h @@ -37,7 +37,8 @@ class OptionsView: public ui::Window ui::Checkbox * momentumScroll; ui::Checkbox * mouseClickRequired; ui::Checkbox * includePressure; - ui::Checkbox * perfectCirclePressure; + ui::Checkbox * perfectCircle; + ui::Checkbox * graveExitsConsole; ui::ScrollPanel * scrollPanel; float customGravityX, customGravityY; void UpdateAmbientAirTempPreview(float airTemp, bool isValid);