vector menuTooltipSize;
float menuTooltipAlpha;
string menuTooltipText;
-float menuTooltipState; // 0: static, 1: fading in, 2: fading out
+float menuTooltipState; // 0: static, 1: fading in, 2: fading out, 3: forced fading out
float m_testmousetooltipbox(vector pos)
{
if(pos.x >= menuTooltipOrigin.x && pos.x < menuTooltipOrigin.x + menuTooltipSize.x)
entity it;
entity best;
- best = world;
+ best = NULL;
it = root;
while(it.instanceOfContainer)
best = it;
else if(menu_tooltips == 2 && (it.cvarName || it.onClickCommand))
best = it;
- it = world;
+ it = NULL;
}
else if(it.instanceOfModalController)
it = it.focusedChild;
}
return menuTooltipItem.tooltip;
}
+string prev_tooltip;
void m_tooltip(vector pos)
{
float f, i, w;
if (!menu_tooltips)
{
// don't return immediately, fade out the active tooltip first
- if (menuTooltipItem == world)
+ if (menuTooltipItem == NULL)
return;
- it = world;
+ it = NULL;
menu_tooltips_old = menu_tooltips;
}
else
menuTooltipAveragedMousePos = menuTooltipAveragedMousePos * (1 - f) + pos * f;
f = vlen(pos - menuTooltipAveragedMousePos);
if(f < 0.01)
+ {
it = m_findtooltipitem(main, pos);
+
+ if(it.instanceOfListBox && it.isScrolling(it))
+ it = world;
+
+ if(it && prev_tooltip != it.tooltip)
+ {
+ // fade out if tooltip of a certain item has changed
+ menuTooltipState = 3;
+ if(prev_tooltip)
+ strunzone(prev_tooltip);
+ prev_tooltip = strzone(it.tooltip);
+ }
+ else if(menuTooltipItem && !m_testmousetooltipbox(pos))
+ menuTooltipState = 3; // fade out if mouse touches it
+
+ }
else
- it = world;
+ it = NULL;
}
fontsize = '1 0 0' * (SKINFONTSIZE_TOOLTIP / conwidth) + '0 1 0' * (SKINFONTSIZE_TOOLTIP / conheight);
- // float menuTooltipState; // 0: static, 1: fading in, 2: fading out
+ // float menuTooltipState; // 0: static, 1: fading in, 2: fading out, 3: forced fading out
if(it != menuTooltipItem)
{
switch(menuTooltipState)
else if(menuTooltipState == 2) // re-fade in?
menuTooltipState = 1;
- if(menuTooltipItem)
- if(!m_testmousetooltipbox(pos))
- menuTooltipState = 2; // fade out if mouse touches it
-
switch(menuTooltipState)
{
- case 1:
+ case 1: // fade in
menuTooltipAlpha = bound(0, menuTooltipAlpha + 5 * frametime, 1);
if(menuTooltipAlpha == 1)
menuTooltipState = 0;
break;
- case 2:
+ case 2: // fade out
+ case 3: // forced fade out
menuTooltipAlpha = bound(0, menuTooltipAlpha - 2 * frametime, 1);
if(menuTooltipAlpha == 0)
{
menuTooltipState = 0;
- menuTooltipItem = world;
+ menuTooltipItem = NULL;
}
break;
}
- if(menuTooltipItem == world)
+ if(menuTooltipItem == NULL)
{
if (menuTooltipText)
{
if(menu_tooltips != menu_tooltips_old)
{
if (menu_tooltips != 0 && menu_tooltips_old != 0)
- menuTooltipItem = world; // reload tooltip next frame
+ menuTooltipItem = NULL; // reload tooltip next frame
menu_tooltips_old = menu_tooltips;
}
else if(menuTooltipOrigin.x < 0) // unallocated?
METHOD(XonoticGameModelSettingsTab, fill, void(entity));
METHOD(XonoticGameModelSettingsTab, showNotify, void(entity));
ATTRIB(XonoticGameModelSettingsTab, title, string, _("Models"))
+ ATTRIB(XonoticGameModelSettingsTab, tooltip, string, _("Customize how players and items are displayed in game"))
ATTRIB(XonoticGameModelSettingsTab, intendedWidth, float, 0.9)
ATTRIB(XonoticGameModelSettingsTab, rows, float, 13)
ATTRIB(XonoticGameModelSettingsTab, columns, float, 5)
me.TD(me, 1, 2, e = makeXonoticSlider(0, 2, 0.2, "cl_deathglow"));
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Gibs:")));
- me.TD(me, 1, 2, e = makeXonoticTextSlider_T("cl_nogibs",
- _("Reduce the amount of gibs or remove them completely (default: lots)")));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_nogibs"));
e.addValue(e, ZCTX(_("GIBS^None")), "1");
e.addValue(e, ZCTX(_("GIBS^Few")), "0.75");
e.addValue(e, ZCTX(_("GIBS^Many")), "0.5");