Bugfixes and improvements to spinner widget

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@10480 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
auria 2011-12-22 21:01:03 +00:00
parent 4e62406c8f
commit 7518d008dd
3 changed files with 30 additions and 9 deletions

View File

@ -1232,12 +1232,12 @@ void Skin::drawSpinnerBody(const core::recti &rect, Widget* widget,
/ (w->getMax() - w->getMin());
const core::recti dest_area(widget->m_x + handle_size,
widget->m_y,
widget->m_x + handle_size +
const core::recti dest_area(rect.UpperLeftCorner.X + handle_size,
rect.UpperLeftCorner.Y,
rect.UpperLeftCorner.X + handle_size +
(int)((widget->m_w
- 2*handle_size)*value),
widget->m_y + widget->m_h);
rect.UpperLeftCorner.Y + widget->m_h);
const ITexture* texture =
SkinConfig::m_render_params["gaugefill::neutral"].getImage();

View File

@ -41,9 +41,10 @@ SpinnerWidget::SpinnerWidget(const bool gauge) : Widget(WTYPE_SPINNER)
m_gauge = gauge;
m_listener = NULL;
m_graphical = false;
m_check_inside_me = true; //FIXME: not sure this is necessary
m_supports_multiplayer = true;
m_value = -1;
m_min = 0;
m_max = 999;
@ -89,7 +90,10 @@ void SpinnerWidget::add()
}
}
m_value = (m_min + m_max)/2;
if (m_value == -1)
{
m_value = (m_min + m_max)/2;
}
// create sub-widgets if they don't already exist
if (m_children.size() == 0)
@ -164,6 +168,12 @@ void SpinnerWidget::add()
label->setTextAlignment(EGUIA_CENTER, EGUIA_CENTER);
label->setTabStop(false);
label->setNotClipped(true);
if (m_labels.size() > 0)
{
label->setText(m_labels[m_value].c_str() );
}
}
@ -332,18 +342,19 @@ void SpinnerWidget::setValue(const int new_value)
std::string imagefile = StringUtils::insertValues(icon.str(), m_value);
((IGUIImage*)(m_children[1].m_element))->setImage(irr_driver->getTexture(imagefile));
}
else if (m_labels.size() > 0)
else if (m_labels.size() > 0 && m_children.size() > 0)
{
assert(new_value >= 0);
assert(new_value < (int)m_labels.size());
m_children[1].m_element->setText(m_labels[new_value].c_str() );
}
else if (m_text.size() > 0)
else if (m_text.size() > 0 && m_children.size() > 0)
{
stringw text = StringUtils::insertValues(m_text.c_str(), m_value);
m_children[1].m_element->setText( text.c_str() );
}
else
else if (m_children.size() > 0)
{
m_children[1].m_element->setText( stringw(m_value).c_str() );
}
@ -409,3 +420,10 @@ void SpinnerWidget::setDeactivated()
setValue( getValue() ); // Update the display
}
// -----------------------------------------------------------------------------
void SpinnerWidget::setCustomText(const core::stringw& text)
{
m_children[1].m_element->setText(text.c_str());
}

View File

@ -158,6 +158,9 @@ namespace GUIEngine
/** Override method from base class Widget */
virtual void setDeactivated();
/** Display custom text in spinner */
void setCustomText(const core::stringw& text);
};
}