summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjacob1 <jfu614@gmail.com>2012-10-03 22:55:19 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-10-05 15:31:04 (GMT)
commit97cea273e5d02ed13d674ec8cc8308afe51e54b0 (patch)
tree3aff41d10f9f2dd08f98245369a6da70f0944693 /src
parent71db872e6422dd264ffa00a848d3f8a76e08b279 (diff)
downloadpowder-97cea273e5d02ed13d674ec8cc8308afe51e54b0.zip
powder-97cea273e5d02ed13d674ec8cc8308afe51e54b0.tar.gz
Fast quit option (disable to make "X" act like in tpt)
Diffstat (limited to 'src')
-rw-r--r--src/PowderToySDL.cpp4
-rw-r--r--src/interface/Engine.cpp5
-rw-r--r--src/interface/Engine.h5
-rw-r--r--src/options/OptionsController.cpp5
-rw-r--r--src/options/OptionsController.h1
-rw-r--r--src/options/OptionsModel.cpp11
-rw-r--r--src/options/OptionsModel.h2
-rw-r--r--src/options/OptionsView.cpp31
-rw-r--r--src/options/OptionsView.h2
9 files changed, 62 insertions, 4 deletions
diff --git a/src/PowderToySDL.cpp b/src/PowderToySDL.cpp
index 8236730..74d8bc5 100644
--- a/src/PowderToySDL.cpp
+++ b/src/PowderToySDL.cpp
@@ -309,7 +309,8 @@ void EngineProcess()
switch (event.type)
{
case SDL_QUIT:
- engine->Exit();
+ if (engine->GetFastQuit() || engine->CloseWindow())
+ engine->Exit();
break;
case SDL_KEYDOWN:
engine->onKeyPress(event.key.keysym.sym, event.key.keysym.unicode, event.key.keysym.mod&KEY_MOD_LSHIFT, event.key.keysym.mod&KEY_MOD_LCONTROL, event.key.keysym.mod&KEY_MOD_LALT);
@@ -491,6 +492,7 @@ int main(int argc, char * argv[])
engine = &ui::Engine::Ref();
engine->SetMaxSize(desktopWidth, desktopHeight);
engine->Begin(XRES+BARSIZE, YRES+MENUSIZE);
+ engine->SetFastQuit(Client::Ref().GetPrefBool("FastQuit", true));
GameController * gameController = new GameController();
engine->ShowWindow(gameController->GetView());
diff --git a/src/interface/Engine.cpp b/src/interface/Engine.cpp
index 643a023..cdfadc8 100644
--- a/src/interface/Engine.cpp
+++ b/src/interface/Engine.cpp
@@ -30,6 +30,7 @@ Engine::Engine():
FrameIndex(0),
Fullscreen(false),
Scale(1),
+ FastQuit(1),
break_(false),
lastTick(0)
{
@@ -109,7 +110,7 @@ void Engine::ShowWindow(Window * window)
}
-void Engine::CloseWindow()
+int Engine::CloseWindow()
{
if(!windows.empty())
{
@@ -139,10 +140,12 @@ void Engine::CloseWindow()
mousexp_ = mousex_;
mouseyp_ = mousey_;
}
+ return 0;
}
else
{
state_ = NULL;
+ return 1;
}
}
diff --git a/src/interface/Engine.h b/src/interface/Engine.h
index b825eb8..fb110e4 100644
--- a/src/interface/Engine.h
+++ b/src/interface/Engine.h
@@ -22,7 +22,7 @@ namespace ui
~Engine();
void ShowWindow(Window * window);
- void CloseWindow();
+ int CloseWindow();
void onMouseMove(int x, int y);
void onMouseClick(int x, int y, unsigned button);
@@ -46,6 +46,8 @@ namespace ui
inline bool GetFullscreen() { return Fullscreen; }
void SetScale(int scale) { Scale = scale; }
inline int GetScale() { return Scale; }
+ void SetFastQuit(bool fastquit) { FastQuit = fastquit; }
+ inline bool GetFastQuit() {return FastQuit; }
void Tick();
void Draw();
@@ -88,6 +90,7 @@ namespace ui
bool running_;
bool break_;
+ bool FastQuit;
int lastTick;
int mouseb_;
diff --git a/src/options/OptionsController.cpp b/src/options/OptionsController.cpp
index 579ad73..3973fed 100644
--- a/src/options/OptionsController.cpp
+++ b/src/options/OptionsController.cpp
@@ -78,6 +78,11 @@ void OptionsController::SetScale(bool scale)
}
+void OptionsController::SetFastQuit(bool fastquit)
+{
+ model->SetFastQuit(fastquit);
+}
+
OptionsView * OptionsController::GetView()
{
return view;
diff --git a/src/options/OptionsController.h b/src/options/OptionsController.h
index 43db1f8..1df92ba 100644
--- a/src/options/OptionsController.h
+++ b/src/options/OptionsController.h
@@ -33,6 +33,7 @@ public:
void SetEdgeMode(int airMode);
void SetFullscreen(bool fullscreen);
void SetScale(bool scale);
+ void SetFastQuit(bool fastquit);
void Exit();
OptionsView * GetView();
virtual ~OptionsController();
diff --git a/src/options/OptionsModel.cpp b/src/options/OptionsModel.cpp
index f9cef2f..c3517fa 100644
--- a/src/options/OptionsModel.cpp
+++ b/src/options/OptionsModel.cpp
@@ -120,6 +120,17 @@ void OptionsModel::SetFullscreen(bool fullscreen)
notifySettingsChanged();
}
+bool OptionsModel::GetFastQuit()
+{
+ return ui::Engine::Ref().GetFastQuit();
+}
+void OptionsModel::SetFastQuit(bool fastquit)
+{
+ ui::Engine::Ref().SetFastQuit(fastquit);
+ Client::Ref().SetPref("FastQuit", bool(fastquit));
+ notifySettingsChanged();
+}
+
void OptionsModel::notifySettingsChanged()
{
for(int i = 0; i < observers.size(); i++)
diff --git a/src/options/OptionsModel.h b/src/options/OptionsModel.h
index 52b7fa5..c15fb88 100644
--- a/src/options/OptionsModel.h
+++ b/src/options/OptionsModel.h
@@ -38,6 +38,8 @@ public:
void SetGravityMode(int gravityMode);
bool GetFullscreen();
void SetFullscreen(bool fullscreen);
+ bool GetFastQuit();
+ void SetFastQuit(bool fastquit);
bool GetScale();
void SetScale(bool scale);
virtual ~OptionsModel();
diff --git a/src/options/OptionsView.cpp b/src/options/OptionsView.cpp
index 9811154..3adf7d7 100644
--- a/src/options/OptionsView.cpp
+++ b/src/options/OptionsView.cpp
@@ -12,7 +12,7 @@
#include "interface/DropDown.h"
OptionsView::OptionsView():
- ui::Window(ui::Point(-1, -1), ui::Point(300, 270)){
+ ui::Window(ui::Point(-1, -1), ui::Point(300, 290)){
ui::Label * tempLabel = new ui::Label(ui::Point(4, 5), ui::Point(Size.X-8, 14), "Simulation Options");
tempLabel->SetTextColour(style::Colour::InformationTitle);
@@ -146,8 +146,12 @@ OptionsView::OptionsView():
scale = new ui::Checkbox(ui::Point(8, 210), ui::Point(Size.X-6, 16), "Large screen", "");
scale->SetActionCallback(new ScaleAction(this));
+ tempLabel = new ui::Label(ui::Point(scale->Position.X+Graphics::textwidth(scale->GetText().c_str())+20, scale->Position.Y), ui::Point(Size.X-28, 16), "\bg- Double window size for smaller screen");
+ tempLabel->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; tempLabel->Appearance.VerticalAlign = ui::Appearance::AlignMiddle;
+ AddComponent(tempLabel);
AddComponent(scale);
+
class FullscreenAction: public ui::CheckboxAction
{
OptionsView * v;
@@ -158,8 +162,27 @@ OptionsView::OptionsView():
fullscreen = new ui::Checkbox(ui::Point(8, 230), ui::Point(Size.X-6, 16), "Fullscreen", "");
fullscreen->SetActionCallback(new FullscreenAction(this));
+ tempLabel = new ui::Label(ui::Point(fullscreen->Position.X+Graphics::textwidth(fullscreen->GetText().c_str())+20, fullscreen->Position.Y), ui::Point(Size.X-28, 16), "\bg- Use the entire screen");
+ tempLabel->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; tempLabel->Appearance.VerticalAlign = ui::Appearance::AlignMiddle;
+ AddComponent(tempLabel);
AddComponent(fullscreen);
+
+ class FastQuitAction: public ui::CheckboxAction
+ {
+ OptionsView * v;
+ public:
+ FastQuitAction(OptionsView * v_){ v = v_; }
+ virtual void ActionCallback(ui::Checkbox * sender){ v->c->SetFastQuit(sender->GetChecked()); }
+ };
+
+ fastquit = new ui::Checkbox(ui::Point(8, 250), ui::Point(Size.X-6, 16), "Fast Quit", "");
+ fastquit->SetActionCallback(new FastQuitAction(this));
+ tempLabel = new ui::Label(ui::Point(fastquit->Position.X+Graphics::textwidth(fastquit->GetText().c_str())+20, fastquit->Position.Y), ui::Point(Size.X-28, 16), "\bg- Always exit completely when hitting close");
+ tempLabel->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; tempLabel->Appearance.VerticalAlign = ui::Appearance::AlignMiddle;
+ AddComponent(tempLabel);
+ AddComponent(fastquit);
+
class CloseAction: public ui::ButtonAction
{
public:
@@ -189,6 +212,7 @@ void OptionsView::NotifySettingsChanged(OptionsModel * sender)
edgeMode->SetOption(sender->GetEdgeMode());
scale->SetChecked(sender->GetScale());
fullscreen->SetChecked(sender->GetFullscreen());
+ fastquit->SetChecked(sender->GetFastQuit());
}
void OptionsView::AttachController(OptionsController * c_)
@@ -204,6 +228,11 @@ void OptionsView::OnDraw()
g->draw_line(Position.X+1, Position.Y+scale->Position.Y-4, Position.X+Size.X-1, Position.Y+scale->Position.Y-4, 255, 255, 255, 180);
}
+void OptionsView::OnTryExit(ExitMethod method)
+{
+ c->Exit();
+}
+
OptionsView::~OptionsView() {
// TODO Auto-generated destructor stub
diff --git a/src/options/OptionsView.h b/src/options/OptionsView.h
index d0a99ab..a4c9854 100644
--- a/src/options/OptionsView.h
+++ b/src/options/OptionsView.h
@@ -27,11 +27,13 @@ class OptionsView: public ui::Window {
ui::DropDown * edgeMode;
ui::Checkbox * scale;
ui::Checkbox * fullscreen;
+ ui::Checkbox * fastquit;
public:
OptionsView();
void NotifySettingsChanged(OptionsModel * sender);
void AttachController(OptionsController * c_);
void OnDraw();
+ void OnTryExit(ExitMethod method);
virtual ~OptionsView();
};