gui: make resources type safe

- add string, int, color and resource loading helpers
- use typed resource classes, and some cleanup in loading code
- remove abstract GetResource() to enforce type safe access
- add height and width query methods to resources and use them
- minor cleanup
- simplify LoadPlacement

Change-Id: I9b81785109a80b3806ad6b50cba4d893b87b0db1
This commit is contained in:
that
2015-02-14 20:23:16 +01:00
parent cfd6509027
commit f6ed8fc1f5
21 changed files with 254 additions and 407 deletions
+10 -48
View File
@@ -28,9 +28,6 @@ extern "C" {
GUIText::GUIText(xml_node<>* node)
: GUIObject(node)
{
xml_attribute<>* attr;
xml_node<>* child;
mFont = NULL;
mIsStatic = 1;
mVarChanged = 0;
@@ -38,53 +35,21 @@ GUIText::GUIText(xml_node<>* node)
maxWidth = 0;
charSkip = 0;
isHighlighted = false;
hasHighlightColor = false;
if (!node)
return;
// Initialize color to solid black
memset(&mColor, 0, sizeof(COLOR));
mColor.alpha = 255;
memset(&mHighlightColor, 0, sizeof(COLOR));
mHighlightColor.alpha = 255;
attr = node->first_attribute("color");
if (attr)
{
std::string color = attr->value();
ConvertStrToColor(color, &mColor);
}
attr = node->first_attribute("highlightcolor");
if (attr)
{
std::string color = attr->value();
ConvertStrToColor(color, &mHighlightColor);
hasHighlightColor = true;
}
// Load colors
mColor = LoadAttrColor(node, "color", COLOR(0,0,0,255));
mHighlightColor = LoadAttrColor(node, "highlightcolor", mColor);
// Load the font, and possibly override the color
child = node->first_node("font");
xml_node<>* child = node->first_node("font");
if (child)
{
attr = child->first_attribute("resource");
if (attr)
mFont = PageManager::FindResource(attr->value());
attr = child->first_attribute("color");
if (attr)
{
std::string color = attr->value();
ConvertStrToColor(color, &mColor);
}
attr = child->first_attribute("highlightcolor");
if (attr)
{
std::string color = attr->value();
ConvertStrToColor(color, &mHighlightColor);
hasHighlightColor = true;
}
mFont = LoadAttrFont(child, "resource");
mColor = LoadAttrColor(child, "color", mColor);
mHighlightColor = LoadAttrColor(child, "highlightcolor", mColor);
}
// Load the placement
@@ -97,8 +62,7 @@ GUIText::GUIText(xml_node<>* node)
mLastValue = parseText();
if (mLastValue != mText) mIsStatic = 0;
mFontHeight = gr_getMaxFontHeight(mFont ? mFont->GetResource() : NULL);
return;
mFontHeight = mFont->GetHeight();
}
int GUIText::Render(void)
@@ -107,13 +71,11 @@ int GUIText::Render(void)
return 0;
void* fontResource = NULL;
string displayValue;
if (mFont)
fontResource = mFont->GetResource();
mLastValue = parseText();
displayValue = mLastValue;
string displayValue = mLastValue;
if (charSkip)
displayValue.erase(0, charSkip);
@@ -138,7 +100,7 @@ int GUIText::Render(void)
y -= mFontHeight;
}
if (hasHighlightColor && isHighlighted)
if (isHighlighted)
gr_color(mHighlightColor.red, mHighlightColor.green, mHighlightColor.blue, mHighlightColor.alpha);
else
gr_color(mColor.red, mColor.green, mColor.blue, mColor.alpha);