More fancy Sliders for deco colour
This commit is contained in:
parent
644e6770e4
commit
55acb6aa80
@ -207,11 +207,11 @@ GameView::GameView():
|
||||
}
|
||||
};
|
||||
ColourChange * colC = new ColourChange(this);
|
||||
colourRSlider = new ui::Slider(ui::Point(5, Size.Y-40), ui::Point(100, 16), 255);
|
||||
colourRSlider = new ui::Slider(ui::Point(5, Size.Y-39), ui::Point(80, 14), 255);
|
||||
colourRSlider->SetActionCallback(colC);
|
||||
colourGSlider = new ui::Slider(ui::Point(115, Size.Y-40), ui::Point(100, 16), 255);
|
||||
colourGSlider = new ui::Slider(ui::Point(95, Size.Y-39), ui::Point(80, 14), 255);
|
||||
colourGSlider->SetActionCallback(colC);
|
||||
colourBSlider = new ui::Slider(ui::Point(225, Size.Y-40), ui::Point(100, 16), 255);
|
||||
colourBSlider = new ui::Slider(ui::Point(185, Size.Y-39), ui::Point(80, 14), 255);
|
||||
colourBSlider->SetActionCallback(colC);
|
||||
}
|
||||
|
||||
@ -367,8 +367,11 @@ void GameView::NotifyColourSelectorVisibilityChanged(GameModel * sender)
|
||||
void GameView::NotifyColourSelectorColourChanged(GameModel * sender)
|
||||
{
|
||||
colourRSlider->SetValue(sender->GetColourSelectorColour().Red);
|
||||
colourRSlider->SetColour(ui::Colour(0, sender->GetColourSelectorColour().Green, sender->GetColourSelectorColour().Blue), ui::Colour(255, sender->GetColourSelectorColour().Green, sender->GetColourSelectorColour().Blue));
|
||||
colourGSlider->SetValue(sender->GetColourSelectorColour().Green);
|
||||
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<Tool*> tools = sender->GetMenuList()[SC_DECO]->GetToolList();
|
||||
for(int i = 0; i < tools.size(); i++)
|
||||
|
@ -7,6 +7,7 @@
|
||||
|
||||
#include <iostream>
|
||||
#include "Slider.h"
|
||||
#include "Colour.h"
|
||||
|
||||
namespace ui {
|
||||
|
||||
@ -14,7 +15,8 @@ Slider::Slider(Point position, Point size, int steps):
|
||||
Component(position, size),
|
||||
sliderSteps(steps),
|
||||
sliderPosition(0),
|
||||
isMouseDown(false)
|
||||
isMouseDown(false),
|
||||
bgGradient(NULL)
|
||||
{
|
||||
// TODO Auto-generated constructor stub
|
||||
|
||||
@ -73,6 +75,15 @@ int Slider::GetValue()
|
||||
return sliderPosition;
|
||||
}
|
||||
|
||||
void Slider::SetColour(Colour col1, Colour col2)
|
||||
{
|
||||
if(bgGradient)
|
||||
free(bgGradient);
|
||||
bgGradient = (unsigned char*)Graphics::GenerateGradient(
|
||||
(pixel[2]){PIXRGB(col1.Red, col1.Green, col1.Blue), PIXRGB(col2.Red, col2.Green, col2.Blue)},
|
||||
(float[2]){0.0f, 1.0f}, 2, Size.X-6);
|
||||
}
|
||||
|
||||
void Slider::SetValue(int value)
|
||||
{
|
||||
if(value < 0)
|
||||
@ -85,8 +96,16 @@ void Slider::SetValue(int value)
|
||||
void Slider::Draw(const Point& screenPos)
|
||||
{
|
||||
Graphics * g = Engine::Ref().g;
|
||||
g->drawrect(screenPos.X, screenPos.Y, Size.X, Size.Y, 255, 255, 255, 255);
|
||||
g->fillrect(screenPos.X+3, screenPos.Y+3, Size.X-6, Size.Y-6, 255, 255, 255, 255);
|
||||
//g->drawrect(screenPos.X, screenPos.Y, Size.X, Size.Y, 255, 255, 255, 255);
|
||||
|
||||
if(bgGradient)
|
||||
{
|
||||
for (int j = 3; j < Size.Y-6; j++)
|
||||
for (int i = 3; i < Size.X-6; i++)
|
||||
g->drawpixel(screenPos.X+i+2, screenPos.Y+j+2, bgGradient[(i-3)*3], bgGradient[(i-3)*3+1], bgGradient[(i-3)*3+2], 255);
|
||||
}
|
||||
|
||||
g->drawrect(screenPos.X+3, screenPos.Y+3, Size.X-6, Size.Y-6, 255, 255, 255, 255);
|
||||
|
||||
float fPosition = sliderPosition;
|
||||
float fSize = Size.X-6;
|
||||
|
@ -9,6 +9,7 @@
|
||||
#define SLIDER_H_
|
||||
|
||||
#include "Component.h"
|
||||
#include "Colour.h"
|
||||
|
||||
namespace ui {
|
||||
class Slider;
|
||||
@ -23,6 +24,7 @@ class Slider: public ui::Component {
|
||||
int sliderSteps;
|
||||
int sliderPosition;
|
||||
bool isMouseDown;
|
||||
unsigned char * bgGradient;
|
||||
SliderAction * actionCallback;
|
||||
void updatePosition(int position);
|
||||
public:
|
||||
@ -31,6 +33,7 @@ public:
|
||||
virtual void OnMouseClick(int x, int y, unsigned button);
|
||||
virtual void OnMouseUp(int x, int y, unsigned button);
|
||||
virtual void Draw(const Point& screenPos);
|
||||
void SetColour(Colour col1, Colour col2);
|
||||
void SetActionCallback(SliderAction * action) { actionCallback = action; }
|
||||
int GetValue();
|
||||
void SetValue(int value);
|
||||
|
@ -300,73 +300,85 @@ int Simulation::create_part_add_props(int p, int x, int y, int tv, int rx, int r
|
||||
return p;
|
||||
}
|
||||
|
||||
void Simulation::ApplyDecoration(int x, int y, int colR, int colG, int colB, int colA, int mode)
|
||||
void Simulation::ApplyDecoration(int x, int y, int colR_, int colG_, int colB_, int colA_, int mode)
|
||||
{
|
||||
int rp, tr, tg, tb, ta;
|
||||
int rp;
|
||||
float tr, tg, tb, ta, colR = colR_, colG = colG_, colB = colB_, colA = colA_;
|
||||
rp = pmap[y][x];
|
||||
if (!rp)
|
||||
return;
|
||||
|
||||
ta = (parts[rp>>8].dcolour>>24)&0xFF;
|
||||
tr = (parts[rp>>8].dcolour>>16)&0xFF;
|
||||
tg = (parts[rp>>8].dcolour>>8)&0xFF;
|
||||
tb = (parts[rp>>8].dcolour)&0xFF;
|
||||
|
||||
ta /= 255.0f; tr /= 255.0f; tg /= 255.0f; tb /= 255.0f;
|
||||
colR /= 255.0f; colG /= 255.0f; colB /= 255.0f; colA /= 255.0f;
|
||||
|
||||
if (mode == DECO_DRAW)
|
||||
{
|
||||
parts[rp>>8].dcolour = ((colA<<24)|(colR<<16)|(colG<<8)|colB);
|
||||
ta = colA;
|
||||
tr = colR;
|
||||
tg = colG;
|
||||
tb = colB;
|
||||
}
|
||||
else
|
||||
else if (mode == DECO_ADD)
|
||||
{
|
||||
if (parts[rp>>8].dcolour == 0)
|
||||
return;
|
||||
|
||||
ta = (parts[rp>>8].dcolour>>24)&0xFF;
|
||||
tr = (parts[rp>>8].dcolour>>16)&0xFF;
|
||||
tg = (parts[rp>>8].dcolour>>8)&0xFF;
|
||||
tb = (parts[rp>>8].dcolour)&0xFF;
|
||||
|
||||
if (mode == DECO_ADD)
|
||||
{
|
||||
ta += colA;
|
||||
tr += colR;
|
||||
tg += colG;
|
||||
tb += colB;
|
||||
}
|
||||
else if (mode == DECO_SUBTRACT)
|
||||
{
|
||||
ta -= colA;
|
||||
tr -= colR;
|
||||
tg -= colG;
|
||||
tb -= colB;
|
||||
}
|
||||
else if (mode == DECO_MULTIPLY)
|
||||
{
|
||||
ta *= (int)((float)(1.0f+((float)colA)/255.0f));
|
||||
tr *= (int)((float)(1.0f+((float)colR)/255.0f));
|
||||
tg *= (int)((float)(1.0f+((float)colG)/255.0f));
|
||||
tb *= (int)((float)(1.0f+((float)colB)/255.0f));
|
||||
}
|
||||
else if (mode == DECO_DIVIDE)
|
||||
{
|
||||
ta /= (int)((float)(1.0f+((float)colA)/255.0f));
|
||||
tr /= (int)((float)(1.0f+((float)colR)/255.0f));
|
||||
tg /= (int)((float)(1.0f+((float)colG)/255.0f));
|
||||
tb /= (int)((float)(1.0f+((float)colB)/255.0f));
|
||||
}
|
||||
if(ta > 255)
|
||||
ta = 255;
|
||||
else if(ta < 0)
|
||||
ta = 0;
|
||||
if(tr > 255)
|
||||
tr = 255;
|
||||
else if(tr < 0)
|
||||
tr = 0;
|
||||
if(tg > 255)
|
||||
tg = 255;
|
||||
else if(tg < 0)
|
||||
tg = 0;
|
||||
if(tb > 255)
|
||||
tb = 255;
|
||||
else if(tb < 0)
|
||||
tb = 0;
|
||||
parts[rp>>8].dcolour = ((ta<<24)|(tr<<16)|(tg<<8)|tb);
|
||||
tr += colR*0.05f;
|
||||
tg += colG*0.05f;
|
||||
tb += colB*0.05f;
|
||||
}
|
||||
else if (mode == DECO_SUBTRACT)
|
||||
{
|
||||
tr -= colR*0.05f;
|
||||
tg -= colG*0.05f;
|
||||
tb -= colB*0.05f;
|
||||
}
|
||||
else if (mode == DECO_MULTIPLY)
|
||||
{
|
||||
tr *= colR*0.05f;
|
||||
tg *= colG*0.05f;
|
||||
tb *= colB*0.05f;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
colA_ = ta*255.0f;
|
||||
colR_ = tr*255.0f;
|
||||
colG_ = tg*255.0f;
|
||||
colB_ = tb*255.0f;
|
||||
|
||||
if(colA_ > 255)
|
||||
colA_ = 255;
|
||||
else if(colA_ < 0)
|
||||
colA_ = 0;
|
||||
if(colR_ > 255)
|
||||
colR_ = 255;
|
||||
else if(colR_ < 0)
|
||||
colR_ = 0;
|
||||
if(colG_ > 255)
|
||||
colG_ = 255;
|
||||
else if(colG_ < 0)
|
||||
colG_ = 0;
|
||||
if(colB_ > 255)
|
||||
colB_ = 255;
|
||||
else if(colB_ < 0)
|
||||
colB_ = 0;
|
||||
parts[rp>>8].dcolour = ((colA_<<24)|(colR_<<16)|(colG_<<8)|colB_);
|
||||
}
|
||||
|
||||
void Simulation::ApplyDecorationPoint(int x, int y, int rx, int ry, int colR, int colG, int colB, int colA, int mode, Brush * cBrush)
|
||||
|
Reference in New Issue
Block a user