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 );