diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2012-01-27 11:05:26 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2012-01-27 11:05:26 (GMT) |
| commit | 1c971e4b4210359e400511ad61b8e4eff2f7a79a (patch) | |
| tree | 024dc6cbbb4d15095c5409cb77c5db05607e173c /src | |
| parent | ebd80c73de6b02e1fcf731aa0f377b6085128e57 (diff) | |
| download | powder-1c971e4b4210359e400511ad61b8e4eff2f7a79a.zip powder-1c971e4b4210359e400511ad61b8e4eff2f7a79a.tar.gz | |
Functional checkbox on render options screen
Diffstat (limited to 'src')
| -rw-r--r-- | src/Renderer.cpp | 19 | ||||
| -rw-r--r-- | src/interface/Checkbox.h | 2 | ||||
| -rw-r--r-- | src/render/RenderController.cpp | 10 | ||||
| -rw-r--r-- | src/render/RenderController.h | 2 | ||||
| -rw-r--r-- | src/render/RenderModel.cpp | 10 | ||||
| -rw-r--r-- | src/render/RenderModel.h | 2 | ||||
| -rw-r--r-- | src/render/RenderView.cpp | 26 | ||||
| -rw-r--r-- | src/render/RenderView.h | 1 |
8 files changed, 68 insertions, 4 deletions
diff --git a/src/Renderer.cpp b/src/Renderer.cpp index c602232..f6c1fed 100644 --- a/src/Renderer.cpp +++ b/src/Renderer.cpp @@ -6,6 +6,7 @@ */ #include <math.h> +#include <iostream> #include "Config.h" #include "Renderer.h" #include "Graphics.h" @@ -1683,6 +1684,13 @@ void Renderer::CompileRenderMode() void Renderer::AddRenderMode(unsigned int mode) { + for(int i = 0; i < render_modes.size(); i++) + { + if(render_modes[i] == mode) + { + return; + } + } render_modes.push_back(mode); CompileRenderMode(); } @@ -1694,7 +1702,7 @@ void Renderer::RemoveRenderMode(unsigned int mode) if(render_modes[i] == mode) { render_modes.erase(render_modes.begin() + i); - return; + i = 0; } } CompileRenderMode(); @@ -1709,6 +1717,13 @@ void Renderer::CompileDisplayMode() void Renderer::AddDisplayMode(unsigned int mode) { + for(int i = 0; i < display_modes.size(); i++) + { + if(display_modes[i] == mode) + { + return; + } + } display_modes.push_back(mode); CompileDisplayMode(); } @@ -1720,7 +1735,7 @@ void Renderer::RemoveDisplayMode(unsigned int mode) if(display_modes[i] == mode) { display_modes.erase(display_modes.begin() + i); - return; + i = 0; } } CompileDisplayMode(); diff --git a/src/interface/Checkbox.h b/src/interface/Checkbox.h index ed7dc95..8abbe1c 100644 --- a/src/interface/Checkbox.h +++ b/src/interface/Checkbox.h @@ -33,6 +33,8 @@ public: virtual void OnMouseClick(int x, int y, unsigned int button); virtual void OnMouseUp(int x, int y, unsigned int button); void SetActionCallback(CheckboxAction * action); + CheckboxAction * GetActionCallback() { return actionCallback; } + bool IsChecked() { return checked; } virtual ~Checkbox(); }; } diff --git a/src/render/RenderController.cpp b/src/render/RenderController.cpp index 01a5d4e..8477245 100644 --- a/src/render/RenderController.cpp +++ b/src/render/RenderController.cpp @@ -20,6 +20,16 @@ RenderController::RenderController(Renderer * ren, ControllerCallback * callback this->callback = callback; } +void RenderController::SetRenderMode(unsigned int renderMode) +{ + renderModel->SetRenderMode(renderMode); +} + +void RenderController::UnsetRenderMode(unsigned int renderMode) +{ + renderModel->UnsetRenderMode(renderMode); +} + void RenderController::Exit() { if(ui::Engine::Ref().GetWindow() == renderView) diff --git a/src/render/RenderController.h b/src/render/RenderController.h index 704d6d4..95a1bcc 100644 --- a/src/render/RenderController.h +++ b/src/render/RenderController.h @@ -25,6 +25,8 @@ public: void Exit(); RenderView * GetView() { return renderView; } virtual ~RenderController(); + void SetRenderMode(unsigned int renderMode); + void UnsetRenderMode(unsigned int renderMode); }; #endif /* RENDERCONTROLLER_H_ */ diff --git a/src/render/RenderModel.cpp b/src/render/RenderModel.cpp index 6bd9bdd..ef0f656 100644 --- a/src/render/RenderModel.cpp +++ b/src/render/RenderModel.cpp @@ -18,6 +18,16 @@ void RenderModel::AddObserver(RenderView * observer) observer->NotifyRendererChanged(this); } +void RenderModel::SetRenderMode(unsigned int renderMode) +{ + renderer->AddRenderMode(renderMode); +} + +void RenderModel::UnsetRenderMode(unsigned int renderMode) +{ + renderer->RemoveRenderMode(renderMode); +} + void RenderModel::SetRenderer(Renderer * ren) { renderer = ren; diff --git a/src/render/RenderModel.h b/src/render/RenderModel.h index b4f9ee8..048cfc5 100644 --- a/src/render/RenderModel.h +++ b/src/render/RenderModel.h @@ -24,6 +24,8 @@ public: Renderer * GetRenderer(); void AddObserver(RenderView * observer); void SetRenderer(Renderer * ren); + void SetRenderMode(unsigned int renderMode); + void UnsetRenderMode(unsigned int renderMode); virtual ~RenderModel(); }; diff --git a/src/render/RenderView.cpp b/src/render/RenderView.cpp index 8412126..5551615 100644 --- a/src/render/RenderView.cpp +++ b/src/render/RenderView.cpp @@ -5,16 +5,38 @@ * Author: Simon */ -#include "RenderView.h" +#include "simulation/ElementGraphics.h" #include "Graphics.h" +#include "Renderer.h" +#include "RenderView.h" + +class RenderView::RenderModeAction: public ui::CheckboxAction +{ + RenderView * v; + unsigned int renderMode; +public: + RenderModeAction(RenderView * v_, unsigned int renderMode_) + { + v = v_; + renderMode = renderMode_; + } + virtual void ActionCallback(ui::Checkbox * sender) + { + if(sender->IsChecked()) + v->c->SetRenderMode(renderMode); + else + v->c->UnsetRenderMode(renderMode); + } +}; RenderView::RenderView(): ui::Window(ui::Point(0, 0), ui::Point(XRES, YRES+MENUSIZE)), ren(NULL) { ui::Checkbox * tCheckbox; - tCheckbox = new ui::Checkbox(ui::Point(0, YRES+5), ui::Point(100, 16), "Thing"); + tCheckbox = new ui::Checkbox(ui::Point(0, YRES+5), ui::Point(100, 16), "Blob"); renderModes.push_back(tCheckbox); + tCheckbox->SetActionCallback(new RenderModeAction(this, RENDER_BLOB)); AddComponent(tCheckbox); } diff --git a/src/render/RenderView.h b/src/render/RenderView.h index 362bfb4..cdf0488 100644 --- a/src/render/RenderView.h +++ b/src/render/RenderView.h @@ -23,6 +23,7 @@ class RenderView: public ui::Window { Renderer * ren; std::vector<ui::Checkbox*> renderModes; public: + class RenderModeAction; RenderView(); void NotifyRendererChanged(RenderModel * sender); void AttachController(RenderController * c_) { c = c_; } |
