diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2013-03-22 14:14:17 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2013-03-22 14:14:17 (GMT) |
| commit | 9abe51526cac2634af0541c3de69834dd30e9f78 (patch) | |
| tree | 6ae4deadfe00a83094b9d288d8c11d8ce823577a /src/colourpicker/ColourPickerActivity.cpp | |
| parent | 2c311b9a36a88fadd96f3d39acb1ab2590835d81 (diff) | |
| download | powder-9abe51526cac2634af0541c3de69834dd30e9f78.zip powder-9abe51526cac2634af0541c3de69834dd30e9f78.tar.gz | |
Move all GUI source files into gui/
Diffstat (limited to 'src/colourpicker/ColourPickerActivity.cpp')
| -rw-r--r-- | src/colourpicker/ColourPickerActivity.cpp | 309 |
1 files changed, 0 insertions, 309 deletions
diff --git a/src/colourpicker/ColourPickerActivity.cpp b/src/colourpicker/ColourPickerActivity.cpp deleted file mode 100644 index 04aa644..0000000 --- a/src/colourpicker/ColourPickerActivity.cpp +++ /dev/null @@ -1,309 +0,0 @@ -#include <algorithm> -#include <iomanip> -#include "ColourPickerActivity.h" -#include "interface/Textbox.h" -#include "interface/Label.h" -#include "interface/Keys.h" -#include "game/Tool.h" -#include "Style.h" -#include "Format.h" -#include "game/GameModel.h" - -ColourPickerActivity::ColourPickerActivity(ui::Colour initialColour, ColourPickedCallback * callback) : - WindowActivity(ui::Point(-1, -1), ui::Point(266, 175)), - currentHue(0), - currentSaturation(0), - currentValue(0), - mouseDown(false), - valueMouseDown(false), - callback(callback) -{ - - class ColourChange : public ui::TextboxAction - { - ColourPickerActivity * a; - public: - ColourChange(ColourPickerActivity * a) : a(a) {} - - void TextChangedCallback(ui::Textbox * sender) - { - int r, g, b, alpha; - r = format::StringToNumber<int>(a->rValue->GetText()); - g = format::StringToNumber<int>(a->gValue->GetText()); - b = format::StringToNumber<int>(a->bValue->GetText()); - alpha = format::StringToNumber<int>(a->aValue->GetText()); - if (r > 255) - r = 255; - if (g > 255) - g = 255; - if (b > 255) - b = 255; - if (alpha > 255) - alpha = 255; - - RGB_to_HSV(r, g, b, &a->currentHue, &a->currentSaturation, &a->currentValue); - a->currentAlpha = alpha; - a->UpdateTextboxes(r, g, b, alpha); - } - }; - - rValue = new ui::Textbox(ui::Point(5, Size.Y-23), ui::Point(30, 17), "255"); - rValue->SetActionCallback(new ColourChange(this)); - rValue->SetLimit(3); - rValue->SetInputType(ui::Textbox::Number); - AddComponent(rValue); - - gValue = new ui::Textbox(ui::Point(40, Size.Y-23), ui::Point(30, 17), "255"); - gValue->SetActionCallback(new ColourChange(this)); - gValue->SetLimit(3); - gValue->SetInputType(ui::Textbox::Number); - AddComponent(gValue); - - bValue = new ui::Textbox(ui::Point(75, Size.Y-23), ui::Point(30, 17), "255"); - bValue->SetActionCallback(new ColourChange(this)); - bValue->SetLimit(3); - bValue->SetInputType(ui::Textbox::Number); - AddComponent(bValue); - - aValue = new ui::Textbox(ui::Point(110, Size.Y-23), ui::Point(30, 17), "255"); - aValue->SetActionCallback(new ColourChange(this)); - aValue->SetLimit(3); - aValue->SetInputType(ui::Textbox::Number); - AddComponent(aValue); - - hexValue = new::ui::Label(ui::Point(150, Size.Y-23), ui::Point(53, 17), "0xFFFFFFFF"); - AddComponent(hexValue); - - class OkayAction: public ui::ButtonAction - { - ColourPickerActivity * a; - public: - OkayAction(ColourPickerActivity * a) : a(a) { } - void ActionCallback(ui::Button * sender) - { - int Red, Green, Blue; - Red = format::StringToNumber<int>(a->rValue->GetText()); - Green = format::StringToNumber<int>(a->gValue->GetText()); - Blue = format::StringToNumber<int>(a->bValue->GetText()); - ui::Colour col(Red, Green, Blue, a->currentAlpha); - if(a->callback) - a->callback->ColourPicked(col); - a->Exit(); - } - }; - - ui::Button * doneButton = new ui::Button(ui::Point(Size.X-45, Size.Y-23), ui::Point(40, 17), "Done"); - doneButton->SetActionCallback(new OkayAction(this)); - AddComponent(doneButton); - SetOkayButton(doneButton); - - RGB_to_HSV(initialColour.Red, initialColour.Green, initialColour.Blue, ¤tHue, ¤tSaturation, ¤tValue); - currentAlpha = initialColour.Alpha; - UpdateTextboxes(initialColour.Red, initialColour.Green, initialColour.Blue, initialColour.Alpha); -} - -void ColourPickerActivity::UpdateTextboxes(int r, int g, int b, int a) -{ - rValue->SetText(format::NumberToString<int>(r)); - gValue->SetText(format::NumberToString<int>(g)); - bValue->SetText(format::NumberToString<int>(b)); - aValue->SetText(format::NumberToString<int>(a)); - std::stringstream hex; - hex << std::hex << "0x" << std::setfill('0') << std::setw(2) << std::uppercase << a << std::setw(2) << r << std::setw(2) << g << std::setw(2) << b; - hexValue->SetText(hex.str()); -} -void ColourPickerActivity::OnTryExit(ExitMethod method) -{ - Exit(); -} - -void ColourPickerActivity::OnMouseMove(int x, int y, int dx, int dy) -{ - if(mouseDown) - { - x -= Position.X+5; - y -= Position.Y+5; - - currentHue = (float(x)/float(255))*359.0f; - currentSaturation = 255-(y*2); - - if(currentSaturation > 255) - currentSaturation = 255; - if(currentSaturation < 0) - currentSaturation = 0; - if(currentHue > 359) - currentHue = 359; - if(currentHue < 0) - currentHue = 0; - } - - if(valueMouseDown) - { - x -= Position.X+5; - y -= Position.Y+5; - - currentValue = x; - - if(currentValue > 255) - currentValue = 255; - if(currentValue < 0) - currentValue = 0; - } - - if(mouseDown || valueMouseDown) - { - int cr, cg, cb; - HSV_to_RGB(currentHue, currentSaturation, currentValue, &cr, &cg, &cb); - UpdateTextboxes(cr, cg, cb, currentAlpha); - } -} - -void ColourPickerActivity::OnMouseDown(int x, int y, unsigned button) -{ - x -= Position.X+5; - y -= Position.Y+5; - if(x >= 0 && x < 256 && y >= 0 && y <= 128) - { - mouseDown = true; - currentHue = (float(x)/float(255))*359.0f; - currentSaturation = 255-(y*2); - - if(currentSaturation > 255) - currentSaturation = 255; - if(currentSaturation < 0) - currentSaturation = 0; - if(currentHue > 359) - currentHue = 359; - if(currentHue < 0) - currentHue = 0; - } - - if(x >= 0 && x < 256 && y >= 132 && y <= 142) - { - valueMouseDown = true; - currentValue = x; - - if(currentValue > 255) - currentValue = 255; - if(currentValue < 0) - currentValue = 0; - } - - if(mouseDown || valueMouseDown) - { - int cr, cg, cb; - HSV_to_RGB(currentHue, currentSaturation, currentValue, &cr, &cg, &cb); - UpdateTextboxes(cr, cg, cb, currentAlpha); - } -} - -void ColourPickerActivity::OnMouseUp(int x, int y, unsigned button) -{ - if(mouseDown || valueMouseDown) - { - int cr, cg, cb; - HSV_to_RGB(currentHue, currentSaturation, currentValue, &cr, &cg, &cb); - UpdateTextboxes(cr, cg, cb, currentAlpha); - } - - if(mouseDown) - { - mouseDown = false; - x -= Position.X+5; - y -= Position.Y+5; - - currentHue = (float(x)/float(255))*359.0f; - currentSaturation = 255-(y*2); - - if(currentSaturation > 255) - currentSaturation = 255; - if(currentSaturation < 0) - currentSaturation = 0; - if(currentHue > 359) - currentHue = 359; - if(currentHue < 0) - currentHue = 0; - } - - if(valueMouseDown) - { - valueMouseDown = false; - - x -= Position.X+5; - y -= Position.Y+5; - - currentValue = x; - - if(currentValue > 255) - currentValue = 255; - if(currentValue < 0) - currentValue = 0; - } -} - - -void ColourPickerActivity::OnDraw() -{ - Graphics * g = ui::Engine::Ref().g; - //g->clearrect(Position.X-2, Position.Y-2, Size.X+3, Size.Y+3); - g->fillrect(Position.X-2, Position.Y-2, Size.X+3, Size.Y+3, 0, 0, 0, currentAlpha); - g->drawrect(Position.X, Position.Y, Size.X, Size.Y, 255, 255, 255, 255); - - g->drawrect(Position.X+4, Position.Y+4, 258, 130, 180, 180, 180, 255); - - g->drawrect(Position.X+4, Position.Y+4+4+128, 258, 12, 180, 180, 180, 255); - - - int offsetX = Position.X+5; - int offsetY = Position.Y+5; - - - //draw color square - int lastx = -1, currx = 0; - for(int saturation = 0; saturation <= 255; saturation+=2) - { - for(int hue = 0; hue <= 359; hue++) - { - currx = clamp_flt(hue, 0, 359)+offsetX; - if (currx == lastx) - continue; - lastx = currx; - int cr = 0; - int cg = 0; - int cb = 0; - HSV_to_RGB(hue, 255-saturation, currentValue, &cr, &cg, &cb); - g->blendpixel(currx, (saturation/2)+offsetY, cr, cg, cb, currentAlpha); - } - } - - //draw brightness bar - for(int value = 0; value <= 255; value++) - for(int i = 0; i < 10; i++) - { - int cr = 0; - int cg = 0; - int cb = 0; - HSV_to_RGB(currentHue, currentSaturation, value, &cr, &cg, &cb); - - g->blendpixel(value+offsetX, i+offsetY+127+5, cr, cg, cb, currentAlpha); - } - - //draw color square pointer - int currentHueX = clamp_flt(currentHue, 0, 359); - int currentSaturationY = ((255-currentSaturation)/2); - g->xor_line(offsetX+currentHueX, offsetY+currentSaturationY-5, offsetX+currentHueX, offsetY+currentSaturationY-1); - g->xor_line(offsetX+currentHueX, offsetY+currentSaturationY+1, offsetX+currentHueX, offsetY+currentSaturationY+5); - g->xor_line(offsetX+currentHueX-5, offsetY+currentSaturationY, offsetX+currentHueX-1, offsetY+currentSaturationY); - g->xor_line(offsetX+currentHueX+1, offsetY+currentSaturationY, offsetX+currentHueX+5, offsetY+currentSaturationY); - - //draw brightness bar pointer - int currentValueX = restrict_flt(currentValue, 0, 254); - g->xor_line(offsetX+currentValueX, offsetY+4+128, offsetX+currentValueX, offsetY+13+128); - g->xor_line(offsetX+currentValueX+1, offsetY+4+128, offsetX+currentValueX+1, offsetY+13+128); -} - -ColourPickerActivity::~ColourPickerActivity() { - if(callback) - delete callback; -} - |
