summaryrefslogtreecommitdiff
path: root/src/interface
diff options
context:
space:
mode:
authorSimon 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)
commit038da72c61ea6a251d805e2de3662f240da52b02 (patch)
tree05170050b16f9d663ec44ae451211e686ba196ac /src/interface
parent857b0cc1fc58f066acd59404d16ee5e566e20f00 (diff)
downloadpowder-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.cpp28
-rw-r--r--src/interface/Button.h5
-rw-r--r--src/interface/Keys.h2
-rw-r--r--src/interface/Textbox.cpp32
-rw-r--r--src/interface/Textbox.h5
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);
};
}