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