From 21ff02a69331fbcd53dc93a1af9a93618225b4bf Mon Sep 17 00:00:00 2001 From: Ethan Yonker Date: Wed, 18 Feb 2015 14:35:00 -0600 Subject: 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 --- gui/slider.cpp | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) (limited to 'gui/slider.cpp') diff --git a/gui/slider.cpp b/gui/slider.cpp index c53dabc28..2fd114d88 100644 --- a/gui/slider.cpp +++ b/gui/slider.cpp @@ -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; } -- cgit v1.2.3