GUI: Support styles in xml to reduce xml file size

Also allow sliders to have their own text label instead of
requiring a whole separate text object for the label in the xml.

Change-Id: I6e314efb4bb454d496555ff7e003d743063a1308
This commit is contained in:
Ethan Yonker
2015-02-18 14:35:00 -06:00
parent 10ec0175c8
commit 21ff02a693
25 changed files with 1055 additions and 2977 deletions
+26 -2
View File
@@ -33,6 +33,7 @@ GUISlider::GUISlider(xml_node<>* node) : GUIObject(node)
xml_node<>* child;
sAction = NULL;
sSliderLabel = NULL;
sSlider = NULL;
sSliderUsed = NULL;
sTouch = NULL;
@@ -44,7 +45,8 @@ GUISlider::GUISlider(xml_node<>* node) : GUIObject(node)
return;
}
child = node->first_node("resource");
// Load the resources
child = FindNode(node, "resource");
if (child)
{
sSlider = LoadAttrImage(child, "base");
@@ -52,11 +54,27 @@ GUISlider::GUISlider(xml_node<>* node) : GUIObject(node)
sTouch = LoadAttrImage(child, "touch");
}
// Load the text label
sSliderLabel = new GUIText(node);
if (sSliderLabel->Render() < 0)
{
delete sSliderLabel;
sSliderLabel = NULL;
}
// Load the placement
LoadPlacement(node->first_node("placement"), &mRenderX, &mRenderY);
Placement TextPlacement = CENTER;
LoadPlacement(FindNode(node, "placement"), &mRenderX, &mRenderY, &mRenderW, &mRenderH, &TextPlacement);
mRenderW = sSlider->GetWidth();
mRenderH = sSlider->GetHeight();
if (sSliderLabel) {
int sTextX = mRenderX + (mRenderW / 2);
int w, h;
sSliderLabel->GetCurrentBounds(w, h);
int sTextY = mRenderY + ((mRenderH - h) / 2);
sSliderLabel->SetRenderPos(sTextX, sTextY);
}
if (sTouch && sTouch->GetResource())
{
sTouchW = sTouch->GetWidth(); // Width of the "touch image" that follows the touch (arrow)
@@ -78,6 +96,7 @@ GUISlider::GUISlider(xml_node<>* node) : GUIObject(node)
GUISlider::~GUISlider()
{
delete sAction;
delete sSliderLabel;
}
int GUISlider::Render(void)
@@ -99,6 +118,11 @@ int GUISlider::Render(void)
if (sTouch && sTouch->GetResource())
gr_blit(sTouch->GetResource(), 0, 0, sTouchW, sTouchH, sCurTouchX, (mRenderY + ((mRenderH - sTouchH) / 2)));
if (sSliderLabel) {
int ret = sSliderLabel->Render();
if (ret < 0) return ret;
}
sUpdate = 0;
return 0;
}