aboutsummaryrefslogtreecommitdiff
path: root/gui/ThemeEngine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gui/ThemeEngine.cpp')
-rw-r--r--gui/ThemeEngine.cpp74
1 files changed, 29 insertions, 45 deletions
diff --git a/gui/ThemeEngine.cpp b/gui/ThemeEngine.cpp
index 6c627419fa..d993e5c52b 100644
--- a/gui/ThemeEngine.cpp
+++ b/gui/ThemeEngine.cpp
@@ -62,7 +62,7 @@ struct WidgetDrawData {
/** List of all the steps needed to draw this widget */
Common::List<Graphics::DrawStep> _steps;
- int _textDataId;
+ TextData _textDataId;
Graphics::TextAlign _textAlignH;
GUI::ThemeEngine::TextAlignVertical _textAlignV;
@@ -72,6 +72,16 @@ struct WidgetDrawData {
uint16 _backgroundOffset;
bool _buffer;
+
+
+ /**
+ * Calculates the background threshold offset of a given DrawData item.
+ * After fully loading all DrawSteps of a DrawData item, this function must be
+ * called in order to calculate if such draw steps would be drawn outside of
+ * the actual widget drawing zone (e.g. shadows). If this is the case, a constant
+ * value will be added when restoring the background of the widget.
+ */
+ void calcBackgroundOffset();
};
class ThemeItem {
@@ -191,21 +201,6 @@ static const DrawDataInfo kDrawDataDefaults[] = {
{kDDSeparator, "separator", true, kDDNone},
};
-struct TextDataInfo {
- TextData id;
- const char *name;
-};
-
-static const TextDataInfo kTextDataDefaults[] = {
- {kTextDataDefault, "text_default"},
- {kTextDataHover, "text_hover"},
- {kTextDataDisabled, "text_disabled"},
- {kTextDataInverted, "text_inverted"},
- {kTextDataButton, "text_button"},
- {kTextDataButtonHover, "text_button_hover"},
- {kTextDataNormalFont, "text_normal"}
-};
-
/**********************************************************
* ThemeItem functions for drawing queues.
@@ -486,10 +481,10 @@ void ThemeEngine::setGraphicsMode(GraphicsMode mode) {
_vectorRenderer->setSurface(&_screen);
}
-void ThemeEngine::calcBackgroundOffset(DrawData type) {
+void WidgetDrawData::calcBackgroundOffset() {
uint maxShadow = 0;
- for (Common::List<Graphics::DrawStep>::const_iterator step = _widgets[type]->_steps.begin();
- step != _widgets[type]->_steps.end(); ++step) {
+ for (Common::List<Graphics::DrawStep>::const_iterator step = _steps.begin();
+ step != _steps.end(); ++step) {
if ((step->autoWidth || step->autoHeight) && step->shadow > maxShadow)
maxShadow = step->shadow;
@@ -497,7 +492,7 @@ void ThemeEngine::calcBackgroundOffset(DrawData type) {
maxShadow = step->bevel;
}
- _widgets[type]->_backgroundOffset = maxShadow;
+ _backgroundOffset = maxShadow;
}
void ThemeEngine::restoreBackground(Common::Rect r) {
@@ -511,15 +506,14 @@ void ThemeEngine::restoreBackground(Common::Rect r) {
* Theme elements management
*********************************************************/
void ThemeEngine::addDrawStep(const Common::String &drawDataId, const Graphics::DrawStep &step) {
- DrawData id = getDrawDataId(drawDataId);
+ DrawData id = parseDrawDataId(drawDataId);
assert(_widgets[id] != 0);
_widgets[id]->_steps.push_back(step);
}
-bool ThemeEngine::addTextData(const Common::String &drawDataId, const Common::String &textDataId, Graphics::TextAlign alignH, TextAlignVertical alignV) {
- DrawData id = getDrawDataId(drawDataId);
- TextData textId = getTextDataId(textDataId);
+bool ThemeEngine::addTextData(const Common::String &drawDataId, TextData textId, Graphics::TextAlign alignH, TextAlignVertical alignV) {
+ DrawData id = parseDrawDataId(drawDataId);
if (id == -1 || textId == -1 || !_widgets[id])
return false;
@@ -531,9 +525,7 @@ bool ThemeEngine::addTextData(const Common::String &drawDataId, const Common::St
return true;
}
-bool ThemeEngine::addFont(const Common::String &fontId, const Common::String &file, int r, int g, int b) {
- TextData textId = getTextDataId(fontId);
-
+bool ThemeEngine::addFont(TextData textId, const Common::String &file, int r, int g, int b) {
if (textId == -1)
return false;
@@ -551,7 +543,7 @@ bool ThemeEngine::addFont(const Common::String &fontId, const Common::String &fi
_texts[textId]->_fontPtr = loadFont(file);
if (!_texts[textId]->_fontPtr)
- error("Couldn't load %s font '%s'", fontId.c_str(), file.c_str());
+ error("Couldn't load font '%s'", file.c_str());
FontMan.assignFontToName(file, _texts[textId]->_fontPtr);
}
@@ -587,17 +579,17 @@ bool ThemeEngine::addBitmap(const Common::String &filename) {
}
bool ThemeEngine::addDrawData(const Common::String &data, bool cached) {
- DrawData data_id = getDrawDataId(data);
+ DrawData id = parseDrawDataId(data);
- if (data_id == -1)
+ if (id == -1)
return false;
- if (_widgets[data_id] != 0)
- delete _widgets[data_id];
+ if (_widgets[id] != 0)
+ delete _widgets[id];
- _widgets[data_id] = new WidgetDrawData;
- _widgets[data_id]->_buffer = kDrawDataDefaults[data_id].buffer;
- _widgets[data_id]->_textDataId = -1;
+ _widgets[id] = new WidgetDrawData;
+ _widgets[id]->_buffer = kDrawDataDefaults[id].buffer;
+ _widgets[id]->_textDataId = kTextDataNone;
return true;
}
@@ -625,7 +617,7 @@ void ThemeEngine::loadTheme(const Common::String &themeId) {
if (_widgets[i] == 0) {
warning("Missing data asset: '%s'", kDrawDataDefaults[i].name);
} else {
- calcBackgroundOffset((DrawData)i);
+ _widgets[i]->calcBackgroundOffset();
}
}
}
@@ -1221,7 +1213,7 @@ TextData ThemeEngine::getTextData(DrawData ddId) const {
}
-DrawData ThemeEngine::getDrawDataId(const Common::String &name) const {
+DrawData ThemeEngine::parseDrawDataId(const Common::String &name) const {
for (int i = 0; i < kDrawDataMAX; ++i)
if (name.compareToIgnoreCase(kDrawDataDefaults[i].name) == 0)
return kDrawDataDefaults[i].id;
@@ -1229,14 +1221,6 @@ DrawData ThemeEngine::getDrawDataId(const Common::String &name) const {
return kDDNone;
}
-TextData ThemeEngine::getTextDataId(const Common::String &name) const {
- for (int i = 0; i < kTextDataMAX; ++i)
- if (name.compareToIgnoreCase(kTextDataDefaults[i].name) == 0)
- return kTextDataDefaults[i].id;
-
- return kTextDataNone;
-}
-
/**********************************************************
* External data loading
*********************************************************/