diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2012-02-01 18:45:59 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2012-02-01 18:45:59 (GMT) |
| commit | 038da72c61ea6a251d805e2de3662f240da52b02 (patch) | |
| tree | 05170050b16f9d663ec44ae451211e686ba196ac /src/interface | |
| parent | 857b0cc1fc58f066acd59404d16ee5e566e20f00 (diff) | |
| download | powder-038da72c61ea6a251d805e2de3662f240da52b02.zip powder-038da72c61ea6a251d805e2de3662f240da52b02.tar.gz | |
Console UI, open in browser button, tab and enter shortcut for Login UI, various
Diffstat (limited to 'src/interface')
| -rw-r--r-- | src/interface/Button.cpp | 28 | ||||
| -rw-r--r-- | src/interface/Button.h | 5 | ||||
| -rw-r--r-- | src/interface/Keys.h | 2 | ||||
| -rw-r--r-- | src/interface/Textbox.cpp | 32 | ||||
| -rw-r--r-- | src/interface/Textbox.h | 5 |
5 files changed, 49 insertions, 23 deletions
diff --git a/src/interface/Button.cpp b/src/interface/Button.cpp index fc3eda5..095ef30 100644 --- a/src/interface/Button.cpp +++ b/src/interface/Button.cpp @@ -25,7 +25,7 @@ Button::Button(Point position, Point size, std::string buttonText): actionCallback(NULL), textPosition(ui::Point(0, 0)), textVAlign(AlignMiddle), - textHAlign(AlignCentre), + textHAlign(AlignLeft), Enabled(true), icon(NoIcon) { @@ -36,6 +36,16 @@ Button::Button(Point position, Point size, std::string buttonText): void Button::TextPosition() { + buttonDisplayText = ButtonText; + if(buttonDisplayText.length()) + { + if(Graphics::textwidth((char *)buttonDisplayText.c_str()) > Size.X - (icon? 22 : 0)) + { + int position = Graphics::textwidthx((char *)buttonDisplayText.c_str(), Size.X - (icon? 38 : 22)); + buttonDisplayText = buttonDisplayText.erase(position, buttonDisplayText.length()-position); + buttonDisplayText += "..."; + } + } switch(textVAlign) { case AlignTop: @@ -45,7 +55,7 @@ void Button::TextPosition() textPosition.Y = (Size.Y-10)/2; break; case AlignBottom: - textPosition.Y = Size.Y-11; + textPosition.Y = Size.Y-12; break; } @@ -57,10 +67,10 @@ void Button::TextPosition() textPosition.X = 3+17; break; case AlignCentre: - textPosition.X = (((Size.X-14)-Graphics::textwidth((char *)ButtonText.c_str()))/2)+17; + textPosition.X = (((Size.X-14)-Graphics::textwidth((char *)buttonDisplayText.c_str()))/2)+17; break; case AlignRight: - textPosition.X = (((Size.X-14)-Graphics::textwidth((char *)ButtonText.c_str()))-2)+17; + textPosition.X = (((Size.X-14)-Graphics::textwidth((char *)buttonDisplayText.c_str()))-2)+17; break; } } @@ -72,10 +82,10 @@ void Button::TextPosition() textPosition.X = 3; break; case AlignCentre: - textPosition.X = (Size.X-Graphics::textwidth((char *)ButtonText.c_str()))/2; + textPosition.X = (Size.X-Graphics::textwidth((char *)buttonDisplayText.c_str()))/2; break; case AlignRight: - textPosition.X = (Size.X-Graphics::textwidth((char *)ButtonText.c_str()))-2; + textPosition.X = (Size.X-Graphics::textwidth((char *)buttonDisplayText.c_str()))-2; break; } } @@ -124,20 +134,20 @@ void Button::Draw(const Point& screenPos) { g->fillrect(Position.X-1, Position.Y-1, Size.X+2, Size.Y+2, activeBackground.Red, activeBackground.Green, activeBackground.Blue, 255); g->drawrect(Position.X, Position.Y, Size.X, Size.Y, activeBorder.Red, activeBorder.Green, activeBorder.Blue, 255); - g->drawtext(Position.X+textPosition.X, Position.Y+textPosition.Y, ButtonText, activeText.Red, activeText.Green, activeText.Blue, 255); + g->drawtext(Position.X+textPosition.X, Position.Y+textPosition.Y+1, buttonDisplayText, activeText.Red, activeText.Green, activeText.Blue, 255); } else { g->fillrect(Position.X, Position.Y, Size.X, Size.Y, background.Red, background.Green, background.Blue, 255); g->drawrect(Position.X, Position.Y, Size.X, Size.Y, border.Red, border.Green, border.Blue, 255); - g->drawtext(Position.X+textPosition.X, Position.Y+textPosition.Y, ButtonText, text.Red, text.Green, text.Blue, 255); + g->drawtext(Position.X+textPosition.X, Position.Y+textPosition.Y+1, buttonDisplayText, text.Red, text.Green, text.Blue, 255); } } else { g->fillrect(Position.X, Position.Y, Size.X, Size.Y, background.Red, background.Green, background.Blue, 180); g->drawrect(Position.X, Position.Y, Size.X, Size.Y, 180, 180, 180, 255); - g->drawtext(Position.X+textPosition.X, Position.Y+textPosition.Y, ButtonText, 180, 180, 180, 255); + g->drawtext(Position.X+textPosition.X, Position.Y+textPosition.Y+1, buttonDisplayText, 180, 180, 180, 255); } if(icon) g->draw_icon(Position.X+3, Position.Y+textPosition.Y, icon); diff --git a/src/interface/Button.h b/src/interface/Button.h index 4537e1f..6f485cb 100644 --- a/src/interface/Button.h +++ b/src/interface/Button.h @@ -33,8 +33,6 @@ public: bool Toggleable; bool Enabled; - std::string ButtonText; - virtual void OnMouseClick(int x, int y, unsigned int button); virtual void OnMouseUp(int x, int y, unsigned int button); //virtual void OnMouseUp(int x, int y, unsigned int button); @@ -72,6 +70,9 @@ protected: Colour border, activeBorder; Colour text, activeText; + std::string buttonDisplayText; + std::string ButtonText; + bool isButtonDown, state, isMouseInside, isTogglable, toggle; ButtonAction * actionCallback; ui::Point textPosition; diff --git a/src/interface/Keys.h b/src/interface/Keys.h index b5ae97b..5350b06 100644 --- a/src/interface/Keys.h +++ b/src/interface/Keys.h @@ -7,6 +7,8 @@ #define KEY_BACKSPACE SDLK_BACKSPACE #define KEY_DELETE SDLK_DELETE #define KEY_TAB SDLK_TAB +#define KEY_RETURN SDLK_RETURN +#define KEY_ENTER SDLK_KP_ENTER #define KEY_CTRL SDLK_LCTRL #define KEY_ALT SDLK_LALT diff --git a/src/interface/Textbox.cpp b/src/interface/Textbox.cpp index 5985ce1..0341ff3 100644 --- a/src/interface/Textbox.cpp +++ b/src/interface/Textbox.cpp @@ -16,7 +16,8 @@ Textbox::Textbox(Point position, Point size, std::string textboxText): textVAlign(AlignMiddle), textHAlign(AlignCentre), actionCallback(NULL), - masked(false) + masked(false), + border(true) { SetText(textboxText); TextPosition(); @@ -31,11 +32,9 @@ Textbox::~Textbox() void Textbox::TextPosition() { - std::string tempText = displayText; - if(tempText.length() && cursor) + if(cursor) { - tempText.erase(cursor, tempText.length()-cursor); - cursorPosition = Graphics::textwidth((char *)tempText.c_str()); + cursorPosition = Graphics::textnwidth((char *)displayText.c_str(), cursor); } else { @@ -71,6 +70,7 @@ void Textbox::TextPosition() void Textbox::SetText(std::string text) { + cursor = text.length(); if(masked) { char tempText[text.length()]; @@ -86,6 +86,13 @@ void Textbox::SetText(std::string text) TextPosition(); } + +void Textbox::SetDisplayText(std::string text) +{ + displayText = text; + TextPosition(); +} + std::string Textbox::GetText() { return text; @@ -153,17 +160,18 @@ void Textbox::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool cursor++; changed = true; } - if(changed && actionCallback) - { - actionCallback->TextChangedCallback(this); - } } catch(std::out_of_range &e) { cursor = 0; text = ""; } - SetText(text); + if(changed) + { + SetText(text); + if(actionCallback) + actionCallback->TextChangedCallback(this); + } TextPosition(); } @@ -172,12 +180,12 @@ void Textbox::Draw(const Point& screenPos) Graphics * g = Engine::Ref().g; if(IsFocused()) { - g->drawrect(screenPos.X, screenPos.Y, Size.X, Size.Y, 255, 255, 255, 255); + if(border) g->drawrect(screenPos.X, screenPos.Y, Size.X, Size.Y, 255, 255, 255, 255); g->draw_line(screenPos.X+textPosition.X+cursorPosition, screenPos.Y+3, screenPos.X+textPosition.X+cursorPosition, screenPos.Y+12, 255, 255, 255, XRES+BARSIZE); } else { - g->drawrect(screenPos.X, screenPos.Y, Size.X, Size.Y, 160, 160, 160, 255); + if(border) g->drawrect(screenPos.X, screenPos.Y, Size.X, Size.Y, 160, 160, 160, 255); } g->drawtext(screenPos.X+textPosition.X, screenPos.Y+textPosition.Y, displayText, 255, 255, 255, 255); } diff --git a/src/interface/Textbox.h b/src/interface/Textbox.h index 889a4e8..c29e01b 100644 --- a/src/interface/Textbox.h +++ b/src/interface/Textbox.h @@ -17,6 +17,7 @@ public: }; class Textbox : public Component { + friend class TextboxAction; protected: std::string text; std::string displayText; @@ -26,12 +27,14 @@ protected: int cursor, cursorPosition; TextboxAction *actionCallback; bool masked; + bool border; public: Textbox(Point position, Point size, std::string textboxText); virtual ~Textbox(); virtual void TextPosition(); virtual void SetText(std::string text); + virtual void SetDisplayText(std::string text); std::string GetText(); HorizontalAlignment GetHAlignment() { return textHAlign; } VerticalAlignment GetVAlignment() { return textVAlign; } @@ -42,6 +45,8 @@ public: void SetHidden(bool hidden) { masked = hidden; } bool GetHidden() { return masked; } + void SetBorder(bool border) {this->border = border;} + virtual void Draw(const Point& screenPos); }; } |
