From b0f7f2e8d412b65a7bb950f50d1fa511fd6ef946 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Sat, 6 Jun 2009 17:51:41 +0000 Subject: Implement widget property "textalign". Added it to all theme layouts svn-id: r41265 --- gui/ThemeParser.cpp | 47 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 32 insertions(+), 15 deletions(-) (limited to 'gui/ThemeParser.cpp') diff --git a/gui/ThemeParser.cpp b/gui/ThemeParser.cpp index d0e5528480..31d1deb656 100644 --- a/gui/ThemeParser.cpp +++ b/gui/ThemeParser.cpp @@ -62,6 +62,28 @@ static TextData parseTextDataId(const Common::String &name) { return kTextDataNone; } +static Graphics::TextAlign parseTextHAlign(const Common::String &val) { + if (val == "left") + return Graphics::kTextAlignLeft; + else if (val == "right") + return Graphics::kTextAlignRight; + else if (val == "center") + return Graphics::kTextAlignCenter; + else + return Graphics::kTextAlignInvalid; +} + +static GUI::ThemeEngine::TextAlignVertical parseTextVAlign(const Common::String &val) { + if (val == "top") + return GUI::ThemeEngine::kTextAlignVTop; + else if (val == "center") + return GUI::ThemeEngine::kTextAlignVCenter; + else if (val == "bottom") + return GUI::ThemeEngine::kTextAlignVBottom; + else + return GUI::ThemeEngine::kTextAlignVInvalid; +} + ThemeParser::ThemeParser(ThemeEngine *parent) : XMLParser() { @@ -206,22 +228,10 @@ bool ThemeParser::parserCallback_text(ParserNode *node) { Graphics::TextAlign alignH; GUI::ThemeEngine::TextAlignVertical alignV; - if (node->values["horizontal_align"] == "left") - alignH = Graphics::kTextAlignLeft; - else if (node->values["horizontal_align"] == "right") - alignH = Graphics::kTextAlignRight; - else if (node->values["horizontal_align"] == "center") - alignH = Graphics::kTextAlignCenter; - else + if ((alignH = parseTextHAlign(node->values["horizontal_align"])) == Graphics::kTextAlignInvalid) return parserError("Invalid value for text alignment."); - if (node->values["vertical_align"] == "top") - alignV = GUI::ThemeEngine::kTextAlignVTop; - else if (node->values["vertical_align"] == "center") - alignV = GUI::ThemeEngine::kTextAlignVCenter; - else if (node->values["vertical_align"] == "bottom") - alignV = GUI::ThemeEngine::kTextAlignVBottom; - else + if ((alignV = parseTextVAlign(node->values["vertical_align"])) == GUI::ThemeEngine::kTextAlignVInvalid) return parserError("Invalid value for text alignment."); Common::String id = getParentNode(node)->values["id"]; @@ -566,7 +576,14 @@ bool ThemeParser::parserCallback_widget(ParserNode *node) { return parserError("Corrupted height value in key for %s", var.c_str()); } - _theme->getEvaluator()->addWidget(var, width, height, node->values["type"], enabled); + Graphics::TextAlign alignH = Graphics::kTextAlignLeft; + + if (node->values.contains("textalign")) { + if((alignH = parseTextHAlign(node->values["textalign"])) == Graphics::kTextAlignInvalid) + return parserError("Invalid value for text alignment."); + } + + _theme->getEvaluator()->addWidget(var, width, height, node->values["type"], enabled, alignH); } return true; -- cgit v1.2.3 From b0db1b5ed0634dee707d234cfda23201c648cf98 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Sat, 6 Jun 2009 17:52:44 +0000 Subject: Implement FR#2507667: "GUI: Improve PopupWidget rendering / theme layouting". - Split out label from PopUp widget - Aligned every widget on all layouts so GUI becomes to look nice again - Moved textHAlign to layout properties svn-id: r41266 --- gui/ThemeParser.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'gui/ThemeParser.cpp') diff --git a/gui/ThemeParser.cpp b/gui/ThemeParser.cpp index 31d1deb656..2e7e2d3214 100644 --- a/gui/ThemeParser.cpp +++ b/gui/ThemeParser.cpp @@ -800,6 +800,15 @@ bool ThemeParser::parseCommonLayoutProps(ParserNode *node, const Common::String _theme->getEvaluator()->setVar(var + "Padding.Bottom", paddingB); } + + if (node->values.contains("textalign")) { + Graphics::TextAlign alignH = Graphics::kTextAlignLeft; + + if((alignH = parseTextHAlign(node->values["textalign"])) == Graphics::kTextAlignInvalid) + return parserError("Invalid value for text alignment."); + + _theme->getEvaluator()->setVar(var + "Align", alignH); + } return true; } -- cgit v1.2.3 From a882a6f46779768f15d38e350781785d975e5007 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Sun, 28 Jun 2009 19:57:27 +0000 Subject: GUI: Replaced ThemeParser::_drawFunction hashmap by a static function getDrawingFunctionCallback which maps strings to draw funcs svn-id: r41931 --- gui/ThemeParser.cpp | 58 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 25 deletions(-) (limited to 'gui/ThemeParser.cpp') diff --git a/gui/ThemeParser.cpp b/gui/ThemeParser.cpp index 2e7e2d3214..8897eef9d7 100644 --- a/gui/ThemeParser.cpp +++ b/gui/ThemeParser.cpp @@ -23,17 +23,11 @@ * */ -#include "common/util.h" -#include "common/system.h" -#include "common/events.h" -#include "common/hashmap.h" -#include "common/hash-str.h" -#include "common/xmlparser.h" - #include "gui/ThemeEngine.h" #include "gui/ThemeEval.h" #include "gui/ThemeParser.h" #include "gui/GuiManager.h" + #include "graphics/VectorRenderer.h" namespace GUI { @@ -86,19 +80,6 @@ static GUI::ThemeEngine::TextAlignVertical parseTextVAlign(const Common::String ThemeParser::ThemeParser(ThemeEngine *parent) : XMLParser() { - - _drawFunctions["circle"] = &Graphics::VectorRenderer::drawCallback_CIRCLE; - _drawFunctions["square"] = &Graphics::VectorRenderer::drawCallback_SQUARE; - _drawFunctions["roundedsq"] = &Graphics::VectorRenderer::drawCallback_ROUNDSQ; - _drawFunctions["bevelsq"] = &Graphics::VectorRenderer::drawCallback_BEVELSQ; - _drawFunctions["line"] = &Graphics::VectorRenderer::drawCallback_LINE; - _drawFunctions["triangle"] = &Graphics::VectorRenderer::drawCallback_TRIANGLE; - _drawFunctions["fill"] = &Graphics::VectorRenderer::drawCallback_FILLSURFACE; - _drawFunctions["tab"] = &Graphics::VectorRenderer::drawCallback_TAB; - _drawFunctions["void"] = &Graphics::VectorRenderer::drawCallback_VOID; - _drawFunctions["bitmap"] = &Graphics::VectorRenderer::drawCallback_BITMAP; - _drawFunctions["cross"] = &Graphics::VectorRenderer::drawCallback_CROSS; - _defaultStepGlobal = defaultDrawStep(); _defaultStepLocal = 0; _theme = parent; @@ -107,8 +88,6 @@ ThemeParser::ThemeParser(ThemeEngine *parent) : XMLParser() { ThemeParser::~ThemeParser() { delete _defaultStepGlobal; delete _defaultStepLocal; - _palette.clear(); - _drawFunctions.clear(); } void ThemeParser::cleanup() { @@ -281,15 +260,44 @@ bool ThemeParser::parserCallback_color(ParserNode *node) { } +static Graphics::DrawingFunctionCallback getDrawingFunctionCallback(const Common::String &name) { + + if (name == "circle") + return &Graphics::VectorRenderer::drawCallback_CIRCLE; + if (name == "square") + return &Graphics::VectorRenderer::drawCallback_SQUARE; + if (name == "roundedsq") + return &Graphics::VectorRenderer::drawCallback_ROUNDSQ; + if (name == "bevelsq") + return &Graphics::VectorRenderer::drawCallback_BEVELSQ; + if (name == "line") + return &Graphics::VectorRenderer::drawCallback_LINE; + if (name == "triangle") + return &Graphics::VectorRenderer::drawCallback_TRIANGLE; + if (name == "fill") + return &Graphics::VectorRenderer::drawCallback_FILLSURFACE; + if (name == "tab") + return &Graphics::VectorRenderer::drawCallback_TAB; + if (name == "void") + return &Graphics::VectorRenderer::drawCallback_VOID; + if (name == "bitmap") + return &Graphics::VectorRenderer::drawCallback_BITMAP; + if (name == "cross") + return &Graphics::VectorRenderer::drawCallback_CROSS; + + return 0; +} + + bool ThemeParser::parserCallback_drawstep(ParserNode *node) { Graphics::DrawStep *drawstep = newDrawStep(); Common::String functionName = node->values["func"]; - if (_drawFunctions.contains(functionName) == false) - return parserError("%s is not a valid drawing function name", functionName.c_str()); + drawstep->drawingCall = getDrawingFunctionCallback(functionName); - drawstep->drawingCall = _drawFunctions[functionName]; + if (drawstep->drawingCall == 0) + return parserError("%s is not a valid drawing function name", functionName.c_str()); if (!parseDrawStep(node, drawstep, true)) return false; -- cgit v1.2.3