diff --git a/backends/keymapper/remap-widget.cpp b/backends/keymapper/remap-widget.cpp index 9e736bd3f88..cb4150dffd3 100644 --- a/backends/keymapper/remap-widget.cpp +++ b/backends/keymapper/remap-widget.cpp @@ -270,13 +270,11 @@ void RemapWidget::loadKeymap() { } void RemapWidget::refreshKeymap() { - Graphics::TextAlign alignment = g_gui.useRTL() ? Graphics::kTextAlignRight : Graphics::kTextAlignLeft; - for (uint i = 0; i < _actions.size(); i++) { ActionRow &row = _actions[i]; if (!row.actionText) { - row.actionText = new GUI::StaticTextWidget(widgetsBoss(), 0, 0, 0, 0, "", alignment, nullptr, GUI::ThemeEngine::kFontStyleNormal); + row.actionText = new GUI::StaticTextWidget(widgetsBoss(), 0, 0, 0, 0, "", GUI::ThemeEngine::kTextAlignHStart, nullptr, GUI::ThemeEngine::kFontStyleNormal); row.actionText->setLabel(row.action->description); row.keyButton = new GUI::DropdownButtonWidget(widgetsBoss(), 0, 0, 0, 0, "", nullptr, kRemapCmd + i); @@ -305,7 +303,7 @@ void RemapWidget::refreshKeymap() { KeymapTitleRow &keymapTitle = _keymapSeparators[row.keymap]; if (!keymapTitle.descriptionText) { - keymapTitle.descriptionText = new GUI::StaticTextWidget(widgetsBoss(), 0, 0, 0, 0, row.keymap->getDescription(), alignment); + keymapTitle.descriptionText = new GUI::StaticTextWidget(widgetsBoss(), 0, 0, 0, 0, row.keymap->getDescription(), GUI::ThemeEngine::kTextAlignHStart); keymapTitle.resetButton = new GUI::ButtonWidget(widgetsBoss(), 0, 0, 0, 0, "", nullptr, kResetKeymapCmd + i); // I18N: Button to reset keymap mappings to defaults diff --git a/gui/ThemeEval.cpp b/gui/ThemeEval.cpp index f7d0fde9135..62fed6f2af0 100644 --- a/gui/ThemeEval.cpp +++ b/gui/ThemeEval.cpp @@ -71,7 +71,7 @@ bool ThemeEval::getWidgetData(const Common::String &widget, int16 &x, int16 &y, return _layouts[dialogName]->getWidgetData(widgetName, x, y, w, h, useRTL); } -Graphics::TextAlign ThemeEval::getWidgetTextHAlign(const Common::String &widget) { +GUI::ThemeEngine::TextAlignH ThemeEval::getWidgetTextHAlign(const Common::String &widget) { Common::StringTokenizer tokenizer(widget, "."); if (widget.hasPrefix("Dialog.")) @@ -81,20 +81,20 @@ Graphics::TextAlign ThemeEval::getWidgetTextHAlign(const Common::String &widget) Common::String widgetName = tokenizer.nextToken(); if (!_layouts.contains(dialogName)) - return Graphics::kTextAlignInvalid; + return GUI::ThemeEngine::kTextAlignHInvalid; return _layouts[dialogName]->getWidgetTextHAlign(widgetName); } -ThemeEval &ThemeEval::addWidget(const Common::String &name, const Common::String &type, int w, int h, Graphics::TextAlign align, bool useRTL) { +ThemeEval &ThemeEval::addWidget(const Common::String &name, const Common::String &type, int w, int h, GUI::ThemeEngine::TextAlignH align, bool useRTL) { int typeW = -1; int typeH = -1; - Graphics::TextAlign typeAlign = Graphics::kTextAlignInvalid; + GUI::ThemeEngine::TextAlignH typeAlign = GUI::ThemeEngine::kTextAlignHInvalid; if (!type.empty()) { typeW = getVar("Globals." + type + ".Width", -1); typeH = getVar("Globals." + type + ".Height", -1); - typeAlign = (Graphics::TextAlign)getVar("Globals." + type + ".Align", Graphics::kTextAlignInvalid); + typeAlign = (GUI::ThemeEngine::TextAlignH)getVar("Globals." + type + ".Align", GUI::ThemeEngine::kTextAlignHInvalid); } ThemeLayoutWidget *widget; @@ -102,13 +102,13 @@ ThemeEval &ThemeEval::addWidget(const Common::String &name, const Common::String widget = new ThemeLayoutTabWidget(_curLayout.top(), name, typeW == -1 ? w : typeW, typeH == -1 ? h : typeH, - typeAlign == Graphics::kTextAlignInvalid ? align : typeAlign, + typeAlign == GUI::ThemeEngine::kTextAlignHInvalid ? align : typeAlign, getVar("Globals.TabWidget.Tab.Height", 0)); else widget = new ThemeLayoutWidget(_curLayout.top(), name, typeW == -1 ? w : typeW, typeH == -1 ? h : typeH, - typeAlign == Graphics::kTextAlignInvalid ? align : typeAlign, + typeAlign == GUI::ThemeEngine::kTextAlignHInvalid ? align : typeAlign, useRTL); _curLayout.top()->addChild(widget); diff --git a/gui/ThemeEval.h b/gui/ThemeEval.h index ff7fe82a946..b2f14a0f90c 100644 --- a/gui/ThemeEval.h +++ b/gui/ThemeEval.h @@ -32,6 +32,7 @@ #include "graphics/font.h" #include "gui/ThemeLayout.h" +#include "gui/ThemeEngine.h" namespace GUI { @@ -76,7 +77,7 @@ public: ThemeEval &addDialog(const Common::String &name, const Common::String &overlays, int16 maxWidth = -1, int16 maxHeight = -1, int inset = 0); ThemeEval &addLayout(ThemeLayout::LayoutType type, int spacing = -1, ThemeLayout::ItemAlign itemAlign = ThemeLayout::kItemAlignStart); - ThemeEval &addWidget(const Common::String &name, const Common::String &type, int w = -1, int h = -1, Graphics::TextAlign align = Graphics::kTextAlignLeft, bool useRTL = false); + ThemeEval &addWidget(const Common::String &name, const Common::String &type, int w = -1, int h = -1, GUI::ThemeEngine::TextAlignH align = GUI::ThemeEngine::kTextAlignHStart, bool useRTL = false); ThemeEval &addImportedLayout(const Common::String &name); ThemeEval &addSpace(int size = -1); @@ -91,7 +92,7 @@ public: bool getWidgetData(const Common::String &widget, int16 &x, int16 &y, int16 &w, int16 &h); bool getWidgetData(const Common::String &widget, int16 &x, int16 &y, int16 &w, int16 &h, bool &useRTL); - Graphics::TextAlign getWidgetTextHAlign(const Common::String &widget); + GUI::ThemeEngine::TextAlignH getWidgetTextHAlign(const Common::String &widget); #ifdef LAYOUT_DEBUG_DIALOG void debugDraw(Graphics::Surface *screen, const Graphics::Font *font) { diff --git a/gui/ThemeLayout.cpp b/gui/ThemeLayout.cpp index bc02efbd4cc..743e8c56d8e 100644 --- a/gui/ThemeLayout.cpp +++ b/gui/ThemeLayout.cpp @@ -89,20 +89,20 @@ bool ThemeLayout::getWidgetData(const Common::String &name, int16 &x, int16 &y, return false; } -Graphics::TextAlign ThemeLayout::getWidgetTextHAlign(const Common::String &name) { +GUI::ThemeEngine::TextAlignH ThemeLayout::getWidgetTextHAlign(const Common::String &name) { if (name.empty()) { assert(getLayoutType() == kLayoutMain); return _textHAlign; } - Graphics::TextAlign res; + GUI::ThemeEngine::TextAlignH res; for (uint i = 0; i < _children.size(); ++i) { - if ((res = _children[i]->getWidgetTextHAlign(name)) != Graphics::kTextAlignInvalid) + if ((res = _children[i]->getWidgetTextHAlign(name)) != GUI::ThemeEngine::kTextAlignHInvalid) return res; } - return Graphics::kTextAlignInvalid; + return GUI::ThemeEngine::kTextAlignHInvalid; } int16 ThemeLayoutStacked::getParentWidth() { @@ -172,12 +172,12 @@ bool ThemeLayoutWidget::getWidgetData(const Common::String &name, int16 &x, int1 return false; } -Graphics::TextAlign ThemeLayoutWidget::getWidgetTextHAlign(const Common::String &name) { +GUI::ThemeEngine::TextAlignH ThemeLayoutWidget::getWidgetTextHAlign(const Common::String &name) { if (name == _name) { return _textHAlign; } - return Graphics::kTextAlignInvalid; + return GUI::ThemeEngine::kTextAlignHInvalid; } void ThemeLayoutWidget::reflowLayout(Widget *widgetChain) { diff --git a/gui/ThemeLayout.h b/gui/ThemeLayout.h index 25ec9eb997f..fafb82c1e3d 100644 --- a/gui/ThemeLayout.h +++ b/gui/ThemeLayout.h @@ -26,6 +26,7 @@ #include "common/array.h" #include "common/rect.h" #include "graphics/font.h" +#include "gui/ThemeEngine.h" #ifdef LAYOUT_DEBUG_DIALOG namespace Graphics { @@ -63,7 +64,7 @@ public: ThemeLayout(ThemeLayout *p) : _parent(p), _x(0), _y(0), _w(-1), _h(-1), _defaultW(-1), _defaultH(-1), - _textHAlign(Graphics::kTextAlignInvalid) {} + _textHAlign(GUI::ThemeEngine::kTextAlignHInvalid) {} virtual ~ThemeLayout() { for (uint i = 0; i < _children.size(); ++i) @@ -100,7 +101,7 @@ protected: void setWidth(int16 width) { _w = width; } void setHeight(int16 height) { _h = height; } - void setTextHAlign(Graphics::TextAlign align) { _textHAlign = align; } + void setTextHAlign(GUI::ThemeEngine::TextAlignH align) { _textHAlign = align; } /** * Checks if the layout element is attached to a GUI widget @@ -116,11 +117,11 @@ protected: public: virtual bool getWidgetData(const Common::String &name, int16 &x, int16 &y, int16 &w, int16 &h, bool &useRTL); - virtual Graphics::TextAlign getWidgetTextHAlign(const Common::String &name); + virtual GUI::ThemeEngine::TextAlignH getWidgetTextHAlign(const Common::String &name); void importLayout(ThemeLayout *layout); - Graphics::TextAlign getTextHAlign() { return _textHAlign; } + GUI::ThemeEngine::TextAlignH getTextHAlign() { return _textHAlign; } #ifdef LAYOUT_DEBUG_DIALOG void debugDraw(Graphics::Surface *screen, const Graphics::Font *font); @@ -135,7 +136,7 @@ protected: Common::Rect _padding; Common::Array _children; int16 _defaultW, _defaultH; - Graphics::TextAlign _textHAlign; + GUI::ThemeEngine::TextAlignH _textHAlign; }; class ThemeLayoutMain : public ThemeLayout { @@ -220,7 +221,7 @@ protected: class ThemeLayoutWidget : public ThemeLayout { public: - ThemeLayoutWidget(ThemeLayout *p, const Common::String &name, int16 w, int16 h, Graphics::TextAlign align, bool &useRTL) : ThemeLayout(p), _name(name) { + ThemeLayoutWidget(ThemeLayout *p, const Common::String &name, int16 w, int16 h, GUI::ThemeEngine::TextAlignH align, bool &useRTL) : ThemeLayout(p), _name(name) { _w = _defaultW = w; _h = _defaultH = h; _useRTL = useRTL; @@ -229,7 +230,7 @@ public: } bool getWidgetData(const Common::String &name, int16 &x, int16 &y, int16 &w, int16 &h, bool &useRTL) override; - Graphics::TextAlign getWidgetTextHAlign(const Common::String &name) override; + GUI::ThemeEngine::TextAlignH getWidgetTextHAlign(const Common::String &name) override; void reflowLayout(Widget *widgetChain) override; @@ -254,7 +255,7 @@ class ThemeLayoutTabWidget : public ThemeLayoutWidget { int _tabHeight; public: - ThemeLayoutTabWidget(ThemeLayout *p, const Common::String &name, int16 w, int16 h, Graphics::TextAlign align, int tabHeight): + ThemeLayoutTabWidget(ThemeLayout *p, const Common::String &name, int16 w, int16 h, GUI::ThemeEngine::TextAlignH align, int tabHeight): ThemeLayoutWidget(p, name, w, h, align, _useRTL) { _tabHeight = tabHeight; } diff --git a/gui/ThemeParser.cpp b/gui/ThemeParser.cpp index eb14746a810..879925be86f 100644 --- a/gui/ThemeParser.cpp +++ b/gui/ThemeParser.cpp @@ -717,8 +717,7 @@ bool ThemeParser::parserCallback_widget(ParserNode *node) { useRTL = false; } - Graphics::TextAlign textAlign = GUI::convertTextAlignH(alignH, false); - _theme->getEvaluator()->addWidget(var, node->values["type"], width, height, textAlign, useRTL); + _theme->getEvaluator()->addWidget(var, node->values["type"], width, height, alignH, useRTL); } return true; diff --git a/gui/options.cpp b/gui/options.cpp index c7f19d79dfb..ec9570065e8 100644 --- a/gui/options.cpp +++ b/gui/options.cpp @@ -1135,8 +1135,6 @@ void OptionsDialog::addAchievementsControls(GuiObject *boss, const Common::Strin uint16 width = g_system->getOverlayWidth() <= 320 ? 240 : 410; uint16 descrDelta = g_system->getOverlayWidth() <= 320 ? 25 : 30; - Graphics::TextAlign alignment = g_gui.useRTL() ? Graphics::kTextAlignRight : Graphics::kTextAlignLeft; - for (int16 viewAchieved = 1; viewAchieved >= 0; viewAchieved--) { // run this twice, first view all achieved, then view all non-hidden & non-achieved @@ -1163,7 +1161,7 @@ void OptionsDialog::addAchievementsControls(GuiObject *boss, const Common::Strin yPos += yStep; if (info.descriptions[idx].comment && strlen(info.descriptions[idx].comment) > 0) { - new StaticTextWidget(scrollContainer, lineHeight + descrDelta, yPos, width - descrDelta, yStep, info.descriptions[idx].comment, alignment, "", ThemeEngine::kFontStyleNormal); + new StaticTextWidget(scrollContainer, lineHeight + descrDelta, yPos, width - descrDelta, yStep, info.descriptions[idx].comment, GUI::ThemeEngine::kTextAlignHStart, "", ThemeEngine::kFontStyleNormal); yPos += yStep; } @@ -1173,12 +1171,12 @@ void OptionsDialog::addAchievementsControls(GuiObject *boss, const Common::Strin if (nHidden) { Common::String hiddenStr = Common::String::format(_("%d hidden achievements remaining"), nHidden); - new StaticTextWidget(scrollContainer, lineHeight, yPos, width, yStep, hiddenStr.c_str(), alignment); + new StaticTextWidget(scrollContainer, lineHeight, yPos, width, yStep, hiddenStr.c_str(), GUI::ThemeEngine::kTextAlignHStart); } if (nMax) { Common::String totalStr = Common::String::format(_("Achievements unlocked: %d/%d"), nAchieved, nMax); - new StaticTextWidget(scrollContainer, lineHeight, lineHeight, width, yStep, totalStr.c_str(), alignment); + new StaticTextWidget(scrollContainer, lineHeight, lineHeight, width, yStep, totalStr.c_str(), GUI::ThemeEngine::kTextAlignHStart); SliderWidget *progressBar; progressBar = new SliderWidget(scrollContainer, lineHeight, lineHeight*2, progressBarWidth, lineHeight); diff --git a/gui/saveload-dialog.cpp b/gui/saveload-dialog.cpp index bc059fcb2b8..ebf31049d95 100644 --- a/gui/saveload-dialog.cpp +++ b/gui/saveload-dialog.cpp @@ -377,8 +377,6 @@ SaveLoadChooserSimple::SaveLoadChooserSimple(const String &title, const String & _backgroundType = ThemeEngine::kDialogBackgroundSpecial; _pageTitle = new StaticTextWidget(this, "SaveLoadChooser.Title", title); - if (g_gui.useRTL()) - _pageTitle->setAlign(Graphics::kTextAlignRight); // Add choice list _list = new ListWidget(this, "SaveLoadChooser.List"); @@ -760,8 +758,6 @@ SaveLoadChooserGrid::SaveLoadChooserGrid(const Common::String &title, bool saveM _backgroundType = ThemeEngine::kDialogBackgroundSpecial; _pageTitle = new StaticTextWidget(this, "SaveLoadChooser.Title", title); - if (g_gui.useRTL()) - _pageTitle->setAlign(Graphics::kTextAlignRight); // The list widget needs to be bound so it takes space in the layout ContainerWidget *list = new ContainerWidget(this, "SaveLoadChooser.List"); @@ -777,11 +773,7 @@ SaveLoadChooserGrid::SaveLoadChooserGrid(const Common::String &title, bool saveM // Page display _pageDisplay = new StaticTextWidget(this, "SaveLoadChooser.PageDisplay", Common::String()); - if (g_gui.useRTL()) { - _pageDisplay->setAlign(Graphics::kTextAlignLeft); - } else { - _pageDisplay->setAlign(Graphics::kTextAlignRight); - } + _pageDisplay->setAlign(GUI::ThemeEngine::kTextAlignHEnd); } SaveLoadChooserGrid::~SaveLoadChooserGrid() { @@ -955,8 +947,6 @@ void SaveLoadChooserGrid::reflowLayout() { _lines = MAX(1, availableHeight / slotAreaHeight); _entriesPerPage = _columns * _lines; - Graphics::TextAlign alignment = Graphics::kTextAlignLeft; - // In save mode the first button is always "New Save", thus we need to // adjust the entries per page here. if (_saveMode) { @@ -1004,14 +994,10 @@ void SaveLoadChooserGrid::reflowLayout() { buttonCmd += 1; } - if (g_gui.useRTL()) { - alignment = Graphics::kTextAlignRight; - } - PicButtonWidget *button = new PicButtonWidget(container, dstX, dstY, buttonWidth, buttonHeight, nullptr, buttonCmd); dstY += buttonHeight; - StaticTextWidget *description = new StaticTextWidget(container, dstX, dstY, buttonWidth, kLineHeight, Common::String(), alignment); + StaticTextWidget *description = new StaticTextWidget(container, dstX, dstY, buttonWidth, kLineHeight, Common::String(), GUI::ThemeEngine::kTextAlignHStart); _buttons.push_back(SlotButton(container, button, description)); } diff --git a/gui/widget.cpp b/gui/widget.cpp index dc1c4d4197c..1d4fbc2b897 100644 --- a/gui/widget.cpp +++ b/gui/widget.cpp @@ -299,20 +299,22 @@ StaticTextWidget::StaticTextWidget(GuiObject *boss, int x, int y, int w, int h, _font = font; } +StaticTextWidget::StaticTextWidget(GuiObject *boss, int x, int y, int w, int h, const Common::String &text, GUI::ThemeEngine::TextAlignH align, const char *tooltip, ThemeEngine::FontStyle font) + : Widget(boss, x, y, w, h, tooltip) { + setFlags(WIDGET_ENABLED); + _type = kStaticTextWidget; + _label = text; + _font = font; + _align = GUI::convertTextAlignH(align, g_gui.useRTL() && _useRTL); +} + StaticTextWidget::StaticTextWidget(GuiObject *boss, const Common::String &name, const Common::String &text, const char *tooltip, ThemeEngine::FontStyle font) : Widget(boss, name, tooltip) { setFlags(WIDGET_ENABLED | WIDGET_CLEARBG); _type = kStaticTextWidget; _label = text; - _align = g_gui.xmlEval()->getWidgetTextHAlign(name); - if (g_gui.useRTL() && _useRTL) { - if (_align == Graphics::kTextAlignLeft) { - _align = Graphics::kTextAlignRight; - } else if (_align == Graphics::kTextAlignRight) { - _align = Graphics::kTextAlignLeft; - } - } + _align = GUI::convertTextAlignH(g_gui.xmlEval()->getWidgetTextHAlign(name), g_gui.useRTL() && _useRTL); _font = font; } @@ -337,6 +339,9 @@ void StaticTextWidget::setAlign(Graphics::TextAlign align) { } } +void StaticTextWidget::setAlign(GUI::ThemeEngine::TextAlignH align) { + setAlign(GUI::convertTextAlignH(align, g_gui.useRTL() && _useRTL)); +} void StaticTextWidget::drawWidget() { g_gui.theme()->drawText( diff --git a/gui/widget.h b/gui/widget.h index 7a81017f7d9..8d080df150d 100644 --- a/gui/widget.h +++ b/gui/widget.h @@ -201,12 +201,15 @@ protected: ThemeEngine::FontStyle _font; public: StaticTextWidget(GuiObject *boss, int x, int y, int w, int h, const Common::String &text, Graphics::TextAlign align, const char *tooltip = nullptr, ThemeEngine::FontStyle font = ThemeEngine::kFontStyleBold); + StaticTextWidget(GuiObject *boss, int x, int y, int w, int h, const Common::String &text, GUI::ThemeEngine::TextAlignH align, const char *tooltip = nullptr, ThemeEngine::FontStyle font = ThemeEngine::kFontStyleBold); StaticTextWidget(GuiObject *boss, const Common::String &name, const Common::String &text, const char *tooltip = nullptr, ThemeEngine::FontStyle font = ThemeEngine::kFontStyleBold); void setValue(int value); void setLabel(const Common::String &label); void handleMouseEntered(int button) override { readLabel(); } const Common::String &getLabel() const { return _label; } void setAlign(Graphics::TextAlign align); + void setAlign(GUI::ThemeEngine::TextAlignH align); + Graphics::TextAlign getAlign() const { return _align; } void readLabel() { read(_label); }