summaryrefslogtreecommitdiff
path: root/src/gui/game/DecorationTool.h
blob: 67ab915a871a13f90819acaa6a0379df39059cf8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80

#ifndef DECORATIONTOOL_H_
#define DECORATIONTOOL_H_

#include "Tool.h"
#include "graphics/Graphics.h"

class DecorationTool: public Tool
{
public:
	unsigned char Red;
	unsigned char Green;
	unsigned char Blue;
	unsigned char Alpha;

	VideoBuffer * GetIcon(int toolID, int width, int height)
	{
		VideoBuffer * newTexture = new VideoBuffer(width, height);
		for (int y=0; y<height; y++)
		{
			for (int x=0; x<width; x++)
			{
				//if (toolID == DECO_LIGH)
				//	vid_buf[(XRES+BARSIZE)*(y+j)+(x+i)] = PIXRGB(PIXR(pc)-10*j, PIXG(pc)-10*j, PIXB(pc)-10*j);
				//else if (toolID == DECO_DARK)
				//	vid_buf[(XRES+BARSIZE)*(y+j)+(x+i)] = PIXRGB(PIXR(pc)+10*j, PIXG(pc)+10*j, PIXB(pc)+10*j);
				if (toolID == DECO_SMUDGE)
					newTexture->SetPixel(x, y, 0, 255-5*x, 255+5*x, 255);
				else
					newTexture->SetPixel(x, y, Red, Green, Blue, Alpha);
			}
		}
		int reverseRed = (Red+127)%256;
		int reverseGreen = (Green+127)%256;
		int reverseBlue = (Blue+127)%256;
		if (toolID == DECO_CLEAR)
		{
			for (int y=4; y<12; y++)
			{
				newTexture->SetPixel(y+5, y-1, reverseRed, reverseGreen, reverseBlue, 255);
				newTexture->SetPixel(y+6, y-1, reverseRed, reverseGreen, reverseBlue, 255);
				newTexture->SetPixel(20-y, y-1, reverseRed, reverseGreen, reverseBlue, 255);
				newTexture->SetPixel(21-y, y-1, reverseRed, reverseGreen, reverseBlue, 255);
			}
		}
		else if (toolID == DECO_ADD)
			newTexture->AddCharacter(11, 4, '+', reverseRed, reverseGreen, reverseBlue, 255);
		else if (toolID == DECO_SUBTRACT)
			newTexture->AddCharacter(11, 4, '-', reverseRed, reverseGreen, reverseBlue, 255);
		else if (toolID == DECO_MULTIPLY)
			newTexture->AddCharacter(11, 3, 'x', reverseRed, reverseGreen, reverseBlue, 255);
		else if (toolID == DECO_DIVIDE)
			newTexture->AddCharacter(11, 4, '/', reverseRed, reverseGreen, reverseBlue, 255);
		return newTexture;
	}

	DecorationTool(int decoMode, string name, string description, int r, int g, int b, std::string identifier):
		Tool(decoMode, name, description, r, g, b, identifier),
		Red(0),
		Green(0),
		Blue(0),
		Alpha(0)
	{
	}
	virtual ~DecorationTool() {}
	virtual void Draw(Simulation * sim, Brush * brush, ui::Point position){
		sim->ApplyDecorationPoint(position.X, position.Y, Red, Green, Blue, Alpha, toolID, brush);
	}
	virtual void DrawLine(Simulation * sim, Brush * brush, ui::Point position1, ui::Point position2, bool dragging) {
		sim->ApplyDecorationLine(position1.X, position1.Y, position2.X, position2.Y, Red, Green, Blue, Alpha, toolID, brush);
	}
	virtual void DrawRect(Simulation * sim, Brush * brush, ui::Point position1, ui::Point position2) {
		sim->ApplyDecorationBox(position1.X, position1.Y, position2.X, position2.Y, Red, Green, Blue, Alpha, toolID);
	}
	virtual void DrawFill(Simulation * sim, Brush * brush, ui::Point position) {

	}
};

#endif