From 6f29926b962538a63f9548a3331b7a52b617b46f Mon Sep 17 00:00:00 2001 From: jacob1 Date: Tue, 16 Jul 2013 13:08:57 -0400 Subject: [PATCH] deco menu button textures (not black) --- src/graphics/Graphics.cpp | 2 +- src/gui/game/DecorationTool.h | 57 +++++++++++++++++++++++++++++------ src/gui/game/GameModel.cpp | 17 ++++++----- src/gui/game/GameView.cpp | 9 ++++-- src/gui/game/SignTool.cpp | 4 +-- 5 files changed, 65 insertions(+), 24 deletions(-) diff --git a/src/graphics/Graphics.cpp b/src/graphics/Graphics.cpp index 0b7e502ba..cc18f25e3 100644 --- a/src/graphics/Graphics.cpp +++ b/src/graphics/Graphics.cpp @@ -152,7 +152,7 @@ int VideoBuffer::AddCharacter(int x, int y, int c, int r, int g, int b, int a) VideoBuffer::~VideoBuffer() { delete[] Buffer; -}; +} /** * Common graphics functions, mostly static methods that provide diff --git a/src/gui/game/DecorationTool.h b/src/gui/game/DecorationTool.h index 679c8540c..67ab915a8 100644 --- a/src/gui/game/DecorationTool.h +++ b/src/gui/game/DecorationTool.h @@ -3,22 +3,59 @@ #define DECORATIONTOOL_H_ #include "Tool.h" +#include "graphics/Graphics.h" class DecorationTool: public Tool { public: - enum ToolType { BlendAdd = DECO_ADD, BlendRemove = DECO_SUBTRACT, BlendMultiply = DECO_MULTIPLY, BlendDivide = DECO_DIVIDE, BlendSet = DECO_DRAW, BlendSmudge = DECO_SMUDGE, Remove = DECO_CLEAR }; - - ToolType decoMode; - unsigned char Red; unsigned char Green; unsigned char Blue; unsigned char Alpha; - DecorationTool(ToolType decoMode_, string name, string description, int r, int g, int b, std::string identifier): - Tool(0, name, description, r, g, b, identifier), - decoMode(decoMode_), + VideoBuffer * GetIcon(int toolID, int width, int height) + { + VideoBuffer * newTexture = new VideoBuffer(width, height); + for (int y=0; ySetPixel(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), @@ -27,13 +64,13 @@ public: } virtual ~DecorationTool() {} virtual void Draw(Simulation * sim, Brush * brush, ui::Point position){ - sim->ApplyDecorationPoint(position.X, position.Y, Red, Green, Blue, Alpha, decoMode, brush); + 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, decoMode, brush); + 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, decoMode); + 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) { diff --git a/src/gui/game/GameModel.cpp b/src/gui/game/GameModel.cpp index 437805042..0852e7110 100644 --- a/src/gui/game/GameModel.cpp +++ b/src/gui/game/GameModel.cpp @@ -327,13 +327,13 @@ void GameModel::BuildMenus() menuList[SC_TOOL]->AddTool(new SampleTool(this)); //Add decoration tools to menu - menuList[SC_DECO]->AddTool(new DecorationTool(DecorationTool::BlendAdd, "ADD", "Colour blending: Add", 0, 0, 0, "DEFAULT_DECOR_ADD")); - menuList[SC_DECO]->AddTool(new DecorationTool(DecorationTool::BlendRemove, "SUB", "Colour blending: Subtract", 0, 0, 0, "DEFAULT_DECOR_SUB")); - menuList[SC_DECO]->AddTool(new DecorationTool(DecorationTool::BlendMultiply, "MUL", "Colour blending: Multiply", 0, 0, 0, "DEFAULT_DECOR_MUL")); - menuList[SC_DECO]->AddTool(new DecorationTool(DecorationTool::BlendDivide, "DIV", "Colour blending: Divide" , 0, 0, 0, "DEFAULT_DECOR_DIV")); - menuList[SC_DECO]->AddTool(new DecorationTool(DecorationTool::BlendSmudge, "SMDG", "Smudge colour", 0, 0, 0, "DEFAULT_DECOR_SMDG")); - menuList[SC_DECO]->AddTool(new DecorationTool(DecorationTool::BlendSet, "SET", "Set colour (No blending)", 0, 0, 0, "DEFAULT_DECOR_SET")); - menuList[SC_DECO]->AddTool(new DecorationTool(DecorationTool::Remove, "CLR", "Clear any set decoration", 0, 0, 0, "DEFAULT_DECOR_CLR")); + menuList[SC_DECO]->AddTool(new DecorationTool(DECO_ADD, "ADD", "Colour blending: Add", 0, 0, 0, "DEFAULT_DECOR_ADD")); + menuList[SC_DECO]->AddTool(new DecorationTool(DECO_SUBTRACT, "SUB", "Colour blending: Subtract", 0, 0, 0, "DEFAULT_DECOR_SUB")); + menuList[SC_DECO]->AddTool(new DecorationTool(DECO_MULTIPLY, "MUL", "Colour blending: Multiply", 0, 0, 0, "DEFAULT_DECOR_MUL")); + menuList[SC_DECO]->AddTool(new DecorationTool(DECO_DIVIDE, "DIV", "Colour blending: Divide" , 0, 0, 0, "DEFAULT_DECOR_DIV")); + menuList[SC_DECO]->AddTool(new DecorationTool(DECO_SMUDGE, "SMDG", "Smudge colour", 0, 0, 0, "DEFAULT_DECOR_SMDG")); + menuList[SC_DECO]->AddTool(new DecorationTool(DECO_DRAW, "SET", "Set colour (No blending)", 0, 0, 0, "DEFAULT_DECOR_SET")); + menuList[SC_DECO]->AddTool(new DecorationTool(DECO_CLEAR, "CLR", "Clear any set decoration", 0, 0, 0, "DEFAULT_DECOR_CLR")); decoToolset[0] = GetToolFromIdentifier("DEFAULT_DECOR_SET"); decoToolset[1] = GetToolFromIdentifier("DEFAULT_DECOR_CLR"); decoToolset[2] = GetToolFromIdentifier("DEFAULT_UI_SAMPLE"); @@ -762,7 +762,6 @@ bool GameModel::GetColourSelectorVisibility() void GameModel::SetColourSelectorColour(ui::Colour colour_) { colour = colour_; - notifyColourSelectorColourChanged(); vector tools = GetMenuList()[SC_DECO]->GetToolList(); for(int i = 0; i < tools.size(); i++) @@ -772,6 +771,8 @@ void GameModel::SetColourSelectorColour(ui::Colour colour_) ((DecorationTool*)tools[i])->Blue = colour.Blue; ((DecorationTool*)tools[i])->Alpha = colour.Alpha; } + + notifyColourSelectorColourChanged(); } ui::Colour GameModel::GetColourSelectorColour() diff --git a/src/gui/game/GameView.cpp b/src/gui/game/GameView.cpp index 96806b1c7..1b811e04b 100644 --- a/src/gui/game/GameView.cpp +++ b/src/gui/game/GameView.cpp @@ -17,6 +17,7 @@ #include "Format.h" #include "QuickOption.h" #include "IntroText.h" +#include "DecorationTool.h" class SplitButton; @@ -656,10 +657,8 @@ void GameView::NotifyLastToolChanged(GameModel * sender) void GameView::NotifyToolListChanged(GameModel * sender) { - //int currentY = YRES+MENUSIZE-36; lastOffset = 0; int currentX = XRES+BARSIZE-56; - int totalColour; for(int i = 0; i < menuButtons.size(); i++) { if(((MenuAction*)menuButtons[i]->GetActionCallback())->menuID==sender->GetActiveMenu()) @@ -680,10 +679,13 @@ void GameView::NotifyToolListChanged(GameModel * sender) vector toolList = sender->GetToolList(); for(int i = 0; i < toolList.size(); i++) { - //ToolButton * tempButton = new ToolButton(ui::Point(XRES+1, currentY), ui::Point(28, 15), toolList[i]->GetName()); VideoBuffer * tempTexture = toolList[i]->GetTexture(26, 14); ToolButton * tempButton; + //get decotool texture manually, since it changes depending on it's own color + if (sender->GetActiveMenu() == SC_DECO) + tempTexture = ((DecorationTool*)toolList[i])->GetIcon(toolList[i]->GetToolID(), 26, 14); + if(tempTexture) tempButton = new ToolButton(ui::Point(currentX, YRES+1), ui::Point(30, 18), "", toolList[i]->GetDescription()); else @@ -808,6 +810,7 @@ void GameView::NotifyColourSelectorColourChanged(GameModel * sender) { colourPicker->Appearance.BackgroundInactive = sender->GetColourSelectorColour(); colourPicker->Appearance.BackgroundHover = sender->GetColourSelectorColour(); + NotifyToolListChanged(sender); } void GameView::NotifyRendererChanged(GameModel * sender) diff --git a/src/gui/game/SignTool.cpp b/src/gui/game/SignTool.cpp index a4042b197..5e7eb0ab4 100644 --- a/src/gui/game/SignTool.cpp +++ b/src/gui/game/SignTool.cpp @@ -26,8 +26,8 @@ public: virtual void DoMouseDown(int x, int y, unsigned button); virtual void DoMouseUp(int x, int y, unsigned button) { if(!signMoving) ui::Window::DoMouseUp(x, y, button); } virtual void DoMouseWheel(int x, int y, int d) { if(!signMoving) ui::Window::DoMouseWheel(x, y, d); } - virtual void DoKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt) { if(!signMoving) ui::Window::DoKeyPress(key, character, shift, ctrl, alt); }; - virtual void DoKeyRelease(int key, Uint16 character, bool shift, bool ctrl, bool alt) { if(!signMoving) ui::Window::DoKeyRelease(key, character, shift, ctrl, alt); }; + virtual void DoKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt) { if(!signMoving) ui::Window::DoKeyPress(key, character, shift, ctrl, alt); } + virtual void DoKeyRelease(int key, Uint16 character, bool shift, bool ctrl, bool alt) { if(!signMoving) ui::Window::DoKeyRelease(key, character, shift, ctrl, alt); } virtual ~SignWindow() {} virtual void OnTryExit(ui::Window::ExitMethod method); class OkayAction: public ui::ButtonAction