From 81f3114cb22592a8c09fa564db49fbea079f1328 Mon Sep 17 00:00:00 2001 From: Simon Robertshaw Date: Mon, 5 Mar 2012 17:10:18 +0000 Subject: Better sliders for Decoration editor diff --git a/src/game/DecorationTool.h b/src/game/DecorationTool.h index f6f08d4..5a11bc6 100644 --- a/src/game/DecorationTool.h +++ b/src/game/DecorationTool.h @@ -11,20 +11,29 @@ public: ToolType decoMode; + unsigned char Red; + unsigned char Green; + unsigned char Blue; + unsigned char Alpha; + DecorationTool(ToolType decoMode_, string name, int r, int g, int b): Tool(0, name, r, g, b), - decoMode(decoMode_) + decoMode(decoMode_), + 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, 1, 1, colRed, colGreen, colBlue, 255, decoMode, brush); + sim->ApplyDecorationPoint(position.X, position.Y, 1, 1, Red, Green, Blue, Alpha, decoMode, brush); } virtual void DrawLine(Simulation * sim, Brush * brush, ui::Point position1, ui::Point position2) { - sim->ApplyDecorationLine(position1.X, position1.Y, position2.X, position2.Y, 1, 1, colRed, colGreen, colBlue, 255, decoMode, brush); + sim->ApplyDecorationLine(position1.X, position1.Y, position2.X, position2.Y, 1, 1, Red, Green, Blue, Alpha, decoMode, brush); } virtual void DrawRect(Simulation * sim, Brush * brush, ui::Point position1, ui::Point position2) { - sim->ApplyDecorationBox(position1.X, position1.Y, position2.X, position2.Y, colRed, colGreen, colBlue, 255, decoMode); + sim->ApplyDecorationBox(position1.X, position1.Y, position2.X, position2.Y, Red, Green, Blue, Alpha, decoMode); } virtual void DrawFill(Simulation * sim, Brush * brush, ui::Point position) { diff --git a/src/game/GameModel.cpp b/src/game/GameModel.cpp index 7b71633..bcc52c7 100644 --- a/src/game/GameModel.cpp +++ b/src/game/GameModel.cpp @@ -348,10 +348,16 @@ bool GameModel::GetColourSelectorVisibility() void GameModel::SetColourSelectorColour(ui::Colour colour_) { - //if(this->colour!=colour) + colour = colour_; + notifyColourSelectorColourChanged(); + + vector tools = GetMenuList()[SC_DECO]->GetToolList(); + for(int i = 0; i < tools.size(); i++) { - colour = colour_; - notifyColourSelectorColourChanged(); + ((DecorationTool*)tools[i])->Red = colour.Red; + ((DecorationTool*)tools[i])->Green = colour.Green; + ((DecorationTool*)tools[i])->Blue = colour.Blue; + ((DecorationTool*)tools[i])->Alpha = colour.Alpha; } } diff --git a/src/game/GameView.cpp b/src/game/GameView.cpp index f84acb1..82293e4 100644 --- a/src/game/GameView.cpp +++ b/src/game/GameView.cpp @@ -213,6 +213,8 @@ GameView::GameView(): colourGSlider->SetActionCallback(colC); colourBSlider = new ui::Slider(ui::Point(185, Size.Y-39), ui::Point(80, 14), 255); colourBSlider->SetActionCallback(colC); + colourASlider = new ui::Slider(ui::Point(275, Size.Y-39), ui::Point(50, 14), 255); + colourASlider->SetActionCallback(colC); } class GameView::MenuAction: public ui::ButtonAction @@ -355,11 +357,14 @@ void GameView::NotifyColourSelectorVisibilityChanged(GameModel * sender) colourGSlider->SetParentWindow(NULL); RemoveComponent(colourBSlider); colourBSlider->SetParentWindow(NULL); + RemoveComponent(colourASlider); + colourASlider->SetParentWindow(NULL); if(sender->GetColourSelectorVisibility()) { AddComponent(colourRSlider); AddComponent(colourGSlider); AddComponent(colourBSlider); + AddComponent(colourASlider); } } @@ -372,15 +377,8 @@ void GameView::NotifyColourSelectorColourChanged(GameModel * sender) colourGSlider->SetColour(ui::Colour(sender->GetColourSelectorColour().Red, 0, sender->GetColourSelectorColour().Blue), ui::Colour(sender->GetColourSelectorColour().Red, 255, sender->GetColourSelectorColour().Blue)); colourBSlider->SetValue(sender->GetColourSelectorColour().Blue); colourBSlider->SetColour(ui::Colour(sender->GetColourSelectorColour().Red, sender->GetColourSelectorColour().Green, 0), ui::Colour(sender->GetColourSelectorColour().Red, sender->GetColourSelectorColour().Green, 255)); - - vector tools = sender->GetMenuList()[SC_DECO]->GetToolList(); - for(int i = 0; i < tools.size(); i++) - { - tools[i]->colRed = sender->GetColourSelectorColour().Red; - tools[i]->colGreen = sender->GetColourSelectorColour().Green; - tools[i]->colBlue = sender->GetColourSelectorColour().Blue; - } - NotifyToolListChanged(sender); + colourASlider->SetValue(sender->GetColourSelectorColour().Alpha); + colourASlider->SetColour(ui::Colour(0, 0, 0), ui::Colour(255, 255, 255)); } void GameView::NotifyRendererChanged(GameModel * sender) @@ -622,7 +620,7 @@ void GameView::NotifyZoomChanged(GameModel * sender) void GameView::changeColour() { - c->SetColour(ui::Colour(colourRSlider->GetValue(), colourGSlider->GetValue(), colourBSlider->GetValue())); + c->SetColour(ui::Colour(colourRSlider->GetValue(), colourGSlider->GetValue(), colourBSlider->GetValue(), colourASlider->GetValue())); } void GameView::OnDraw() diff --git a/src/game/GameView.h b/src/game/GameView.h index a27ecf4..18cd8e4 100644 --- a/src/game/GameView.h +++ b/src/game/GameView.h @@ -52,6 +52,7 @@ private: ui::Slider * colourRSlider; ui::Slider * colourGSlider; ui::Slider * colourBSlider; + ui::Slider * colourASlider; bool drawModeReset; ui::Point drawPoint1; diff --git a/src/interface/Colour.h b/src/interface/Colour.h index ad7d8a1..194b9c9 100644 --- a/src/interface/Colour.h +++ b/src/interface/Colour.h @@ -6,9 +6,13 @@ namespace ui class Colour { public: - unsigned char Red, Green, Blue; + unsigned char Red, Green, Blue, Alpha; Colour(unsigned char red, unsigned char green, unsigned char blue): - Red(red), Green(green), Blue(blue) + Red(red), Green(green), Blue(blue), Alpha(255) + { + } + Colour(unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha): + Red(red), Green(green), Blue(blue), Alpha(alpha) { } Colour() diff --git a/src/simulation/Simulation.cpp b/src/simulation/Simulation.cpp index d88d4d6..3f82f1b 100644 --- a/src/simulation/Simulation.cpp +++ b/src/simulation/Simulation.cpp @@ -325,36 +325,29 @@ void Simulation::ApplyDecoration(int x, int y, int colR_, int colG_, int colB_, } else if (mode == DECO_ADD) { - tr += colR*0.05f; - tg += colG*0.05f; - tb += colB*0.05f; + ta += (colA*0.1f)*colA; + tr += (colR*0.1f)*colA; + tg += (colG*0.1f)*colA; + tb += (colB*0.1f)*colA; } else if (mode == DECO_SUBTRACT) { - tr -= colR*0.05f; - tg -= colG*0.05f; - tb -= colB*0.05f; + ta -= (colA*0.1f)*colA; + tr -= (colR*0.1f)*colA; + tg -= (colG*0.1f)*colA; + tb -= (colB*0.1f)*colA; } else if (mode == DECO_MULTIPLY) { - tr *= colR*0.05f; - tg *= colG*0.05f; - tb *= colB*0.05f; + tr *= 1.0f+(colR*0.1f)*colA; + tg *= 1.0f+(colG*0.1f)*colA; + tb *= 1.0f+(colB*0.1f)*colA; } else if (mode == DECO_DIVIDE) { - if(colR>0) - tr /= colR*0.05f; - else - tr = 0.0f; - if(colG>0) - tg /= colG*0.05f; - else - tg = 0.0f; - if(colB>0) - tb /= colB*0.05f; - else - tb = 0.0f; + tr /= 1.0f+(colR*0.1f)*colA; + tg /= 1.0f+(colG*0.1f)*colA; + tb /= 1.0f+(colB*0.1f)*colA; } colA_ = ta*255.0f; -- cgit v0.9.2-21-gd62e