summaryrefslogtreecommitdiff
path: root/src/render/RenderView.cpp
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-01-27 13:27:40 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-01-27 13:27:40 (GMT)
commit2a7628dfd0037fde1f504b276b262ebc9328df60 (patch)
tree2db9118d73490c738e3a77ac315fced408f34e05 /src/render/RenderView.cpp
parent1c971e4b4210359e400511ad61b8e4eff2f7a79a (diff)
downloadpowder-2a7628dfd0037fde1f504b276b262ebc9328df60.zip
powder-2a7628dfd0037fde1f504b276b262ebc9328df60.tar.gz
Render options
Diffstat (limited to 'src/render/RenderView.cpp')
-rw-r--r--src/render/RenderView.cpp189
1 files changed, 186 insertions, 3 deletions
diff --git a/src/render/RenderView.cpp b/src/render/RenderView.cpp
index 5551615..25978bc 100644
--- a/src/render/RenderView.cpp
+++ b/src/render/RenderView.cpp
@@ -13,8 +13,8 @@
class RenderView::RenderModeAction: public ui::CheckboxAction
{
RenderView * v;
- unsigned int renderMode;
public:
+ unsigned int renderMode;
RenderModeAction(RenderView * v_, unsigned int renderMode_)
{
v = v_;
@@ -22,23 +22,145 @@ public:
}
virtual void ActionCallback(ui::Checkbox * sender)
{
- if(sender->IsChecked())
+ 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);
+ }
+};
+
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), "Blob");
+
+ tCheckbox = new ui::Checkbox(ui::Point(1, YRES+4), ui::Point(55, 16), "Effects");
+ renderModes.push_back(tCheckbox);
+ tCheckbox->SetActionCallback(new RenderModeAction(this, RENDER_EFFE));
+ AddComponent(tCheckbox);
+
+ tCheckbox = new ui::Checkbox(ui::Point(1, YRES+4+18), ui::Point(55, 16), "Fire");
+ renderModes.push_back(tCheckbox);
+ tCheckbox->SetActionCallback(new RenderModeAction(this, RENDER_FIRE));
+ AddComponent(tCheckbox);
+
+ tCheckbox = new ui::Checkbox(ui::Point(61, YRES+4), ui::Point(55, 16), "Glow");
+ renderModes.push_back(tCheckbox);
+ tCheckbox->SetActionCallback(new RenderModeAction(this, RENDER_GLOW));
+ AddComponent(tCheckbox);
+
+ tCheckbox = new ui::Checkbox(ui::Point(61, YRES+4+18), ui::Point(55, 16), "Blur");
+ renderModes.push_back(tCheckbox);
+ tCheckbox->SetActionCallback(new RenderModeAction(this, RENDER_BLUR));
+ AddComponent(tCheckbox);
+
+ tCheckbox = new ui::Checkbox(ui::Point(121, YRES+4), ui::Point(55, 16), "Blob");
renderModes.push_back(tCheckbox);
tCheckbox->SetActionCallback(new RenderModeAction(this, RENDER_BLOB));
AddComponent(tCheckbox);
+ tCheckbox = new ui::Checkbox(ui::Point(121, YRES+4+18), ui::Point(55, 16), "Point");
+ renderModes.push_back(tCheckbox);
+ tCheckbox->SetActionCallback(new RenderModeAction(this, RENDER_BASC));
+ AddComponent(tCheckbox);
+
+ tCheckbox = new ui::Checkbox(ui::Point(186, YRES+4), ui::Point(70, 16), "Alt. Air");
+ displayModes.push_back(tCheckbox);
+ tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_AIRC));
+ AddComponent(tCheckbox);
+
+ tCheckbox = new ui::Checkbox(ui::Point(186, YRES+4+18), ui::Point(70, 16), "Pressure");
+ displayModes.push_back(tCheckbox);
+ tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_AIRP));
+ AddComponent(tCheckbox);
+
+ tCheckbox = new ui::Checkbox(ui::Point(261, YRES+4), ui::Point(70, 16), "Velocity");
+ displayModes.push_back(tCheckbox);
+ tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_AIRV));
+ AddComponent(tCheckbox);
+
+ tCheckbox = new ui::Checkbox(ui::Point(261, YRES+4+18), ui::Point(70, 16), "Air-heat");
+ displayModes.push_back(tCheckbox);
+ tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_AIRH));
+ AddComponent(tCheckbox);
+
+ tCheckbox = new ui::Checkbox(ui::Point(336, YRES+4), ui::Point(70, 16), "Air");
+ displayModes.push_back(tCheckbox);
+ tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_AIR));
+ AddComponent(tCheckbox);
+
+ tCheckbox = new ui::Checkbox(ui::Point(336, YRES+4+18), ui::Point(70, 16), "Warp");
+ displayModes.push_back(tCheckbox);
+ tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_WARP));
+ AddComponent(tCheckbox);
+
+ tCheckbox = new ui::Checkbox(ui::Point(411, YRES+4), ui::Point(70, 16), "Persistent");
+ displayModes.push_back(tCheckbox);
+ tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_PERS));
+ AddComponent(tCheckbox);
+
+ tCheckbox = new ui::Checkbox(ui::Point(411, YRES+4+18), ui::Point(70, 16), "Effect");
+ displayModes.push_back(tCheckbox);
+ tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_EFFE));
+ AddComponent(tCheckbox);
+
+ tCheckbox = new ui::Checkbox(ui::Point(486, YRES+4), ui::Point(50, 16), "Heat");
+ colourModes.push_back(tCheckbox);
+ tCheckbox->SetActionCallback(new ColourModeAction(this, COLOUR_HEAT));
+ AddComponent(tCheckbox);
+
+ tCheckbox = new ui::Checkbox(ui::Point(486, YRES+4+18), ui::Point(50, 16), "Life");
+ colourModes.push_back(tCheckbox);
+ tCheckbox->SetActionCallback(new ColourModeAction(this, COLOUR_LIFE));
+ AddComponent(tCheckbox);
+
+ tCheckbox = new ui::Checkbox(ui::Point(536, YRES+4+18), ui::Point(50, 16), "H-Gradient");
+ colourModes.push_back(tCheckbox);
+ tCheckbox->SetActionCallback(new ColourModeAction(this, COLOUR_GRAD));
+ AddComponent(tCheckbox);
+}
+
+void RenderView::OnMouseDown(int x, int y, unsigned button)
+{
+ if(x > XRES || y < YRES)
+ c->Exit();
}
void RenderView::NotifyRendererChanged(RenderModel * sender)
@@ -46,10 +168,71 @@ 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(0, 0, XRES, YRES+MENUSIZE);
+ g->draw_line(0, YRES, XRES-1, YRES, 255, 255, 255, XRES+BARSIZE);
+ g->draw_line(180, YRES, 180, YRES+MENUSIZE, 200, 200, 200, XRES+BARSIZE);
+ g->draw_line(480, YRES, 480, YRES+MENUSIZE, 200, 200, 200, XRES+BARSIZE);
g->draw_line(XRES-1, 0, XRES-1, YRES+MENUSIZE, 255, 255, 255, XRES+BARSIZE);
if(ren)
{