summaryrefslogtreecommitdiff
path: root/src/interface
diff options
context:
space:
mode:
authorbuild.powdertoy.co.uk <admin@powdertoy.co.uk>2012-07-19 17:08:34 (GMT)
committer build.powdertoy.co.uk <admin@powdertoy.co.uk>2012-07-19 17:08:34 (GMT)
commitd328b84b1330b0e8f3a7f87ce48b9b20ea4b6d01 (patch)
treedb311c7849270ddd2510cbd65a192b059f8a3c77 /src/interface
parentd71af3706a7a14e8ae65523e1a062417818b8fe2 (diff)
parent4d961117bde4398ae4d72f2db96eef381371e2df (diff)
downloadpowder-d328b84b1330b0e8f3a7f87ce48b9b20ea4b6d01.zip
powder-d328b84b1330b0e8f3a7f87ce48b9b20ea4b6d01.tar.gz
Merge branch 'master' of github.com:FacialTurd/PowderToypp
Diffstat (limited to 'src/interface')
-rw-r--r--src/interface/Button.cpp9
-rw-r--r--src/interface/Button.h3
-rw-r--r--src/interface/Component.cpp2
-rw-r--r--src/interface/Textbox.cpp35
-rw-r--r--src/interface/Textbox.h7
-rw-r--r--src/interface/Window.h2
6 files changed, 40 insertions, 18 deletions
diff --git a/src/interface/Button.cpp b/src/interface/Button.cpp
index ac1f87e..b70d41e 100644
--- a/src/interface/Button.cpp
+++ b/src/interface/Button.cpp
@@ -13,7 +13,7 @@
namespace ui {
-Button::Button(Point position, Point size, std::string buttonText):
+Button::Button(Point position, Point size, std::string buttonText, std::string toolTip):
Component(position, size),
ButtonText(buttonText),
isMouseInside(false),
@@ -21,7 +21,8 @@ Button::Button(Point position, Point size, std::string buttonText):
isTogglable(false),
toggle(false),
actionCallback(NULL),
- Enabled(true)
+ Enabled(true),
+ toolTip(toolTip)
{
TextPosition();
}
@@ -141,6 +142,10 @@ void Button::OnMouseEnter(int x, int y)
return;
if(actionCallback)
actionCallback->MouseEnterCallback(this);
+ if(toolTip.length()>0 && GetParentWindow())
+ {
+ GetParentWindow()->ToolTip(this, ui::Point(x, y), toolTip);
+ }
}
diff --git a/src/interface/Button.h b/src/interface/Button.h
index 19f7fe7..2358d49 100644
--- a/src/interface/Button.h
+++ b/src/interface/Button.h
@@ -27,7 +27,7 @@ public:
class Button : public Component
{
public:
- Button(Point position = Point(0, 0), Point size = Point(0, 0), std::string buttonText = "");
+ Button(Point position = Point(0, 0), Point size = Point(0, 0), std::string buttonText = "", std::string toolTip = "");
virtual ~Button();
bool Toggleable;
@@ -55,6 +55,7 @@ public:
void SetIcon(Icon icon);
protected:
+ std::string toolTip;
std::string buttonDisplayText;
std::string ButtonText;
diff --git a/src/interface/Component.cpp b/src/interface/Component.cpp
index a0c55f4..648635c 100644
--- a/src/interface/Component.cpp
+++ b/src/interface/Component.cpp
@@ -79,7 +79,7 @@ void Component::TextPosition(std::string displayText)
switch(Appearance.VerticalAlign)
{
case ui::Appearance::AlignTop:
- textPosition.Y = Appearance.Margin.Top;
+ textPosition.Y = Appearance.Margin.Top+2;
break;
case ui::Appearance::AlignMiddle:
textPosition.Y = Appearance.Margin.Top+((textAreaHeight-textHeight)/2);
diff --git a/src/interface/Textbox.cpp b/src/interface/Textbox.cpp
index 12a4698..7d939fd 100644
--- a/src/interface/Textbox.cpp
+++ b/src/interface/Textbox.cpp
@@ -8,13 +8,15 @@
using namespace ui;
-Textbox::Textbox(Point position, Point size, std::string textboxText):
+Textbox::Textbox(Point position, Point size, std::string textboxText, std::string textboxPlaceholder):
Label(position, size, ""),
actionCallback(NULL),
masked(false),
border(true),
mouseDown(false)
{
+ placeHolder = textboxPlaceholder;
+
SetText(textboxText);
cursor = text.length();
}
@@ -25,6 +27,11 @@ Textbox::~Textbox()
delete actionCallback;
}
+void Textbox::SetPlaceholder(std::string text)
+{
+ placeHolder = text;
+}
+
void Textbox::SetText(std::string newText)
{
backingText = newText;
@@ -40,11 +47,11 @@ void Textbox::SetText(std::string newText)
if(cursor)
{
- cursorPosition = Graphics::textnwidth((char *)text.c_str(), cursor);
+ Graphics::PositionAtCharIndex(multiline?((char*)textLines.c_str()):((char*)text.c_str()), cursor, cursorPositionX, cursorPositionY);
}
else
{
- cursorPosition = 0;
+ cursorPositionY = cursorPositionX = 0;
}
}
@@ -173,25 +180,25 @@ void Textbox::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool
if(cursor)
{
- cursorPosition = Graphics::textnwidth((char *)text.c_str(), cursor);
+ Graphics::PositionAtCharIndex(multiline?((char*)textLines.c_str()):((char*)text.c_str()), cursor, cursorPositionX, cursorPositionY);
}
else
{
- cursorPosition = 0;
+ cursorPositionY = cursorPositionX = 0;
}
}
void Textbox::OnMouseClick(int x, int y, unsigned button)
{
mouseDown = true;
- cursor = Graphics::CharIndexAtPosition((char*)text.c_str(), x-textPosition.X, y-textPosition.Y);
+ cursor = Graphics::CharIndexAtPosition(multiline?((char*)textLines.c_str()):((char*)text.c_str()), x-textPosition.X, y-textPosition.Y);
if(cursor)
{
- cursorPosition = Graphics::textnwidth((char *)text.c_str(), cursor);
+ Graphics::PositionAtCharIndex(multiline?((char*)textLines.c_str()):((char*)text.c_str()), cursor, cursorPositionX, cursorPositionY);
}
else
{
- cursorPosition = 0;
+ cursorPositionY = cursorPositionX = 0;
}
Label::OnMouseClick(x, y, button);
}
@@ -206,14 +213,14 @@ void Textbox::OnMouseMoved(int localx, int localy, int dx, int dy)
{
if(mouseDown)
{
- cursor = Graphics::CharIndexAtPosition((char*)text.c_str(), localx-textPosition.X, localy-textPosition.Y);
+ cursor = Graphics::CharIndexAtPosition(multiline?((char*)textLines.c_str()):((char*)text.c_str()), localx-textPosition.X, localy-textPosition.Y);
if(cursor)
{
- cursorPosition = Graphics::textnwidth((char *)text.c_str(), cursor);
+ Graphics::PositionAtCharIndex(multiline?((char*)textLines.c_str()):((char*)text.c_str()), cursor, cursorPositionX, cursorPositionY);
}
else
{
- cursorPosition = 0;
+ cursorPositionY = cursorPositionX = 0;
}
}
Label::OnMouseMoved(localx, localy, dx, dy);
@@ -227,10 +234,14 @@ void Textbox::Draw(const Point& screenPos)
if(IsFocused())
{
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);
+ g->draw_line(screenPos.X+textPosition.X+cursorPositionX+1, screenPos.Y-2+textPosition.Y+cursorPositionY, screenPos.X+textPosition.X+cursorPositionX+1, screenPos.Y+10+textPosition.Y+cursorPositionY, 255, 255, 255, XRES+BARSIZE);
}
else
{
+ if(!text.length())
+ {
+ g->drawtext(screenPos.X+textPosition.X, screenPos.Y+textPosition.Y, placeHolder, textColour.Red, textColour.Green, textColour.Blue, 170);
+ }
if(border) g->drawrect(screenPos.X, screenPos.Y, Size.X, Size.Y, 160, 160, 160, 255);
}
}
diff --git a/src/interface/Textbox.h b/src/interface/Textbox.h
index 120194e..e8e9d22 100644
--- a/src/interface/Textbox.h
+++ b/src/interface/Textbox.h
@@ -22,17 +22,20 @@ class Textbox : public Label
protected:
bool mouseDown;
bool masked, border;
- int cursor, cursorPosition;
+ int cursor, cursorPositionX, cursorPositionY;
TextboxAction *actionCallback;
std::string backingText;
+ std::string placeHolder;
public:
- Textbox(Point position, Point size, std::string textboxText);
+ Textbox(Point position, Point size, std::string textboxText = "", std::string textboxPlaceholder = "");
virtual ~Textbox();
virtual void SetDisplayText(std::string text);
virtual void SetText(std::string text);
virtual std::string GetText();
+ virtual void SetPlaceholder(std::string text);
+
void SetBorder(bool border) { this->border = border; };
void SetHidden(bool hidden) { masked = hidden; }
bool GetHidden() { return masked; }
diff --git a/src/interface/Window.h b/src/interface/Window.h
index c077abb..c2c5e16 100644
--- a/src/interface/Window.h
+++ b/src/interface/Window.h
@@ -46,6 +46,8 @@ enum ChromeStyle
// Remove a component from state. NOTE: This WILL free component from memory.
void RemoveComponent(unsigned idx);
+ virtual void ToolTip(Component * sender, ui::Point mousePosition, std::string toolTip) {}
+
virtual void DoInitialized();
virtual void DoExit();
virtual void DoTick(float dt);