summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-01-27 09:38:56 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-01-27 09:38:56 (GMT)
commitebd80c73de6b02e1fcf731aa0f377b6085128e57 (patch)
tree24c380dbfbde4c3dc34dc1f995f0ad2b177b6e7a /src
parente84f0fc6e5301265708a99b13ab898ce45422611 (diff)
downloadpowder-ebd80c73de6b02e1fcf731aa0f377b6085128e57.zip
powder-ebd80c73de6b02e1fcf731aa0f377b6085128e57.tar.gz
Some inlines and Checkbox ui component
Diffstat (limited to 'src')
-rw-r--r--src/Graphics.cpp2
-rw-r--r--src/Graphics.h22
-rw-r--r--src/Renderer.cpp122
-rw-r--r--src/Renderer.h27
-rw-r--r--src/game/GameView.cpp4
-rw-r--r--src/interface/Button.cpp2
-rw-r--r--src/interface/Checkbox.cpp89
-rw-r--r--src/interface/Checkbox.h40
-rw-r--r--src/render/RenderView.cpp5
-rw-r--r--src/render/RenderView.h4
10 files changed, 247 insertions, 70 deletions
diff --git a/src/Graphics.cpp b/src/Graphics.cpp
index ae4926a..a48f6d6 100644
--- a/src/Graphics.cpp
+++ b/src/Graphics.cpp
@@ -70,7 +70,7 @@ int plasma_data_points = 5;
pixel plasma_data_colours[] = {PIXPACK(0xAFFFFF), PIXPACK(0xAFFFFF), PIXPACK(0x301060), PIXPACK(0x301040), PIXPACK(0x000000)};
float plasma_data_pos[] = {1.0f, 0.9f, 0.5f, 0.25, 0.0f};*/
-char * Graphics::generate_gradient(pixel * colours, float * points, int pointcount, int size)
+char * Graphics::GenerateGradient(pixel * colours, float * points, int pointcount, int size)
{
int cp, i, j;
pixel ptemp;
diff --git a/src/Graphics.h b/src/Graphics.h
index 82117a7..25cb5d6 100644
--- a/src/Graphics.h
+++ b/src/Graphics.h
@@ -91,8 +91,8 @@ public:
SDL_Surface * sdl_scrn;
pixel *vid;
pixel *render_packed_rgb(void *image, int width, int height, int cmp_size);
- static char * generate_gradient(pixel * colours, float * points, int pointcount, int size);
- void draw_other();
+ static char * GenerateGradient(pixel * colours, float * points, int pointcount, int size);
+ //void draw_other();
void draw_rgba_image(unsigned char *data, int x, int y, float a);
static void *ptif_pack(pixel *src, int w, int h, int *result_size);
static pixel *ptif_unpack(void *datain, int size, int *w, int *h);
@@ -103,13 +103,13 @@ public:
//void sdl_blit_1(int x, int y, int w, int h, pixel *src, int pitch);
//void sdl_blit_2(int x, int y, int w, int h, pixel *src, int pitch);
//void sdl_blit(int x, int y, int w, int h, pixel *src, int pitch);
- void drawblob(int x, int y, unsigned char cr, unsigned char cg, unsigned char cb);
+ inline void drawblob(int x, int y, unsigned char cr, unsigned char cg, unsigned char cb);
void draw_tool(int b, int sl, int sr, unsigned pc, unsigned iswall);
//int draw_tool_xy(pixel *vid_buf, int x, int y, int b, unsigned pc);
//void draw_menu(pixel *vid_buf, int i, int hover);
void drawpixel(int x, int y, int r, int g, int b, int a);
- int addchar(int x, int y, int c, int r, int g, int b, int a);
- int drawchar(int x, int y, int c, int r, int g, int b, int a);
+ inline int addchar(int x, int y, int c, int r, int g, int b, int a);
+ inline int drawchar(int x, int y, int c, int r, int g, int b, int a);
int drawtext(int x, int y, std::string &s, int r, int g, int b, int a);
int drawtext(int x, int y, const char *s, int r, int g, int b, int a);
int drawtext_outline(int x, int y, const char *s, int r, int g, int b, int a, int olr, int olg, int olb, int ola);
@@ -125,17 +125,17 @@ public:
static int textwidthx(char *s, int w);
static int textposxy(char *s, int width, int w, int h);
static int textwrapheight(char *s, int width);
- void blendpixel(int x, int y, int r, int g, int b, int a);
+ inline void blendpixel(int x, int y, int r, int g, int b, int a);
void draw_icon(int x, int y, char ch, int flag);
//void draw_air();
//void draw_grav_zones(pixel *vid);
//void draw_grav(pixel *vid);
void draw_line(int x1, int y1, int x2, int y2, int r, int g, int b, int a);
- void addpixel(int x, int y, int r, int g, int b, int a);
+ inline void addpixel(int x, int y, int r, int g, int b, int a);
void xor_pixel(int x, int y);
void xor_line(int x1, int y1, int x2, int y2);
void xor_rect(int x, int y, int w, int h);
- void blend_line(int x1, int y1, int x2, int y2, int r, int g, int b, int a);
+ inline void blend_line(int x1, int y1, int x2, int y2, int r, int g, int b, int a);
//void render_parts(pixel *vid);
// #ifdef OGLR
// void draw_parts_fbo();
@@ -147,11 +147,11 @@ public:
// void line_decorations(int x1, int y1, int x2, int y2, int rx, int ry, int r, int g, int b, int click, int tool);
// void box_decorations(int x1, int y1, int x2, int y2, int r, int g, int b, int click, int tool);
// void draw_color_menu(pixel *vid_buf, int i, int hover);
- void draw_wavelengths(int x, int y, int h, int wl);
- void render_signs();
+ inline void draw_wavelengths(int x, int y, int h, int wl);
+ //void render_signs();
// void render_fire(pixel *dst);
// void prepare_alpha(int size, float intensity);
- void draw_image(pixel *img, int x, int y, int w, int h, int a);
+ inline void draw_image(pixel *img, int x, int y, int w, int h, int a);
static void dim_copy(pixel *dst, pixel *src);
static void dim_copy_pers(pixel *dst, pixel *src);
//void render_zoom(pixel *img);
diff --git a/src/Renderer.cpp b/src/Renderer.cpp
index 4226483..c602232 100644
--- a/src/Renderer.cpp
+++ b/src/Renderer.cpp
@@ -18,7 +18,7 @@ extern "C"
#include "hmap.h"
}
-void Renderer::draw_walls()
+void Renderer::DrawWalls()
{
int x, y, i, j, cr, cg, cb;
unsigned char wt;
@@ -250,7 +250,7 @@ void Renderer::get_sign_pos(int i, int *x0, int *y0, int *w, int *h)
*y0 = (signs[i].y > 18) ? signs[i].y - 18 : signs[i].y + 4;
}
-void Renderer::render_signs()
+void Renderer::DrawSigns()
{
int i, j, x, y, w, h, dx, dy,mx,my,b=1,bq;
sign *signs = sim->signs;
@@ -1429,12 +1429,6 @@ void Renderer::render_parts()
#endif
}
-void Renderer::prepare_graphicscache()
-{
- graphicscache = (gcache_item *)malloc(sizeof(gcache_item)*PT_NUM);
- memset(graphicscache, 0, sizeof(gcache_item)*PT_NUM);
-}
-
void Renderer::draw_other() // EMP effect
{
int i, j;
@@ -1648,33 +1642,6 @@ void Renderer::draw_grav_zones()
}
}
-void Renderer::init_display_modes()
-{
- int i;
- colour_mode = COLOUR_DEFAULT;
- display_modes = (unsigned int*)calloc(1, sizeof(unsigned int));
- render_modes = (unsigned int*)calloc(2, sizeof(unsigned int));
-
- display_modes[0] = 0;
- render_modes[0] = RENDER_FIRE;
- render_modes[1] = 0;
-
- display_mode = 0;
- i = 0;
- while(display_modes[i])
- {
- display_mode |= display_modes[i];
- i++;
- }
- render_mode = 0;
- i = 0;
- while(render_modes[i])
- {
- render_mode |= render_modes[i];
- i++;
- }
-}
-
Renderer::Renderer(Graphics * g, Simulation * sim):
sim(NULL),
g(NULL)
@@ -1686,19 +1653,82 @@ Renderer::Renderer(Graphics * g, Simulation * sim):
memset(fire_g, 0, sizeof(fire_g));
memset(fire_b, 0, sizeof(fire_b));
prepare_alpha(CELL, 1.0f);
- init_display_modes();
- prepare_graphicscache();
- int flm_data_points = 4;
- pixel flm_data_colours[] = {PIXPACK(0xAF9F0F), PIXPACK(0xDFBF6F), PIXPACK(0x60300F), PIXPACK(0x000000)};
- float flm_data_pos[] = {1.0f, 0.9f, 0.5f, 0.0f};
+ //Set defauly display modes
+ SetColourMode(COLOUR_DEFAULT);
+ AddRenderMode(RENDER_FIRE);
+
+ //Prepare the graphics cache
+ graphicscache = (gcache_item *)malloc(sizeof(gcache_item)*PT_NUM);
+ memset(graphicscache, 0, sizeof(gcache_item)*PT_NUM);
+
+ int fireColoursCount = 4;
+ pixel fireColours[] = {PIXPACK(0xAF9F0F), PIXPACK(0xDFBF6F), PIXPACK(0x60300F), PIXPACK(0x000000)};
+ float fireColoursPoints[] = {1.0f, 0.9f, 0.5f, 0.0f};
+
+ int plasmaColoursCount = 5;
+ pixel plasmaColours[] = {PIXPACK(0xAFFFFF), PIXPACK(0xAFFFFF), PIXPACK(0x301060), PIXPACK(0x301040), PIXPACK(0x000000)};
+ float plasmaColoursPoints[] = {1.0f, 0.9f, 0.5f, 0.25, 0.0f};
- int plasma_data_points = 5;
- pixel plasma_data_colours[] = {PIXPACK(0xAFFFFF), PIXPACK(0xAFFFFF), PIXPACK(0x301060), PIXPACK(0x301040), PIXPACK(0x000000)};
- float plasma_data_pos[] = {1.0f, 0.9f, 0.5f, 0.25, 0.0f};
+ flm_data = Graphics::GenerateGradient(fireColours, fireColoursPoints, fireColoursCount, 200);
+ plasma_data = Graphics::GenerateGradient(plasmaColours, plasmaColoursPoints, plasmaColoursCount, 200);
+}
- flm_data = Graphics::generate_gradient(flm_data_colours, flm_data_pos, flm_data_points, 200);
- plasma_data = Graphics::generate_gradient(plasma_data_colours, plasma_data_pos, plasma_data_points, 200);
+void Renderer::CompileRenderMode()
+{
+ render_mode = 0;
+ for(int i = 0; i < render_modes.size(); i++)
+ render_mode |= render_modes[i];
+}
+
+void Renderer::AddRenderMode(unsigned int mode)
+{
+ render_modes.push_back(mode);
+ CompileRenderMode();
+}
+
+void Renderer::RemoveRenderMode(unsigned int mode)
+{
+ for(int i = 0; i < render_modes.size(); i++)
+ {
+ if(render_modes[i] == mode)
+ {
+ render_modes.erase(render_modes.begin() + i);
+ return;
+ }
+ }
+ CompileRenderMode();
+}
+
+void Renderer::CompileDisplayMode()
+{
+ display_mode = 0;
+ for(int i = 0; i < display_modes.size(); i++)
+ display_mode |= display_modes[i];
+}
+
+void Renderer::AddDisplayMode(unsigned int mode)
+{
+ display_modes.push_back(mode);
+ CompileDisplayMode();
+}
+
+void Renderer::RemoveDisplayMode(unsigned int mode)
+{
+ for(int i = 0; i < display_modes.size(); i++)
+ {
+ if(display_modes[i] == mode)
+ {
+ display_modes.erase(display_modes.begin() + i);
+ return;
+ }
+ }
+ CompileDisplayMode();
+}
+
+void Renderer::SetColourMode(unsigned int mode)
+{
+ colour_mode = mode;
}
Renderer::~Renderer()
@@ -1706,6 +1736,4 @@ Renderer::~Renderer()
free(graphicscache);
free(flm_data);
free(plasma_data);
- free(render_modes);
- free(display_modes);
}
diff --git a/src/Renderer.h b/src/Renderer.h
index 8592e41..d43e0cb 100644
--- a/src/Renderer.h
+++ b/src/Renderer.h
@@ -1,6 +1,7 @@
#ifndef RENDERER_H
#define RENDERER_H
+#include <vector>
#include "Config.h"
#include "simulation/Simulation.h"
#include "Graphics.h"
@@ -21,11 +22,10 @@ typedef struct gcache_item gcache_item;
class Renderer
{
public:
- //TODO: Vectors!
- unsigned int *render_modes;
+ std::vector<unsigned int> render_modes;
unsigned int render_mode;
unsigned int colour_mode;
- unsigned int *display_modes;
+ std::vector<unsigned int> display_modes;
unsigned int display_mode;
//
unsigned char fire_r[YRES/CELL][XRES/CELL];
@@ -40,9 +40,10 @@ public:
Simulation * sim;
Graphics * g;
gcache_item *graphicscache;
- //
- void draw_walls();
- void render_signs();
+
+ //Renderers
+ void DrawWalls();
+ void DrawSigns();
void render_gravlensing();
void render_fire();
void prepare_alpha(int size, float intensity);
@@ -51,9 +52,19 @@ public:
void draw_air();
void draw_grav();
void draw_other();
- void init_display_modes();
+
+ //...
void get_sign_pos(int i, int *x0, int *y0, int *w, int *h);
- void prepare_graphicscache();
+
+ //Display mode modifiers
+ void CompileDisplayMode();
+ void CompileRenderMode();
+ void AddRenderMode(unsigned int mode);
+ void RemoveRenderMode(unsigned int mode);
+ void AddDisplayMode(unsigned int mode);
+ void RemoveDisplayMode(unsigned int mode);
+ void SetColourMode(unsigned int mode);
+
Renderer(Graphics * g, Simulation * sim);
~Renderer();
};
diff --git a/src/game/GameView.cpp b/src/game/GameView.cpp
index ec87f64..3f31554 100644
--- a/src/game/GameView.cpp
+++ b/src/game/GameView.cpp
@@ -428,8 +428,8 @@ void GameView::OnDraw()
{
ren->render_parts();
ren->render_fire();
- ren->render_signs();
- ren->draw_walls();
+ ren->DrawSigns();
+ ren->DrawWalls();
}
if(activeBrush && currentMouse.X > 0 && currentMouse.X < XRES && currentMouse.Y > 0 && currentMouse.Y < YRES)
{
diff --git a/src/interface/Button.cpp b/src/interface/Button.cpp
index 8fe847e..b145b38 100644
--- a/src/interface/Button.cpp
+++ b/src/interface/Button.cpp
@@ -204,6 +204,8 @@ void Button::DoAction()
void Button::SetActionCallback(ButtonAction * action)
{
+ if(actionCallback)
+ delete actionCallback;
actionCallback = action;
}
diff --git a/src/interface/Checkbox.cpp b/src/interface/Checkbox.cpp
new file mode 100644
index 0000000..3244552
--- /dev/null
+++ b/src/interface/Checkbox.cpp
@@ -0,0 +1,89 @@
+/*
+ * Checkbox.cpp
+ *
+ * Created on: Jan 26, 2012
+ * Author: Simon
+ */
+
+#include "Checkbox.h"
+
+using namespace ui;
+
+Checkbox::Checkbox(ui::Point position, ui::Point size, std::string text):
+ Component(position, size),
+ text(text),
+ isMouseOver(false),
+ checked(false),
+ actionCallback(NULL)
+{
+ // TODO Auto-generated constructor stub
+
+}
+
+void Checkbox::SetText(std::string text)
+{
+ this->text = text;
+}
+
+void Checkbox::OnMouseClick(int x, int y, unsigned int button)
+{
+ if(checked)
+ {
+ checked = false;
+ }
+ else
+ {
+ checked = true;
+ }
+ if(actionCallback)
+ actionCallback->ActionCallback(this);
+}
+
+void Checkbox::OnMouseUp(int x, int y, unsigned int button)
+{
+
+}
+
+
+void Checkbox::OnMouseEnter(int x, int y)
+{
+ isMouseOver = true;
+}
+
+void Checkbox::OnMouseLeave(int x, int y)
+{
+ isMouseOver = false;
+}
+
+void Checkbox::Draw(const Point& screenPos)
+{
+ Graphics * g = Engine::Ref().g;
+ if(checked)
+ {
+ g->fillrect(screenPos.X+4, screenPos.Y+4, 8, 8, 255, 255, 255, 255);
+ }
+ if(isMouseOver)
+ {
+ g->drawrect(screenPos.X+2, screenPos.Y+2, 12, 12, 255, 255, 255, 255);
+ g->fillrect(screenPos.X+4, screenPos.Y+4, 8, 8, 255, 255, 255, 170);
+ g->drawtext(screenPos.X+18, screenPos.Y+4, text, 255, 255, 255, 255);
+ }
+ else
+ {
+ g->drawrect(screenPos.X+2, screenPos.Y+2, 12, 12, 255, 255, 255, 200);
+ g->drawtext(screenPos.X+18, screenPos.Y+4, text, 255, 255, 255, 200);
+ }
+}
+
+void Checkbox::SetActionCallback(CheckboxAction * action)
+{
+ if(actionCallback)
+ delete actionCallback;
+ actionCallback = action;
+}
+
+Checkbox::~Checkbox() {
+ if(actionCallback)
+ delete actionCallback;
+}
+
diff --git a/src/interface/Checkbox.h b/src/interface/Checkbox.h
new file mode 100644
index 0000000..ed7dc95
--- /dev/null
+++ b/src/interface/Checkbox.h
@@ -0,0 +1,40 @@
+/*
+ * Checkbox.h
+ *
+ * Created on: Jan 26, 2012
+ * Author: Simon
+ */
+
+#ifndef CHECKBOX_H_
+#define CHECKBOX_H_
+
+#include <string>
+#include "Component.h"
+namespace ui
+{
+class Checkbox;
+class CheckboxAction
+{
+public:
+ virtual void ActionCallback(ui::Checkbox * sender) {}
+ virtual ~CheckboxAction() {}
+};
+class Checkbox: public ui::Component {
+ std::string text;
+ bool checked;
+ bool isMouseOver;
+ CheckboxAction * actionCallback;
+public:
+ Checkbox(ui::Point position, ui::Point size, std::string text);
+ void SetText(std::string text);
+ void Draw(const Point& screenPos);
+ virtual void OnMouseEnter(int x, int y);
+ virtual void OnMouseLeave(int x, int y);
+ virtual void OnMouseClick(int x, int y, unsigned int button);
+ virtual void OnMouseUp(int x, int y, unsigned int button);
+ void SetActionCallback(CheckboxAction * action);
+ virtual ~Checkbox();
+};
+}
+
+#endif /* CHECKBOX_H_ */
diff --git a/src/render/RenderView.cpp b/src/render/RenderView.cpp
index 93c0dec..8412126 100644
--- a/src/render/RenderView.cpp
+++ b/src/render/RenderView.cpp
@@ -12,7 +12,10 @@ RenderView::RenderView():
ui::Window(ui::Point(0, 0), ui::Point(XRES, YRES+MENUSIZE)),
ren(NULL)
{
- // TODO Auto-generated constructor stub
+ ui::Checkbox * tCheckbox;
+ tCheckbox = new ui::Checkbox(ui::Point(0, YRES+5), ui::Point(100, 16), "Thing");
+ renderModes.push_back(tCheckbox);
+ AddComponent(tCheckbox);
}
diff --git a/src/render/RenderView.h b/src/render/RenderView.h
index 37f023a..362bfb4 100644
--- a/src/render/RenderView.h
+++ b/src/render/RenderView.h
@@ -8,16 +8,20 @@
#ifndef RENDERVIEW_H_
#define RENDERVIEW_H_
+
+#include <vector>
#include "interface/Window.h"
#include "RenderController.h"
#include "RenderModel.h"
#include "Renderer.h"
+#include "interface/Checkbox.h"
class RenderController;
class RenderModel;
class RenderView: public ui::Window {
RenderController * c;
Renderer * ren;
+ std::vector<ui::Checkbox*> renderModes;
public:
RenderView();
void NotifyRendererChanged(RenderModel * sender);