GUI: use start + end for static widgets

This commit is contained in:
BLooperZ 2020-06-19 00:40:43 +03:00 committed by Eugene Sandulenko
parent e6e32aeb75
commit 4fc9c11bbe
10 changed files with 49 additions and 58 deletions

View File

@ -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

View File

@ -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);

View File

@ -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) {

View File

@ -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) {

View File

@ -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<ThemeLayout *> _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;
}

View File

@ -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;

View File

@ -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);

View File

@ -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<uint>(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));
}

View File

@ -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(

View File

@ -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); }