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
diff --git a/gui/slider.cpp b/gui/slider.cpp
index c53dabc..2fd114d 100644
--- a/gui/slider.cpp
+++ b/gui/slider.cpp
@@ -33,6 +33,7 @@
 	xml_node<>* child;
 
 	sAction = NULL;
+	sSliderLabel = NULL;
 	sSlider = NULL;
 	sSliderUsed = NULL;
 	sTouch = NULL;
@@ -44,7 +45,8 @@
 		return;
 	}
 
-	child = node->first_node("resource");
+	// Load the resources
+	child = FindNode(node, "resource");
 	if (child)
 	{
 		sSlider = LoadAttrImage(child, "base");
@@ -52,11 +54,27 @@
 		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()
 {
 	delete sAction;
+	delete sSliderLabel;
 }
 
 int GUISlider::Render(void)
@@ -99,6 +118,11 @@
 	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;
 }