summaryrefslogtreecommitdiff
path: root/src/interface/Button.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/interface/Button.cpp')
-rw-r--r--src/interface/Button.cpp28
1 files changed, 19 insertions, 9 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);