--[[ -- Library of common functions to tooltips. -- Can be used to create a psuedo tooltip. -- -- Requires AceLibrary. If you comment out -- TipLib in your TOC file, then comment out -- AceLibrary as well. -- -- Author: Thrae (aka "Matthew Carras") -- Released: 7-11-06 --]] local MAJOR_VERSION = "TipLib-1.0" local MINOR_VERSION = "$Revision: 5255 $" if not AceLibrary then error(MAJOR_VERSION .. " requires AceLibrary") end if not AceLibrary:IsNewVersion(MAJOR_VERSION, MINOR_VERSION) then return end local _G = getfenv(0) local fCreateFontString, fGetName, fSetPoint, fClearAllPoints, fSetWidth, fSetHeight, fGetScale,fSetScript = _G.UIParent.CreateFontString, _G.UIParent.GetName, _G.UIParent.SetPoint, _G.UIParent.ClearAllPoints, _G.UIParent.SetWidth, _G.UIParent.SetHeight, _G.UIParent.GetScale, _G.UIParent.SetScript local fsSetText, fsSetTextColor, fsShow, fsHide, fsGetWidth, fsGetHeight, fsGetFont, fsIsShown = _G.GameTooltipTextLeft1.SetText, _G.GameTooltipTextLeft1.SetTextColor, _G.GameTooltipTextLeft1.Show, _G.GameTooltipTextLeft1.Hide, _G.GameTooltipTextLeft1.GetWidth, _G.GameTooltipTextLeft1.GetHeight,_G.GameTooltipTextLeft1.GetFont, _G.GameTooltipTextLeft1.IsShown local strfind,strformat = string.find,string.format local TipLib = {} function TipLib.SetText(tooltip,textL,rL,gL,bL,aL,textWrap,textR,rR,gR,bR,aR) local fsLeft,fsRight if tooltip.numLines == 0 then fsLeft = fCreateFontString( tooltip, fGetName(tooltip) .. "TextLeft1", "ARTWORK", "GameTooltipHeaderText") fSetPoint(fsLeft, "TOPLEFT", 10, -10) fsRight = fCreateFontString( tooltip, fGetName(tooltip) .. "TextRight1", "ARTWORK", "GameTooltipHeaderText") fSetPoint(fsRight, "LEFT", fsLeft, "RIGHT", 40, 0) tooltip.numLines = 1 _,tooltip.headerfsHeight = fsGetFont(fsLeft) end if not fsLeft then fsLeft = _G[ fGetName(tooltip) .. "TextLeft1" ] end fsSetText(fsLeft, textL) fsSetTextColor(fsLeft, rL or 1.0, gL or 0.8, bL or 0, aL or 1.0) fsShow(fsLeft) if textR then if not fsRight then fsRight = _G[ fGetName(tooltip) .. "TextRight1" ] end fsSetText(fsRight, textR) fsSetTextColor(fsRight, rR or 1.0, gR or 0.8, bR or 0, aR or 1.0) fsShow(fsRight) end end function TipLib.AddLine(tooltip, textL, rL, gL, bL, aL, textR, rR, gR, bR, aR,textWrap) local fsLeft,fsRight if tooltip.unusedLines > 0 then fsLeft = _G[ strformat("%s%s%d", fGetName(tooltip),"TextLeft", (tooltip.numLines - tooltip.unusedLines + 1)) ] fsSetText(fsLeft, textL) fsSetTextColor(fsLeft, rL or 1.0, gL or 0.8, bL or 0, aL or 1.0) fsShow(fsLeft) if textR then fsRight = _G[ strformat("%s%s%d", fGetName(tooltip),"TextRight", (tooltip.numLines - tooltip.unusedLines + 1)) ] fsSetText(fsRight, textR) fsSetTextColor(fsRight, rR or 1.0, gR or 0.8, bR or 0, aR or 1.0) fsShow(fsRight) end tooltip.unusedLines = tooltip.unusedLines - 1 elseif tooltip.numLines == 0 then tooltip:SetText(textL, rL, gL, bL, aL, textWrap, textR, rR, gR, bR, aR) elseif tooltip.numLines then tooltip.numLines = tooltip.numLines + 1 fsLeft = fCreateFontString(tooltip, strformat("%s%s%d", fGetName(tooltip), "TextLeft", tooltip.numLines), "ARTWORK", "GameTooltipText") fsSetText(fsLeft, textL) fsSetTextColor(fsLeft, rL or 1.0, gL or 0.8, bL or 0, aL or 1.0) fSetPoint(fsLeft, "TOPLEFT", _G[ strformat("%s%s%d", fGetName(tooltip), "TextLeft", tooltip.numLines - 1) ], "BOTTOMLEFT", 0, -2) fsShow(fsLeft) fsRight = fCreateFontString(tooltip, strformat("%s%s%d", fGetName(tooltip), "TextRight", tooltip.numLines), "ARTWORK", "GameTooltipText") if textR then fsSetText(fsRight, textR) fsSetTextColor(fsRight, rR or 1.0, gR or 0.8, bR or 0, aR or 1.0) fsShow(fsRight) end fSetPoint(fsRight, "LEFT", fsLeft, "RIGHT", 40, 0) if not tooltip.fsHeight then _,tooltip.fsHeight = fsGetFont(fsLeft) end end end function TipLib.ClearLines(tooltip) local i,fsLeft,fsRight local numUsedLines = tooltip.numLines - tooltip.unusedLines for i=1,numUsedLines,1 do fsLeft = _G[ strformat("%s%s%d", fGetName(tooltip),"TextLeft", i) ] fsRight = _G[ strformat("%s%s%d", fGetName(tooltip),"TextRight", i) ] fsSetText(fsLeft,"") fsHide(fsLeft) fsSetText(fsRight,"") fsHide(fsRight) end tooltip.unusedLines = tooltip.numLines end function TipLib.NumLines(tooltip) return tooltip.numLines end function TipLib.Show(tooltip) local i,fsLeft,fsRight,lineWidth local largestWidth,totalHeight = 0,0 local numUsedLines = tooltip.numLines - tooltip.unusedLines if numUsedLines > 0 then for i=1,numUsedLines,1 do fsLeft = _G[ strformat("%sTextLeft%d", fGetName(tooltip), i) ] fsRight = _G[ strformat("%sTextRight%d", fGetName(tooltip), i) ] lineWidth=0 if fsIsShown(fsLeft) then lineWidth = fsGetWidth(fsLeft) totalHeight = totalHeight + fsGetHeight(fsLeft) end if fsIsShown(fsRight) then lineWidth = lineWidth + fsGetWidth(fsRight) + 40 end if lineWidth > largestWidth then largestWidth = lineWidth end end fSetWidth( tooltip, largestWidth + 25) fSetHeight( tooltip, (totalHeight * 1.1) + 25 ) tooltip:orgShow() end end function TipLib.Hide(tooltip) tooltip:ClearLines() tooltip.owner = nil tooltip:orgHide() end local x,y,uiscale local getcpos = _G.GetCursorPosition function TipLib.OnUpdate() x,y = getcpos() uiscale,tscale = fGetScale(UIParent), fGetScale(this) x,y = (x + this.OffX) / uiscale / tscale, (y + this.OffY) / uiscale / tscale fClearAllPoints(this) fSetPoint(this, "BOTTOMLEFT", UIParent, x, y) end function TipLib.SetOwner(tooltip,owner,anchor,x,y) tooltip.owner = owner anchor = string.upper(anchor) fSetScript(tooltip, "OnUpdate", nil) if anchor == "ANCHOR_CURSOR" then tooltip.OffX, tooltip.OffY = x or 0,y or 0 fSetScript(tooltip, "OnUpdate", tooltip.tlOnUpdate) elseif anchor ~= "ANCHOR_NONE" then _,_,anchor = strfind(anchor, "ANCHOR_(.+)",1) fSetPoint(tooltip, anchor,owner,anchor,x or 0,y or 0) end end function TipLib.IsOwned(tooltip,o) return tooltip.owner == o end function TipLib.CreatePsuedoTooltip(self,name,parent) local tooltip = _G.CreateFrame("Frame", name, parent or _G.UIParent) tooltip:SetFrameStrata("TOOLTIP") tooltip:SetBackdrop({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", tile = true, tileSize = 16, edgeSize = 16, insets = { left = 5, right = 5, top = 5, bottom = 5 }}) tooltip:SetBackdropColor(_G.TOOLTIP_DEFAULT_BACKGROUND_COLOR.r, _G.TOOLTIP_DEFAULT_BACKGROUND_COLOR.g, _G.TOOLTIP_DEFAULT_BACKGROUND_COLOR.b) tooltip:SetBackdropBorderColor( _G.TOOLTIP_DEFAULT_COLOR.r, _G.TOOLTIP_DEFAULT_COLOR.g, _G.TOOLTIP_DEFAULT_COLOR.b) tooltip.numLines = 0 tooltip.unusedLines = 0 tooltip.headerfsHeight = 0 tooltip.fsHeight = 0 tooltip.owner = _G.UIParent fSetPoint(tooltip, "BOTTOMRIGHT", tooltip:GetParent(), "BOTTOMRIGHT", -_G.CONTAINER_OFFSET_X - 13, _G.CONTAINER_OFFSET_Y) tooltip.tlOnUpdate = self.OnUpdate tooltip.SetOwner = self.SetOwner tooltip.orgShow = tooltip.Show tooltip.Show = self.Show tooltip.orgHide = tooltip.Hide tooltip.Hide = self.Hide tooltip.NumLines = self.NumLines tooltip.SetText = self.SetText tooltip.AddLine = self.AddLine tooltip.ClearLines = self.ClearLines return tooltip end AceLibrary:Register(TipLib, MAJOR_VERSION, MINOR_VERSION)