summaryrefslogtreecommitdiffstats
path: root/gui/button.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gui/button.cpp')
-rw-r--r--gui/button.cpp39
1 files changed, 19 insertions, 20 deletions
diff --git a/gui/button.cpp b/gui/button.cpp
index 18b5560c4..601a51667 100644
--- a/gui/button.cpp
+++ b/gui/button.cpp
@@ -93,6 +93,23 @@ GUIButton::GUIButton(xml_node<>* node)
LoadPlacement(FindNode(node, "placement"), &x, &y, &w, &h, &TextPlacement);
}
SetRenderPos(x, y, w, h);
+ if (mButtonLabel) {
+ TextPlacement = (Placement)LoadAttrInt(FindNode(node, "placement"), "textplacement", TOP_LEFT);
+ if (TextPlacement != TEXT_ONLY_RIGHT) {
+ mButtonLabel->scaleWidth = 1;
+ mButtonLabel->SetMaxWidth(w);
+ mButtonLabel->SetPlacement(CENTER);
+ mTextX = ((mRenderW / 2) + mRenderX);
+ mTextY = mRenderY + (mRenderH / 2);
+ mButtonLabel->SetRenderPos(mTextX, mTextY);
+ } else {
+ mTextX = mRenderW + mRenderX + 5;
+ mRenderW += mTextW + 5;
+ mButtonLabel->GetCurrentBounds(mTextW, mTextH);
+ mTextY = mRenderY + (mRenderH / 2) - (mTextH / 2);
+ mButtonLabel->SetRenderPos(mTextX, mTextY);
+ }
+ }
}
GUIButton::~GUIButton()
@@ -125,15 +142,6 @@ int GUIButton::Render(void)
mButtonLabel->GetCurrentBounds(w, h);
if (w != mTextW) {
mTextW = w;
- if (TextPlacement == CENTER_X_ONLY) {
- mTextX = ((mRenderW - mRenderX) / 2);
- } else if (mTextW > mRenderW) { // As a special case, we'll allow large text which automatically moves it to the right.
- mTextX = mRenderW + mRenderX + 5;
- mRenderW += mTextW + 5;
- } else {
- mTextX = mRenderX + ((mRenderW - mTextW) / 2);
- }
- mButtonLabel->SetRenderPos(mTextX, mTextY);
}
ret = mButtonLabel->Render();
if (ret < 0) return ret;
@@ -198,28 +206,19 @@ int GUIButton::SetRenderPos(int x, int y, int w, int h)
mTextW = 0;
mIconX = mRenderX + ((mRenderW - mIconW) / 2);
if (mButtonLabel) mButtonLabel->GetCurrentBounds(mTextW, mTextH);
- if (mTextW)
+ if (mTextW && TextPlacement == TEXT_ONLY_RIGHT)
{
- if (TextPlacement == CENTER_X_ONLY) {
- mTextX = ((mRenderW - mRenderX) / 2);
- } else if (mTextW > mRenderW) { // As a special case, we'll allow large text which automatically moves it to the right.
- mTextX = mRenderW + mRenderX + 5;
- mRenderW += mTextW + 5;
- } else {
- mTextX = mRenderX + ((mRenderW - mTextW) / 2);
- }
+ mRenderW += mTextW + 5;
}
if (mIconH == 0 || mTextH == 0 || mIconH + mTextH > mRenderH)
{
mIconY = mRenderY + (mRenderH / 2) - (mIconH / 2);
- mTextY = mRenderY + (mRenderH / 2) - (mTextH / 2);
}
else
{
int divisor = mRenderH - (mIconH + mTextH);
mIconY = mRenderY + (divisor / 3);
- mTextY = mRenderY + (divisor * 2 / 3) + mIconH;
}
if (mButtonLabel) mButtonLabel->SetRenderPos(mTextX, mTextY);