Fandom

WoWWiki

Tooltip pseudo code

Redirected from Tooltip Pseudo Code

104,634pages on
this wiki
Add New Page
Talk0 Share

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.


Tooltips are notoriously difficult to handle in WoW UI code. This page contains Lua-style pseudo code that attempts to represent the behaviour and interaction of various GameTooltip widget methods. (Currently it's not complete, yet to include details about line-wrapping behaviour). See UIOBJECT GameTooltip for notes about GameTooltips. See Widget API for a reference list about GameTooltip methods and their uses.


Note: This is not actual working Lua code, you can't copy/paste it. It is a representation of what the game's engine does internally, to help understand tooltips' behaviour. No such Lua code actually exists anywhere.

(Valid for patch 1.10)

 -- Hiding a tooltip's parent causes tooltip:ClearTooltip() to be called
 -- Showing a tooltip's parent causes tooltip:Show() to be called
 
 tooltip = {
     owner = nil;
     anchor = nil;
     fading = nil;
     numLines = 0;
 }
 
 -- Note: this function is not accessible via the Widget API, only available internally
 function tooltip:ClearTooltip()
     self.owner = nil;
     self.fading = nil;
     self:ClearLines();
 end
 
 function tooltip:SetOwner(owner, anchor)
     self:Hide()
     self:ClearAllPoints();
     
     self.owner = owner;
     self.anchor = anchor;
 end
 
 function tooltip:SetX(info)
     if (not self.owner) then
         self:Hide();
         return;
     end
 
     -- Note: CheckValidity() varies slightly between SetX methods
     -- * Empty Bag slots are considered invalid
     -- * Empty Inventory are considered invalid
     -- * Empty Actions *are* considered valid, and therefore clear the lines of the tooltip
     -- details on others not researched...
     if (CheckValidity(info)) then
         self:ClearLines();
         FillInTooltipData(info);    -- Fill in TextLeftX and TextRightX fontstrings
         self.numLines = NumberOfFilledInLines();
         if (self.numLines > 0) then
             self:Show();
         end
     end
 end
 
 function tooltip:Show()
     if (not self.owner) then
         MakeTooltipNotShown();    -- Hides the tooltip, IsShown returns 0.
         return;
     end
     
     if (self.numLines > 0) then
         if (self.anchor ~= "ANCHOR_NONE") then
             self:ClearAllPoints();
             SetPointsBasedOnAnchor(anchor);    -- Call SetPoint appropriate to the anchoring
         elseif (NoAnchorPointExists())    -- Check if any points have been set yet
             -- Note that this SetPoint with the infinite x-offset is responsible for making a tooltip
             -- "hidden" in the sense of not appearing on-screen, despite both IsVisible/IsShown returning 1.
             -- It also causes the tooltip to appear corrupt on screen if SetPoint is explicitly called on
             -- it with anything other than "TOPLEFT" after this, because of conflicting Points constraints.
             -- In all cases the tooltip's fontstrings can still be read properly.
             self:SetPoint("TOPLEFT", UIParent, 1.#INF, 0);
         end
         LayoutTooltip();    -- Resize tooltip based on shown fontstrings
         MakeTooltipShown();    -- Shows the tooltip, IsShown returns 1
         self.fading = nil;
     else
         self.owner = nil;
         MakeTooltipNotShown();    -- Hides the tooltip, IsShown returns 0
     end
 end
 
 function tooltip:Hide()
     self:ClearTooltip();
     MakeTooltipNotShown();    -- Hides the tooltip, IsShown returns 0
 end
 
 function tooltip:FadeOut()
     self.fading = true;
     GraduallyStartFadingOutTooltip();
     if (TimeIsUp() and self.fading) then
         self:Hide();
     end
 end
 
 function tooltip:AppendText(text, etc)
     AddToFirstLine(text)    -- Appends the text to the first line
     self:Show()
 end
 
 function tooltip:AddLine(text, etc)
     AddExtraLine(text, etc);    -- Fills out the next TextLefti and show it
     self.numLines = self.numLines + 1;
 end
 
 function tooltip:AddDoubleLine(data)
     AddExtraLineLeftRight(data);    -- Fills out the next TextLefti and TextRighti and show them
     self.numLines = self.numLines + 1;
 end
 
 function tooltip:ClearLines()
     for i=1, MAX do
         tooltipTextLefti:Hide();
         tooltipTextLefti:SetText(nil);
         tooltipTextRighti:Hide();
     end
     self.numLines = 0;
 end
 
 function tooltip:NumLines()
     return self.numLines;
 end
 
 function tooltip:IsOwned(frame)
     if (frame == self.owner) then
         return 1;
     end
 end

Also on Fandom

Random Wiki