From a078105aee6d5b5956d0f167486016c3dc9faec3 Mon Sep 17 00:00:00 2001 From: auria Date: Sun, 20 Mar 2011 19:49:55 +0000 Subject: [PATCH] Show tooltips when hovering options tabs git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@8002 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- data/gui/options_device.stkgui | 10 +++---- src/guiengine/skin.cpp | 27 +++++++++++++++---- src/guiengine/skin.hpp | 3 ++- src/guiengine/widgets/ribbon_widget.hpp | 2 ++ src/states_screens/options_screen_audio.cpp | 5 ++++ src/states_screens/options_screen_input.cpp | 5 ++++ src/states_screens/options_screen_input2.cpp | 6 +++++ src/states_screens/options_screen_players.cpp | 5 ++++ src/states_screens/options_screen_ui.cpp | 5 ++++ src/states_screens/options_screen_video.cpp | 5 ++++ 10 files changed, 61 insertions(+), 12 deletions(-) diff --git a/data/gui/options_device.stkgui b/data/gui/options_device.stkgui index d3802f725..1b1de5b3c 100644 --- a/data/gui/options_device.stkgui +++ b/data/gui/options_device.stkgui @@ -6,12 +6,10 @@ - - - + + + + diff --git a/src/guiengine/skin.cpp b/src/guiengine/skin.cpp index ee3e8bf9b..9b6627595 100644 --- a/src/guiengine/skin.cpp +++ b/src/guiengine/skin.cpp @@ -944,6 +944,15 @@ void Skin::drawRibbonChild(const core::rect< s32 > &rect, Widget* widget, const } // end if icon ribbons + + if (/*mark_selected && widget->hasTooltip() && (focused || parent_focused) &&*/ parentRibbon->m_mouse_focus == widget) + { + if (rect.isPointInside(irr_driver->getDevice()->getCursorControl()->getPosition())) + { + m_tooltip_at_mouse.push_back(true); + m_tooltips.push_back(widget); + } + } } /** @@ -1050,6 +1059,7 @@ void Skin::drawSpinnerBody(const core::rect< s32 > &rect, Widget* widget, const if (focused && widget->hasTooltip()) { + m_tooltip_at_mouse.push_back(false); m_tooltips.push_back(widget); } } @@ -1376,16 +1386,23 @@ void Skin::drawTooltips() { for (unsigned int n=0; n size = font->getDimension(widget->getTooltipText().c_str()); core::position2di pos(widget->m_x + 15, widget->m_y + widget->m_h); + + if (atMouse) + { + pos = irr_driver->getDevice()->getCursorControl()->getPosition() + core::position2di(15, 15); + } + core::rect r(pos, size); GUIEngine::getDriver()->draw2DRectangle( video::SColor(255, 200, 200, 200), r ); font->draw(widget->getTooltipText(), r, video::SColor(255, 0, 0, 0), false, false); @@ -1606,14 +1623,14 @@ void Skin::draw3DButtonPaneStandard (IGUIElement *element, const core::rect< s32 void Skin::draw3DSunkenPane (IGUIElement *element, video::SColor bgcolor, bool flat, bool fillBackGround, const core::rect< s32 > &rect, const core::rect< s32 > *clip) -{ +{ const int id = element->getID(); Widget* widget = GUIEngine::getWidget(id); - + if (widget == NULL) return; const WidgetType type = widget->m_type; - + IGUIElement* focusedElem = NULL; if (GUIEngine::getFocusForPlayer(PLAYER_ID_GAME_MASTER) != NULL) { diff --git a/src/guiengine/skin.hpp b/src/guiengine/skin.hpp index 984ed30f6..3678779f6 100644 --- a/src/guiengine/skin.hpp +++ b/src/guiengine/skin.hpp @@ -244,6 +244,7 @@ namespace GUIEngine std::vector m_tooltips; + std::vector m_tooltip_at_mouse; #ifdef USE_PER_LINE_BACKGROUND public: @@ -271,7 +272,7 @@ namespace GUIEngine void drawScrollbarThumb(const irr::core::rect< irr::s32 > &rect); void drawScrollbarButton(const irr::core::rect< irr::s32 > &rect, const bool pressed, const bool bottomArrow); - void drawTooltip(Widget* widget); + void drawTooltip(Widget* widget, bool atMouse); public: diff --git a/src/guiengine/widgets/ribbon_widget.hpp b/src/guiengine/widgets/ribbon_widget.hpp index d62460a11..616fab97f 100644 --- a/src/guiengine/widgets/ribbon_widget.hpp +++ b/src/guiengine/widgets/ribbon_widget.hpp @@ -148,6 +148,8 @@ namespace GUIEngine * \brief clear all children of this ribbon (likely because new ones will be added soon after) */ void clearAllChildren(); + + PtrVector& getRibbonChildren() { return m_children; } }; } diff --git a/src/states_screens/options_screen_audio.cpp b/src/states_screens/options_screen_audio.cpp index 0e6e2e393..02b6e5485 100644 --- a/src/states_screens/options_screen_audio.cpp +++ b/src/states_screens/options_screen_audio.cpp @@ -60,6 +60,11 @@ void OptionsScreenAudio::init() RibbonWidget* ribbon = this->getWidget("options_choice"); if (ribbon != NULL) ribbon->select( "tab_audio", PLAYER_ID_GAME_MASTER ); + ribbon->getRibbonChildren()[0].setTooltip( _("Graphics") ); + ribbon->getRibbonChildren()[2].setTooltip( _("User Interface") ); + ribbon->getRibbonChildren()[3].setTooltip( _("Players") ); + ribbon->getRibbonChildren()[4].setTooltip( _("Controls") ); + // ---- sfx volume SpinnerWidget* gauge = this->getWidget("sfx_volume"); assert(gauge != NULL); diff --git a/src/states_screens/options_screen_input.cpp b/src/states_screens/options_screen_input.cpp index 67fa2a1e0..a37823cae 100644 --- a/src/states_screens/options_screen_input.cpp +++ b/src/states_screens/options_screen_input.cpp @@ -126,6 +126,11 @@ void OptionsScreenInput::init() RibbonWidget* tabBar = this->getWidget("options_choice"); if (tabBar != NULL) tabBar->select( "tab_controls", PLAYER_ID_GAME_MASTER ); + tabBar->getRibbonChildren()[0].setTooltip( _("Graphics") ); + tabBar->getRibbonChildren()[1].setTooltip( _("Audio") ); + tabBar->getRibbonChildren()[2].setTooltip( _("User Interface") ); + tabBar->getRibbonChildren()[3].setTooltip( _("Players") ); + /* DynamicRibbonWidget* devices = this->getWidget("devices"); assert( devices != NULL ); diff --git a/src/states_screens/options_screen_input2.cpp b/src/states_screens/options_screen_input2.cpp index 29e3e2fa8..7ac155616 100644 --- a/src/states_screens/options_screen_input2.cpp +++ b/src/states_screens/options_screen_input2.cpp @@ -67,6 +67,12 @@ void OptionsScreenInput2::init() RibbonWidget* tabBar = this->getWidget("options_choice"); if (tabBar != NULL) tabBar->select( "tab_controls", PLAYER_ID_GAME_MASTER ); + tabBar->getRibbonChildren()[0].setTooltip( _("Graphics") ); + tabBar->getRibbonChildren()[1].setTooltip( _("Audio") ); + tabBar->getRibbonChildren()[2].setTooltip( _("User Interface") ); + tabBar->getRibbonChildren()[3].setTooltip( _("Players") ); + + ButtonWidget* deleteBtn = this->getWidget("delete"); if (m_config->getType() != DEVICE_CONFIG_TYPE_KEYBOARD) { diff --git a/src/states_screens/options_screen_players.cpp b/src/states_screens/options_screen_players.cpp index 29f78848f..62c018034 100644 --- a/src/states_screens/options_screen_players.cpp +++ b/src/states_screens/options_screen_players.cpp @@ -64,6 +64,11 @@ void OptionsScreenPlayers::init() RibbonWidget* tabBar = this->getWidget("options_choice"); if (tabBar != NULL) tabBar->select( "tab_players", PLAYER_ID_GAME_MASTER ); + tabBar->getRibbonChildren()[0].setTooltip( _("Graphics") ); + tabBar->getRibbonChildren()[1].setTooltip( _("Audio") ); + tabBar->getRibbonChildren()[2].setTooltip( _("User Interface") ); + tabBar->getRibbonChildren()[4].setTooltip( _("Controls") ); + ListWidget* players = this->getWidget("players"); assert(players != NULL); diff --git a/src/states_screens/options_screen_ui.cpp b/src/states_screens/options_screen_ui.cpp index d1072c29d..fd7b9450b 100644 --- a/src/states_screens/options_screen_ui.cpp +++ b/src/states_screens/options_screen_ui.cpp @@ -105,6 +105,11 @@ void OptionsScreenUI::init() RibbonWidget* ribbon = this->getWidget("options_choice"); if (ribbon != NULL) ribbon->select( "tab_ui", PLAYER_ID_GAME_MASTER ); + ribbon->getRibbonChildren()[0].setTooltip( _("Graphics") ); + ribbon->getRibbonChildren()[1].setTooltip( _("Audio") ); + ribbon->getRibbonChildren()[3].setTooltip( _("Players") ); + ribbon->getRibbonChildren()[4].setTooltip( _("Controls") ); + GUIEngine::SpinnerWidget* skinSelector = this->getWidget("skinchoice"); assert( skinSelector != NULL ); diff --git a/src/states_screens/options_screen_video.cpp b/src/states_screens/options_screen_video.cpp index a39512947..45002feda 100644 --- a/src/states_screens/options_screen_video.cpp +++ b/src/states_screens/options_screen_video.cpp @@ -77,6 +77,11 @@ void OptionsScreenVideo::init() RibbonWidget* ribbon = this->getWidget("options_choice"); if (ribbon != NULL) ribbon->select( "tab_video", PLAYER_ID_GAME_MASTER ); + ribbon->getRibbonChildren()[1].setTooltip( _("Audio") ); + ribbon->getRibbonChildren()[2].setTooltip( _("User Interface") ); + ribbon->getRibbonChildren()[3].setTooltip( _("Players") ); + ribbon->getRibbonChildren()[4].setTooltip( _("Controls") ); + GUIEngine::ButtonWidget* applyBtn = this->getWidget("apply_resolution"); assert( applyBtn != NULL );