diff options
| author | build.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) |
| commit | d328b84b1330b0e8f3a7f87ce48b9b20ea4b6d01 (patch) | |
| tree | db311c7849270ddd2510cbd65a192b059f8a3c77 /src/interface | |
| parent | d71af3706a7a14e8ae65523e1a062417818b8fe2 (diff) | |
| parent | 4d961117bde4398ae4d72f2db96eef381371e2df (diff) | |
| download | powder-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.cpp | 9 | ||||
| -rw-r--r-- | src/interface/Button.h | 3 | ||||
| -rw-r--r-- | src/interface/Component.cpp | 2 | ||||
| -rw-r--r-- | src/interface/Textbox.cpp | 35 | ||||
| -rw-r--r-- | src/interface/Textbox.h | 7 | ||||
| -rw-r--r-- | src/interface/Window.h | 2 |
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); |
