VGUI Tooltip

 
A tooltip is a vgui2 element defined in the vgui_controls library, in the file Tooltip.cpp. Tooltips are available in all source games. Tooltips are useful for displaying additional information about something, without taking up any extra space.
Example Usage
- Before using tooltips, be sure to include vgui_controls/tooltip.h.
- Most VGUI elements have tooltips associated with them.
- You can call control->GetTooltip()to get the control's tooltip, and then you can calltooltip->SetTextto set the tooltip's text.
- Alternatively, you can also set the text of a tooltip in a resource file using the keyvalue tooltiptext.
"StrengthLabel"
{
   "ControlName"	"Label"
   "fieldName"		"StrengthLabel"
   "xpos"		"185"
   "ypos"		"2"
   "tooltiptext"	"Each point increases hit points by 19. Each point increases hit point regen."
   "wide"		"100"
   "tall"		"20"
   "autoResize"	"0"
   "pinCorner"		"0"
   "visible"		"1"
   "enabled"		"1"
   "tabPosition"	"0"
   "labelText"		"Strength:"
   "textAlignment"	"west"
   "dulltext"		"0"
   "brighttext"	"0"
   "wrap"		"0"
}
Known Problems With Tooltips
Calling Tooltip::SetText on a tooltip when a tooltip window is visible changes the text for the visible tooltip window. Make sure that you check to make sure no tooltip windows are currently open before calling Tooltip::SetText.
void Tooltip::SetText(const char *text)
{
	_isDirty = true;
	if (!text)
	{
		text = "";
	}
	if (m_Text.Size() > 0)
	{
		m_Text.RemoveAll();
	}
	for (unsigned int i = 0; i < strlen(text); i++)
	{
		m_Text.AddToTail(text[i]);
	}
	m_Text.AddToTail('\0');
	
	if (s_TooltipWindow.Get())
	{
		s_TooltipWindow->SetText(m_Text.Base());
	}
}
The code above was taken from line 89 of tooltip.cpp.
Valve uses a static handler for the current displayed tooltip window (declared on line 28 of tooltip.cpp), static vgui::DHANDLE< TextEntry > s_TooltipWindow;.
Ii isn't clear why, but as you can see in the code above, towards the end of the function Tooltip::SetText, it changes the text of the active tooltip window. Valve needs to remove this from their code to fix this bug.
























