diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2013-03-22 14:14:17 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2013-03-22 14:14:17 (GMT) |
| commit | 9abe51526cac2634af0541c3de69834dd30e9f78 (patch) | |
| tree | 6ae4deadfe00a83094b9d288d8c11d8ce823577a /src/gui/render | |
| parent | 2c311b9a36a88fadd96f3d39acb1ab2590835d81 (diff) | |
| download | powder-9abe51526cac2634af0541c3de69834dd30e9f78.zip powder-9abe51526cac2634af0541c3de69834dd30e9f78.tar.gz | |
Move all GUI source files into gui/
Diffstat (limited to 'src/gui/render')
| -rw-r--r-- | src/gui/render/RenderController.cpp | 67 | ||||
| -rw-r--r-- | src/gui/render/RenderController.h | 29 | ||||
| -rw-r--r-- | src/gui/render/RenderModel.cpp | 135 | ||||
| -rw-r--r-- | src/gui/render/RenderModel.h | 35 | ||||
| -rw-r--r-- | src/gui/render/RenderView.cpp | 401 | ||||
| -rw-r--r-- | src/gui/render/RenderView.h | 43 |
6 files changed, 710 insertions, 0 deletions
diff --git a/src/gui/render/RenderController.cpp b/src/gui/render/RenderController.cpp new file mode 100644 index 0000000..7b60e97 --- /dev/null +++ b/src/gui/render/RenderController.cpp @@ -0,0 +1,67 @@ +#include "RenderController.h" + +RenderController::RenderController(Renderer * ren, ControllerCallback * callback): + HasExited(false) +{ + renderView = new RenderView(); + renderModel = new RenderModel(); + + renderView->AttachController(this); + renderModel->AddObserver(renderView); + + renderModel->SetRenderer(ren); + this->callback = callback; +} + +void RenderController::SetRenderMode(unsigned int renderMode) +{ + renderModel->SetRenderMode(renderMode); +} + +void RenderController::UnsetRenderMode(unsigned int renderMode) +{ + renderModel->UnsetRenderMode(renderMode); +} + +void RenderController::SetDisplayMode(unsigned int renderMode) +{ + renderModel->SetDisplayMode(renderMode); +} + +void RenderController::UnsetDisplayMode(unsigned int renderMode) +{ + renderModel->UnsetDisplayMode(renderMode); +} + +void RenderController::SetColourMode(unsigned int renderMode) +{ + renderModel->SetColourMode(renderMode); +} + +void RenderController::LoadRenderPreset(int presetNum) +{ + renderModel->LoadRenderPreset(presetNum); +} + +void RenderController::Exit() +{ + if(ui::Engine::Ref().GetWindow() == renderView) + { + ui::Engine::Ref().CloseWindow(); + } + if(callback) + callback->ControllerExit(); + HasExited = true; +} + +RenderController::~RenderController() { + if(ui::Engine::Ref().GetWindow() == renderView) + { + ui::Engine::Ref().CloseWindow(); + } + if(callback) + delete callback; + delete renderModel; + delete renderView; +} + diff --git a/src/gui/render/RenderController.h b/src/gui/render/RenderController.h new file mode 100644 index 0000000..42adb65 --- /dev/null +++ b/src/gui/render/RenderController.h @@ -0,0 +1,29 @@ +#ifndef RENDERCONTROLLER_H_ +#define RENDERCONTROLLER_H_ + +#include "RenderView.h" +#include "RenderModel.h" +#include "graphics/Renderer.h" +#include "Controller.h" + +class RenderView; +class RenderModel; +class RenderController { + RenderView * renderView; + RenderModel * renderModel; + ControllerCallback * callback; +public: + bool HasExited; + RenderController(Renderer * ren, ControllerCallback * callback = NULL); + void Exit(); + RenderView * GetView() { return renderView; } + virtual ~RenderController(); + void SetRenderMode(unsigned int renderMode); + void UnsetRenderMode(unsigned int renderMode); + void SetDisplayMode(unsigned int renderMode); + void UnsetDisplayMode(unsigned int renderMode); + void SetColourMode(unsigned int renderMode); + void LoadRenderPreset(int presetNum); +}; + +#endif /* RENDERCONTROLLER_H_ */ diff --git a/src/gui/render/RenderModel.cpp b/src/gui/render/RenderModel.cpp new file mode 100644 index 0000000..b17f6fc --- /dev/null +++ b/src/gui/render/RenderModel.cpp @@ -0,0 +1,135 @@ +#include "RenderModel.h" + +RenderModel::RenderModel(): + renderer(NULL) +{ + +} + +void RenderModel::AddObserver(RenderView * observer) +{ + observers.push_back(observer); + observer->NotifyRendererChanged(this); + observer->NotifyRenderChanged(this); + observer->NotifyDisplayChanged(this); + observer->NotifyColourChanged(this); +} + +void RenderModel::SetRenderMode(unsigned int renderMode) +{ + if(renderer) + renderer->AddRenderMode(renderMode); + notifyRenderChanged(); +} + +void RenderModel::UnsetRenderMode(unsigned int renderMode) +{ + if(renderer) + renderer->RemoveRenderMode(renderMode); + notifyRenderChanged(); +} + +unsigned int RenderModel::GetRenderMode() +{ + if(renderer) + return renderer->render_mode; + else + return 0; +} + +void RenderModel::SetDisplayMode(unsigned int displayMode) +{ + if(renderer) + renderer->AddDisplayMode(displayMode); + notifyDisplayChanged(); +} + +void RenderModel::UnsetDisplayMode(unsigned int displayMode) +{ + if(renderer) + renderer->RemoveDisplayMode(displayMode); + notifyDisplayChanged(); +} + +unsigned int RenderModel::GetDisplayMode() +{ + if(renderer) + return renderer->display_mode; + else + return 0; +} + +void RenderModel::SetColourMode(unsigned int colourMode) +{ + if(renderer) + renderer->SetColourMode(colourMode); + notifyColourChanged(); +} + +unsigned int RenderModel::GetColourMode() +{ + if(renderer) + return renderer->colour_mode; + else + return 0; +} + +void RenderModel::LoadRenderPreset(int presetNum) +{ + RenderPreset preset = renderer->renderModePresets[presetNum]; + renderer->SetRenderMode(preset.RenderModes); + renderer->SetDisplayMode(preset.DisplayModes); + renderer->SetColourMode(preset.ColourMode); + notifyRenderChanged(); + notifyDisplayChanged(); + notifyColourChanged(); +} + +void RenderModel::SetRenderer(Renderer * ren) +{ + renderer = ren; + notifyRendererChanged(); + notifyRenderChanged(); + notifyDisplayChanged(); + notifyColourChanged(); +} + +Renderer * RenderModel::GetRenderer() +{ + return renderer; +} + +void RenderModel::notifyRendererChanged() +{ + for(int i = 0; i < observers.size(); i++) + { + observers[i]->NotifyRendererChanged(this); + } +} + +void RenderModel::notifyRenderChanged() +{ + for(int i = 0; i < observers.size(); i++) + { + observers[i]->NotifyRenderChanged(this); + } +} + +void RenderModel::notifyDisplayChanged() +{ + for(int i = 0; i < observers.size(); i++) + { + observers[i]->NotifyDisplayChanged(this); + } +} + +void RenderModel::notifyColourChanged() +{ + for(int i = 0; i < observers.size(); i++) + { + observers[i]->NotifyColourChanged(this); + } +} + +RenderModel::~RenderModel() { +} diff --git a/src/gui/render/RenderModel.h b/src/gui/render/RenderModel.h new file mode 100644 index 0000000..2cd24a5 --- /dev/null +++ b/src/gui/render/RenderModel.h @@ -0,0 +1,35 @@ +#ifndef RENDERMODEL_H_ +#define RENDERMODEL_H_ + +#include <vector> +#include "RenderView.h" +#include "graphics/Renderer.h" + +using namespace std; + +class RenderView; +class RenderModel { + vector<RenderView*> observers; + Renderer * renderer; + void notifyRendererChanged(); + void notifyRenderChanged(); + void notifyDisplayChanged(); + void notifyColourChanged(); +public: + RenderModel(); + Renderer * GetRenderer(); + void AddObserver(RenderView * observer); + void SetRenderer(Renderer * ren); + void SetRenderMode(unsigned int renderMode); + void UnsetRenderMode(unsigned int renderMode); + unsigned int GetRenderMode(); + void SetDisplayMode(unsigned int displayMode); + void UnsetDisplayMode(unsigned int displayMode); + unsigned int GetDisplayMode(); + void SetColourMode(unsigned int colourMode); + unsigned int GetColourMode(); + void LoadRenderPreset(int presetNum); + virtual ~RenderModel(); +}; + +#endif /* RENDERMODEL_H_ */ diff --git a/src/gui/render/RenderView.cpp b/src/gui/render/RenderView.cpp new file mode 100644 index 0000000..508ff47 --- /dev/null +++ b/src/gui/render/RenderView.cpp @@ -0,0 +1,401 @@ +#include "simulation/ElementGraphics.h" +#include "graphics/Graphics.h" +#include "graphics/Renderer.h" +#include "RenderView.h" + +class RenderView::RenderModeAction: public ui::CheckboxAction +{ + RenderView * v; +public: + unsigned int renderMode; + RenderModeAction(RenderView * v_, unsigned int renderMode_) + { + v = v_; + renderMode = renderMode_; + } + virtual void ActionCallback(ui::Checkbox * sender) + { + if(sender->GetChecked()) + v->c->SetRenderMode(renderMode); + else + v->c->UnsetRenderMode(renderMode); + } +}; + +class RenderView::DisplayModeAction: public ui::CheckboxAction +{ + RenderView * v; +public: + unsigned int displayMode; + DisplayModeAction(RenderView * v_, unsigned int displayMode_) + { + v = v_; + displayMode = displayMode_; + } + virtual void ActionCallback(ui::Checkbox * sender) + { + if(sender->GetChecked()) + v->c->SetDisplayMode(displayMode); + else + v->c->UnsetDisplayMode(displayMode); + } +}; + +class RenderView::ColourModeAction: public ui::CheckboxAction +{ + RenderView * v; +public: + unsigned int colourMode; + ColourModeAction(RenderView * v_, unsigned int colourMode_) + { + v = v_; + colourMode = colourMode_; + } + virtual void ActionCallback(ui::Checkbox * sender) + { + if(sender->GetChecked()) + v->c->SetColourMode(colourMode); + else + v->c->SetColourMode(0); + } +}; + +class RenderView::RenderPresetAction: public ui::ButtonAction +{ + RenderView * v; +public: + int renderPreset; + RenderPresetAction(RenderView * v_, int renderPreset_) + { + v = v_; + renderPreset = renderPreset_; + } + virtual void ActionCallback(ui::Button * sender) + { + v->c->LoadRenderPreset(renderPreset); + } +}; + +RenderView::RenderView(): + ui::Window(ui::Point(0, 0), ui::Point(XRES, YRES+MENUSIZE)), + toolTip(""), + toolTipPresence(0), + ren(NULL) +{ + ui::Button * presetButton; + int presetButtonOffset = 375; + int checkboxOffset = 1; + int cSpace = 32; + int sSpace = 38; + + presetButton = new ui::Button(ui::Point(presetButtonOffset+200, YRES+6), ui::Point(30, 13), "", "Velocity display mode preset"); + presetButton->SetIcon(IconVelocity); + presetButton->SetActionCallback(new RenderPresetAction(this, 1)); + AddComponent(presetButton); + + presetButton = new ui::Button(ui::Point(presetButtonOffset+200, YRES+6+18), ui::Point(30, 13), "", "Pressure display mode preset"); + presetButton->SetIcon(IconPressure); + presetButton->SetActionCallback(new RenderPresetAction(this, 2)); + AddComponent(presetButton); + + presetButton = new ui::Button(ui::Point(presetButtonOffset+161, YRES+6), ui::Point(30, 13), "", "Persistent display mode preset"); + presetButton->SetIcon(IconPersistant); + presetButton->SetActionCallback(new RenderPresetAction(this, 3)); + AddComponent(presetButton); + + presetButton = new ui::Button(ui::Point(presetButtonOffset+161, YRES+6+18), ui::Point(30, 13), "", "Fire display mode preset"); + presetButton->SetIcon(IconFire); + presetButton->SetActionCallback(new RenderPresetAction(this, 4)); + AddComponent(presetButton); + + presetButton = new ui::Button(ui::Point(presetButtonOffset+122, YRES+6), ui::Point(30, 13), "", "Blob display mode preset"); + presetButton->SetIcon(IconBlob); + presetButton->SetActionCallback(new RenderPresetAction(this, 5)); + AddComponent(presetButton); + + presetButton = new ui::Button(ui::Point(presetButtonOffset+122, YRES+6+18), ui::Point(30, 13), "", "Heat display mode preset"); + presetButton->SetIcon(IconHeat); + presetButton->SetActionCallback(new RenderPresetAction(this, 6)); + AddComponent(presetButton); + + presetButton = new ui::Button(ui::Point(presetButtonOffset+83, YRES+6), ui::Point(30, 13), "", "Fancy display mode preset"); + presetButton->SetIcon(IconBlur); + presetButton->SetActionCallback(new RenderPresetAction(this, 7)); + AddComponent(presetButton); + + presetButton = new ui::Button(ui::Point(presetButtonOffset+83, YRES+6+18), ui::Point(30, 13), "", "Nothing display mode preset"); + presetButton->SetIcon(IconBasic); + presetButton->SetActionCallback(new RenderPresetAction(this, 8)); + AddComponent(presetButton); + + presetButton = new ui::Button(ui::Point(presetButtonOffset+44, YRES+6), ui::Point(30, 13), "", "Heat gradient display mode preset"); + presetButton->SetIcon(IconGradient); + presetButton->SetActionCallback(new RenderPresetAction(this, 9)); + AddComponent(presetButton); + + presetButton = new ui::Button(ui::Point(presetButtonOffset+44, YRES+6+18), ui::Point(30, 13), "", "Alternative Velocity display mode preset"); + presetButton->SetIcon(IconAltAir); + presetButton->SetActionCallback(new RenderPresetAction(this, 0)); + AddComponent(presetButton); + + presetButton = new ui::Button(ui::Point(presetButtonOffset+5, YRES+6), ui::Point(30, 13), "", "Life display mode preset"); + presetButton->SetIcon(IconLife); + presetButton->SetActionCallback(new RenderPresetAction(this, 10)); + AddComponent(presetButton); + + ui::Checkbox * tCheckbox; + + tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4), ui::Point(30, 16), "Effects", "Adds Special flare effects to some elements"); + renderModes.push_back(tCheckbox); + tCheckbox->SetIcon(IconEffect); + tCheckbox->SetActionCallback(new RenderModeAction(this, RENDER_EFFE)); + AddComponent(tCheckbox); + + tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4+18), ui::Point(30, 16), "Fire", "Fire effect for gasses"); + renderModes.push_back(tCheckbox); + tCheckbox->SetIcon(IconFire); + tCheckbox->SetActionCallback(new RenderModeAction(this, RENDER_FIRE)); + AddComponent(tCheckbox); + + checkboxOffset += cSpace; + + tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4), ui::Point(30, 16), "Glow", "Glow effect on some elements"); + renderModes.push_back(tCheckbox); + tCheckbox->SetIcon(IconGlow); + tCheckbox->SetActionCallback(new RenderModeAction(this, RENDER_GLOW)); + AddComponent(tCheckbox); + + tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4+18), ui::Point(30, 16), "Blur", "Blur effect for liquids"); + renderModes.push_back(tCheckbox); + tCheckbox->SetIcon(IconBlur); + tCheckbox->SetActionCallback(new RenderModeAction(this, RENDER_BLUR)); + AddComponent(tCheckbox); + + checkboxOffset += cSpace; + + tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4), ui::Point(30, 16), "Blob", "Makes everything be drawn like a blob"); + renderModes.push_back(tCheckbox); + tCheckbox->SetIcon(IconBlob); + tCheckbox->SetActionCallback(new RenderModeAction(this, RENDER_BLOB)); + AddComponent(tCheckbox); + + tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4+18), ui::Point(30, 16), "Point", "Basic rendering, without this, most things will be invisible"); + renderModes.push_back(tCheckbox); + tCheckbox->SetIcon(IconBasic); + tCheckbox->SetActionCallback(new RenderModeAction(this, RENDER_BASC)); + AddComponent(tCheckbox); + + checkboxOffset += sSpace; + line1 = checkboxOffset-5; + + tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4), ui::Point(30, 16), "Alt. Air", "Displays pressure as red and blue, and velocity as white"); + displayModes.push_back(tCheckbox); + tCheckbox->SetIcon(IconAltAir); + tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_AIRC)); + AddComponent(tCheckbox); + + tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4+18), ui::Point(30, 16), "Pressure", "Displays pressure, red is positive and blue is negative"); + displayModes.push_back(tCheckbox); + tCheckbox->SetIcon(IconPressure); + tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_AIRP)); + AddComponent(tCheckbox); + + checkboxOffset += cSpace; + + tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4), ui::Point(30, 16), "Velocity", "Displays velocity and positive pressure: up/down adds blue, right/left adds red, still pressure adds green"); + displayModes.push_back(tCheckbox); + tCheckbox->SetIcon(IconVelocity); + tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_AIRV)); + AddComponent(tCheckbox); + + tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4+18), ui::Point(30, 16), "Air-heat", "Displays the temperature of the air like heat display does"); + displayModes.push_back(tCheckbox); + tCheckbox->SetIcon(IconHeat); + tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_AIRH)); + AddComponent(tCheckbox); + + /*tCheckbox = new ui::Checkbox(ui::Point(216, YRES+4), ui::Point(30, 16), "Air", ""); + displayModes.push_back(tCheckbox); + tCheckbox->SetIcon(IconAltAir); + tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_AIR)); + AddComponent(tCheckbox);*/ + + checkboxOffset += sSpace; + line2 = checkboxOffset-5; + + tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4+18), ui::Point(30, 16), "Warp", "Gravity lensing, Newtonian Gravity bends light with this on"); + displayModes.push_back(tCheckbox); + tCheckbox->SetIcon(IconWarp); + tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_WARP)); + AddComponent(tCheckbox); + +#ifdef OGLR + tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4), ui::Point(30, 16), "Effect", "I don't know what this does..."); //I would remove the whole checkbox, but then there's a large empty space +#else + tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4), ui::Point(30, 16), "Effect", "Does nothing"); +#endif + displayModes.push_back(tCheckbox); + tCheckbox->SetIcon(IconEffect); + tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_EFFE)); + AddComponent(tCheckbox); + + checkboxOffset += cSpace; + + tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4), ui::Point(30, 16), "Persistent", "Element paths persist on the screen for a while"); + displayModes.push_back(tCheckbox); + tCheckbox->SetIcon(IconPersistant); + tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_PERS)); + AddComponent(tCheckbox); + + checkboxOffset += sSpace; + line3 = checkboxOffset-5; + + tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4), ui::Point(30, 16), "Heat", "Displays temperatures of the elements, dark blue is coldest, pink is hottest"); + colourModes.push_back(tCheckbox); + tCheckbox->SetIcon(IconHeat); + tCheckbox->SetActionCallback(new ColourModeAction(this, COLOUR_HEAT)); + AddComponent(tCheckbox); + + tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4+18), ui::Point(30, 16), "Life", "Displays the life value of elements in greyscale gradients"); + colourModes.push_back(tCheckbox); + tCheckbox->SetIcon(IconLife); + tCheckbox->SetActionCallback(new ColourModeAction(this, COLOUR_LIFE)); + AddComponent(tCheckbox); + + checkboxOffset += cSpace; + + tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4+18), ui::Point(30, 16), "H-Gradient", "Changes colors of elements slightly to show heat diffusing through them"); + colourModes.push_back(tCheckbox); + tCheckbox->SetIcon(IconGradient); + tCheckbox->SetActionCallback(new ColourModeAction(this, COLOUR_GRAD)); + AddComponent(tCheckbox); + + tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4), ui::Point(30, 16), "Basic", "No special effects at all for anything, overrides all other options and deco"); + colourModes.push_back(tCheckbox); + tCheckbox->SetIcon(IconBasic); + tCheckbox->SetActionCallback(new ColourModeAction(this, COLOUR_BASC)); + AddComponent(tCheckbox); + + checkboxOffset += sSpace; + line4 = checkboxOffset-5; +} + +void RenderView::OnMouseDown(int x, int y, unsigned button) +{ + if(x > XRES || y < YRES) + c->Exit(); +} + +void RenderView::NotifyRendererChanged(RenderModel * sender) +{ + ren = sender->GetRenderer(); +} + +void RenderView::NotifyRenderChanged(RenderModel * sender) +{ + for(int i = 0; i < renderModes.size(); i++) + { + if(renderModes[i]->GetActionCallback()) + { + //Compares bitmasks at the moment, this means that "Point" is always on when other options that depend on it are, this might confuse some users, TODO: get the full list and compare that? + RenderModeAction * action = (RenderModeAction *)(renderModes[i]->GetActionCallback()); + if(action->renderMode == (sender->GetRenderMode() & action->renderMode)) + { + renderModes[i]->SetChecked(true); + } + else + { + renderModes[i]->SetChecked(false); + } + } + } +} + +void RenderView::NotifyDisplayChanged(RenderModel * sender) +{ + for(int i = 0; i < displayModes.size(); i++) + { + if(displayModes[i]->GetActionCallback()) + { + DisplayModeAction * action = (DisplayModeAction *)(displayModes[i]->GetActionCallback()); + if(action->displayMode == (sender->GetDisplayMode() & action->displayMode)) + { + displayModes[i]->SetChecked(true); + } + else + { + displayModes[i]->SetChecked(false); + } + } + } +} + +void RenderView::NotifyColourChanged(RenderModel * sender) +{ + for(int i = 0; i < colourModes.size(); i++) + { + if(colourModes[i]->GetActionCallback()) + { + ColourModeAction * action = (ColourModeAction *)(colourModes[i]->GetActionCallback()); + if(action->colourMode == sender->GetColourMode()) + { + colourModes[i]->SetChecked(true); + } + else + { + colourModes[i]->SetChecked(false); + } + } + } +} + +void RenderView::OnDraw() +{ + Graphics * g = ui::Engine::Ref().g; + g->clearrect(-1, -1, XRES+BARSIZE+1, YRES+MENUSIZE+1); + if(ren) + { + ren->clearScreen(1.0f); + ren->RenderBegin(); + ren->RenderEnd(); + } + g->draw_line(0, YRES, XRES-1, YRES, 200, 200, 200, 255); + g->draw_line(line1, YRES, line1, YRES+MENUSIZE, 200, 200, 200, 255); + g->draw_line(line2, YRES, line2, YRES+MENUSIZE, 200, 200, 200, 255); + g->draw_line(line3, YRES, line3, YRES+MENUSIZE, 200, 200, 200, 255); + g->draw_line(line4, YRES, line4, YRES+MENUSIZE, 200, 200, 200, 255); + g->draw_line(XRES, 0, XRES, YRES+MENUSIZE, 255, 255, 255, 255); + if(toolTipPresence && toolTip.length()) + { + g->drawtext(6, Size.Y-MENUSIZE-12, (char*)toolTip.c_str(), 255, 255, 255, toolTipPresence>51?255:toolTipPresence*5); + } +} + +void RenderView::OnTick(float dt) +{ + if(toolTipPresence>0) + { + toolTipPresence -= int(dt)>0?int(dt):1; + if(toolTipPresence<0) + toolTipPresence = 0; + } +} + +void RenderView::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt) +{ + if (shift && key == '1') + c->LoadRenderPreset(10); + else if(key >= '0' && key <= '9') + { + c->LoadRenderPreset(key-'0'); + } +} + +void RenderView::ToolTip(ui::Component * sender, ui::Point mousePosition, std::string toolTip) +{ + this->toolTip = toolTip; + toolTipPresence = 500; +} + +RenderView::~RenderView() { +} diff --git a/src/gui/render/RenderView.h b/src/gui/render/RenderView.h new file mode 100644 index 0000000..8a65eb1 --- /dev/null +++ b/src/gui/render/RenderView.h @@ -0,0 +1,43 @@ +#ifndef RENDERVIEW_H_ +#define RENDERVIEW_H_ + + +#include <vector> +#include "gui/interface/Window.h" +#include "RenderController.h" +#include "RenderModel.h" +#include "graphics/Renderer.h" +#include "gui/interface/Checkbox.h" +#include "gui/interface/Button.h" + +class RenderController; +class RenderModel; +class RenderView: public ui::Window { + RenderController * c; + Renderer * ren; + std::vector<ui::Checkbox*> renderModes; + std::vector<ui::Checkbox*> displayModes; + std::vector<ui::Checkbox*> colourModes; + std::string toolTip; + int toolTipPresence; + int line1, line2, line3, line4; +public: + class RenderModeAction; + class DisplayModeAction; + class ColourModeAction; + class RenderPresetAction; + RenderView(); + void NotifyRendererChanged(RenderModel * sender); + void NotifyRenderChanged(RenderModel * sender); + void NotifyDisplayChanged(RenderModel * sender); + void NotifyColourChanged(RenderModel * sender); + void AttachController(RenderController * c_) { c = c_; } + void OnMouseDown(int x, int y, unsigned button); + virtual void OnDraw(); + virtual void OnTick(float dt); + virtual void OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt); + virtual void ToolTip(ui::Component * sender, ui::Point mousePosition, std::string toolTip); + virtual ~RenderView(); +}; + +#endif /* RENDERVIEW_H_ */ |
