diff --git a/data/skins/Ocean.stkskin b/data/skins/Ocean.stkskin
index 7f7c90768..adedfb3a7 100644
--- a/data/skins/Ocean.stkskin
+++ b/data/skins/Ocean.stkskin
@@ -119,6 +119,7 @@ when the border that intersect at this corner are enabled.
+
@@ -132,6 +133,22 @@ when the border that intersect at this corner are enabled.
left_border="110" right_border="110" top_border="0" bottom_border="36"
preserve_h_aspect_ratios="true" hborder_out_portion="0.0" />
+
+
+
+
+
+
+
+
+
@@ -132,6 +133,20 @@ when the border that intersect at this corner are enabled.
left_border="110" right_border="110" top_border="0" bottom_border="36"
preserve_h_aspect_ratios="true" hborder_out_portion="0.0" />
+
+
+
+
+
+
(widget);
+ if(q->getBackgroundColor())
+ {
+ core::recti rect3 = rect;
+ rect3.UpperLeftCorner.X -= 2;
+ rect3.UpperLeftCorner.Y += 3;
+ rect3.LowerRightCorner.X += 2;
+ rect3.LowerRightCorner.Y -= 5;
+ int player_id=q->getSpinnerWidgetPlayerID();
+ if(player_id==0)
+ params=SkinConfig::m_render_params["spinner0::neutral"];
+ if(player_id==1)
+ params=SkinConfig::m_render_params["spinner1::neutral"];
+ if(player_id==2)
+ params=SkinConfig::m_render_params["spinner2::neutral"];
+ if(player_id==3)
+ params=SkinConfig::m_render_params["spinner3::neutral"];
+ }
+ return params;
+}*/
void Skin::drawSpinnerBody(const core::recti &rect, Widget* widget,
const bool pressed, bool focused)
{
@@ -1221,20 +1245,48 @@ void Skin::drawSpinnerBody(const core::recti &rect, Widget* widget,
}
}
}
+
+
+ // defining params and spinner widget to use spinner widget functions
+ SpinnerWidget* q = dynamic_cast(widget);
+ BoxRenderParams params;
+ if (focused|| pressed)
+ {
+ params=SkinConfig::m_render_params["spinner::focused"];
+ }
+ else if(q->getBackgroundColor()==1)
+ {
+
+ int player_id=q->getSpinnerWidgetPlayerID();
+// printf("player id=%d",player_idd);
+ if(player_id==0)
+ params=SkinConfig::m_render_params["spinner0::neutral"];
+ if(player_id==1)
+ params=SkinConfig::m_render_params["spinner1::neutral"];
+ if(player_id==2)
+ params=SkinConfig::m_render_params["spinner2::neutral"];
+ if(player_id==3)
+ params=SkinConfig::m_render_params["spinner3::neutral"];
+ }
+ else
+ {
+ params=SkinConfig::m_render_params["spinner::neutral"];
+ }
- BoxRenderParams& params = (focused || pressed)
- ? SkinConfig::m_render_params["spinner::focused"]
- : SkinConfig::m_render_params["spinner::neutral"];
-
+
+
if (widget->isFocusedForPlayer(1))
{
- core::recti rect2 = rect;
+ core::recti rect2 = rect;
rect2.UpperLeftCorner.X += 2;
rect2.UpperLeftCorner.Y -= 3;
rect2.LowerRightCorner.X -= 2;
rect2.LowerRightCorner.Y += 5;
+ //setBackground(rect,widget,pressed,focused,1);
drawBoxFromStretchableTexture(widget, rect2,
SkinConfig::m_render_params["squareFocusHalo2::neutral"]);
+
+
}
else if (widget->isFocusedForPlayer(2))
{
@@ -1256,7 +1308,7 @@ void Skin::drawSpinnerBody(const core::recti &rect, Widget* widget,
drawBoxFromStretchableTexture(widget, rect2,
SkinConfig::m_render_params["squareFocusHalo4::neutral"]);
}
-
+
core::recti sized_rect = rect;
if (m_dialog && m_dialog_size < 1.0f && widget->m_parent != NULL &&
widget->m_parent->getType() == gui::EGUIET_WINDOW)
@@ -1281,9 +1333,10 @@ void Skin::drawSpinnerBody(const core::recti &rect, Widget* widget,
drawBoxFromStretchableTexture(widget, sized_rect, params,
widget->m_deactivated);
-
+
// ---- If this spinner is of "gauge" type, draw filling
const SpinnerWidget* w = dynamic_cast(widget);
+
if (w->isGauge() && !w->m_deactivated)
{
const int handle_size = (int)( widget->m_h*params.m_left_border
diff --git a/src/guiengine/skin.hpp b/src/guiengine/skin.hpp
index 9d4bebc04..6d0a77f9a 100644
--- a/src/guiengine/skin.hpp
+++ b/src/guiengine/skin.hpp
@@ -132,7 +132,6 @@ using namespace irr;
*/
namespace GUIEngine
{
-
/**
* In order to avoid calculating render information every frame, it's
* stored in a SkinWidgetContainer for each widget (or each widget part
@@ -269,11 +268,8 @@ namespace GUIEngine
video::ITexture* bg_image;
-
-
std::vector m_tooltips;
std::vector m_tooltip_at_mouse;
-
#ifdef USE_PER_LINE_BACKGROUND
public:
#endif
@@ -322,13 +318,14 @@ namespace GUIEngine
const bool pressed, const bool bottomArrow);
void drawTooltip(Widget* widget, bool atMouse);
+
public:
// dirty way to have dialogs that zoom in
bool m_dialog;
float m_dialog_size;
-
+
/**
* \brief load a skin from the file specified in the user configuration file
* \throw std::runtime_error if file cannot be read
@@ -409,6 +406,9 @@ namespace GUIEngine
virtual void setSize (gui::EGUI_DEFAULT_SIZE which, s32 size);
virtual void setSpriteBank (gui::IGUISpriteBank *bank);
+// BoxRenderParams& setBackground(const core::recti &rect, Widget* widget,BoxRenderParams& params);
+
+
void drawTooltips();
video::ITexture* getImage(const char* name);
diff --git a/src/guiengine/widgets/spinner_widget.cpp b/src/guiengine/widgets/spinner_widget.cpp
index 3787388b0..71656640d 100644
--- a/src/guiengine/widgets/spinner_widget.cpp
+++ b/src/guiengine/widgets/spinner_widget.cpp
@@ -45,6 +45,9 @@ SpinnerWidget::SpinnerWidget(const bool gauge) : Widget(WTYPE_SPINNER)
m_check_inside_me = true; //FIXME: not sure this is necessary
m_supports_multiplayer = true;
m_value = -1;
+ m_backgroundcolor=0;
+// background_color_image="glass_square.jpg";
+ m_spinner_widget_player_id=-1;
m_min = 0;
m_max = 999;
@@ -107,9 +110,10 @@ void SpinnerWidget::add()
rect widget_size = rect(m_x, m_y, m_x + m_w, m_y + m_h);
IGUIButton * btn = GUIEngine::getGUIEnv()->addButton(widget_size, m_parent, widgetID, L"");
m_element = btn;
-
+
m_element->setTabOrder( m_element->getID() );
+
// left arrow
rect subsize_left_arrow = rect(0 ,0, m_h, m_h);
IGUIButton * left_arrow = GUIEngine::getGUIEnv()->addButton(subsize_left_arrow, btn, getNewNoFocusID(), L" ");
@@ -118,9 +122,9 @@ void SpinnerWidget::add()
m_children[0].m_event_handler = this;
m_children[0].m_properties[PROP_ID] = "left";
m_children[0].m_id = m_children[0].m_element->getID();
-
+
m_badge_x_shift = subsize_left_arrow.getWidth();
-
+// setBackgroundColor(); // setting background
// label
if (m_graphical)
{
@@ -160,8 +164,9 @@ void SpinnerWidget::add()
{
label->setText(m_labels[m_value].c_str() );
}
+
}
-
+
// right arrow
rect subsize_right_arrow = rect(m_w - m_h, 0, m_w, m_h);
@@ -173,11 +178,29 @@ void SpinnerWidget::add()
m_children[2].m_id = m_children[2].m_element->getID();
// refresh display
+
+
setValue(m_value);
}
-
-// -----------------------------------------------------------------------------
-
+void SpinnerWidget::setBackgroundColor()
+{
+
+ m_backgroundcolor=1;
+}
+int SpinnerWidget::getBackgroundColor()
+{
+ return m_backgroundcolor;
+}
+void SpinnerWidget::setSpinnerWidgetPlayerID(int playerID)
+{
+
+ m_spinner_widget_player_id=playerID;
+ printf("spinnerwidgetplayerid=%d",m_spinner_widget_player_id);
+}
+int SpinnerWidget::getSpinnerWidgetPlayerID()
+{
+ return m_spinner_widget_player_id;
+}
ITexture* SpinnerWidget::getTexture()
{
assert(m_graphical);
@@ -365,6 +388,8 @@ stringw SpinnerWidget::getStringValue() const
return "";
}
+
+
// -----------------------------------------------------------------------------
void SpinnerWidget::setValue(irr::core::stringw new_value)
diff --git a/src/guiengine/widgets/spinner_widget.hpp b/src/guiengine/widgets/spinner_widget.hpp
index 364dad936..cb1d82a3f 100644
--- a/src/guiengine/widgets/spinner_widget.hpp
+++ b/src/guiengine/widgets/spinner_widget.hpp
@@ -68,6 +68,10 @@ namespace GUIEngine
* it displays how close the value is to the maximum by filling a line
*/
bool m_gauge;
+
+ //for setting background
+ int m_backgroundcolor;
+ int m_spinner_widget_player_id;
/** \brief Whether to wrap back to the first value when going "beyond" the last value */
bool m_wrap_around;
@@ -93,6 +97,8 @@ namespace GUIEngine
/** Call only if this spinner is graphical. Returns the current texture to display */
irr::video::ITexture* getTexture();
+ // to set the background image
+// irr::video::ITexture* getBackgroundColor();
public:
@@ -104,7 +110,13 @@ namespace GUIEngine
void addLabel(irr::core::stringw label);
void clearLabels();
-
+ // next four functions are for background colour behind playername in multikart screen selection
+ void setBackgroundColor();
+ int getBackgroundColor();
+ void setSpinnerWidgetPlayerID(int playerID);
+ int getSpinnerWidgetPlayerID();
+
+
void setListener(ISpinnerConfirmListener* listener) { m_listener = listener; }
/** \brief implement method from base class Widget */
@@ -165,6 +177,7 @@ namespace GUIEngine
/** Display custom text in spinner */
void setCustomText(const core::stringw& text);
+
};
}
diff --git a/src/states_screens/kart_selection.cpp b/src/states_screens/kart_selection.cpp
index d777f3ede..d73405d9d 100644
--- a/src/states_screens/kart_selection.cpp
+++ b/src/states_screens/kart_selection.cpp
@@ -134,11 +134,18 @@ PlayerNameSpinner::PlayerNameSpinner(KartSelectionScreen* parent,
m_incorrect = false;
m_red_mark_widget = NULL;
m_parent = parent;
+ m_backgroundcolor = true;
+// printf("m_player_id=%d",m_player_id);
+ setBackgroundColor();
+ setSpinnerWidgetPlayerID(m_player_id);
} // PlayerNameSpinner
// ------------------------------------------------------------------------
void PlayerNameSpinner::setID(const int m_player_id)
{
PlayerNameSpinner::m_player_id = m_player_id;
+// printf("m_player_id=%d",m_player_id);
+
+
} // setID
// ------------------------------------------------------------------------
/** Add a red mark on the spinner to mean "invalid choice" */
@@ -229,6 +236,8 @@ PlayerKartWidget::PlayerKartWidget(KartSelectionScreen* parent,
m_player_ident_spinner->m_y = player_name_y;
m_player_ident_spinner->m_w = player_name_w;
m_player_ident_spinner->m_h = player_name_h;
+ //m_player_ident_spinner->setBgimage(m_player_id);
+
if (parent->m_multiplayer && associated_player)
{
@@ -270,6 +279,7 @@ PlayerKartWidget::PlayerKartWidget(KartSelectionScreen* parent,
//m_player_ident_spinner->m_event_handler = this;
m_children.push_back(m_player_ident_spinner);
+
// ----- Kart model view
@@ -410,12 +420,14 @@ void PlayerKartWidget::setPlayerID(const int newPlayerID)
// Change the player ID
m_player_id = newPlayerID;
-
+// m_player_ident_spinner->setBgimage(m_player_id);
// restore previous focus, but with new player ID
if (focus != NULL) focus->setFocusForPlayer(m_player_id);
- if (m_player_ident_spinner != NULL)
+ if (m_player_ident_spinner != NULL){
m_player_ident_spinner->setID(m_player_id);
+ //m_player_ident_spinner->setBgimage(m_player_id);
+ }
} // setPlayerID
// ------------------------------------------------------------------------
@@ -482,6 +494,7 @@ void PlayerKartWidget::add()
for (int n=0; ngetPlayer(n)->getName();
+
m_player_ident_spinner->addLabel( translations->fribidize(name) );
}
@@ -1829,6 +1842,7 @@ bool KartSelectionScreen::validateIdentChoices()
// perform actual checking
for (int n=0; ngetProfile()
@@ -2090,6 +2104,8 @@ EventPropagation FocusDispatcher::focused(const int playerID)
const int amount = m_parent->m_kart_widgets.size();
for (int n=0; nm_kart_widgets[n].getPlayerID() == playerID)
{
// If player is done, don't do anything with focus
diff --git a/src/states_screens/kart_selection.hpp b/src/states_screens/kart_selection.hpp
index 13f0be8f7..89a854a83 100644
--- a/src/states_screens/kart_selection.hpp
+++ b/src/states_screens/kart_selection.hpp
@@ -21,6 +21,7 @@
#include
#include "guiengine/screen.hpp"
+#include "guiengine/skin.hpp"
#include "guiengine/widgets/dynamic_ribbon_widget.hpp"
#include "guiengine/widgets/label_widget.hpp"
#include "guiengine/widgets/model_view_widget.hpp"
@@ -33,6 +34,7 @@ namespace GUIEngine
class Widget;
class BubbleWidget;
enum EventPropagation;
+
}
namespace Online
{
@@ -202,6 +204,8 @@ class PlayerNameSpinner : public GUIEngine::SpinnerWidget
int m_player_id;
bool m_incorrect;
irr::gui::IGUIImage* m_red_mark_widget;
+ irr::gui::IGUIImage* m_red_image;
+ //Skin* m_background;
KartSelectionScreen* m_parent;
//virtual EventPropagation focused(const int m_playerID) ;
@@ -217,6 +221,8 @@ public:
// ------------------------------------------------------------------------
/** Remove any red mark set with 'markAsIncorrect' */
void markAsCorrect();
+ //-- me --
+
};
/** A widget representing the kart selection for a player (i.e. the player's