--[[ -- Name: TinyTip -- Author: Thrae of Maelstrom (aka "Matthew Carras") -- Release Date: 6-25-06 -- -- These functions include more extragant features, -- such as the PvP Rank Icon or buffs and debuffs, or -- and extra tooltip. This is LoadedOnDemand by TinyTip. --]] local _G = getfenv(0) local GameTooltip, UIParent,GTStatusBar = _G.GameTooltip, _G.UIParent, _G.GameTooltipStatusBar local fClearAllPoints, fSetPoint, fHide,fShow, fGetScript, fSetScript = UIParent.ClearAllPoints, UIParent.SetPoint, UIParent.Hide, UIParent.Show, UIParent.GetScript, UIParent.SetScript local db,EventFrame,ExtrasFrame local tooltip = GameTooltip local gtAddLine, gtNumLines = GameTooltip.AddLine, GameTooltip.NumLines local fsSetText, fsGetText, fsShow, fsHide, fsIsShown, fsGetTextColor = _G.GameTooltipTextLeft1.SetText, _G.GameTooltipTextLeft1.GetText, _G.GameTooltipTextLeft1.Show, _G.GameTooltipTextLeft1.Hide, _G.GameTooltipTextLeft1.IsShown, _G.GameTooltipTextLeft1.GetTextColor local strformat= string.format local acehook local tiplib = _G.AceLibrary:GetInstance("TipLib-1.0") local PvPTexture, ExtraTooltip, ManaBar local i,tmp,tmp2,tmp3 _G.TinyTipExtrasExists = true local SetUnit_IsHooked, FadeOut_IsHooked --[[ -- This is the AnchorTooltipTable table. As it requires you know the frame name -- of the tooltip you wish to anchor, I am going to make it static. Add entries -- into the table as so: ["TooltipName"] = { ["Anchor"] = "BOTTOMRIGHT", ["OffX"] = -50, ["OffY"] = 13 } -- --]] --[[ local AnchorTooltipTable = { ["TooltipName"] = { ["Anchor"] = "BOTTOMRIGHT", ["OffX"] = -50, ["OffY"] = 13 } } --]] local Original_GameTooltip_OnTooltipCleared, OnTooltipCleared_IsHooked local function OnTooltipCleared(this,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10) if Original_GameTooltip_OnTooltipCleared then Original_GameTooltip_OnTooltipCleared(this,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10) end _G.TinyTip_OnTooltipCleared(this,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10) if ExtraTooltip then ExtraTooltip:Hide() end if ExtrasFrame then fHide(ExtrasFrame) if TinyTipIcons_ResetTextureTable then TinyTipIcons_ResetTextureTable() end end if ManaBar then fHide(ManaBar) end end local function ManaBar_Init() if GameTooltip.unit then tmp = _G.UnitManaMax( GameTooltip.unit ) ManaBar:SetMinMaxValues(0, tmp or 100) -- If disconnected if not _G.UnitIsConnected(GameTooltip.unit) then ManaBar:SetValue( tmp or 100 ) ManaBar:SetStatusBarColor(0.5, 0.5, 0.5) else ManaBar:SetValue( _G.UnitMana( GameTooltip.unit ) or 100) tmp = _G.ManaBarColor[ _G.UnitPowerType( GameTooltip.unit ) ] ManaBar:SetStatusBarColor( tmp.r, tmp.g, tmp.b ) end end end local function ManaBar_OnEvent() if _G.event == "UNIT_MANA" or _G.event == "UNIT_ENERGY" or _G.event == "UNIT_RAGE" then if _G.arg1 and _G.arg1 == GameTooltip.unit then ManaBar_Init() end elseif _G.event == "UNIT_DISPLAYPOWER" then if _G.arg1 and _G.arg1 == GameTooltip.unit and _G.UnitPowerType( GameTooltip.unit ) and _G.UnitPowerType( GameTooltip.unit ) > 0 then tmp = _G.ManaBarColor[ _G.UnitPowerType( GameTooltip.unit ) ] ManaBar:SetStatusBarColor( tmp.r, tmp.g, tmp.b ) end end end local function ATTOnUpdate() fClearAllPoints(this) fSetPoint(this, this.TTAnchor or "BOTTOMRIGHT", UIParent, this.TTAnchor or "BOTTOMRIGHT", this.TTOffX or 0, this.TTOffY or 0) end function TinyTipExtras_CopyGameTooltip() tmp = gtNumLines(GameTooltip) for i = 1, tmp do tmp2 = _G[ strformat("GameTooltipTextLeft%d", i) ] tmp3 = _G[ strformat("GameTooltipTextRight%d", i) ] if tmp2 and tmp3 and fsIsShown(tmp2) and fsIsShown(tmp3) and fsGetText(tmp2) and fsGetText(tmp3) then ExtraTooltip:AddLine( fsGetText(tmp2), fsGetTextColor(tmp2) or unpack{1,1,1}, nil, fsGetText(tmp3), fsGetTextColor(tmp3) ) elseif tmp2 and fsGetText(tmp2) then ExtraTooltip:AddLine( fsGetText(tmp2), fsGetTextColor(tmp2) or unpack{1,1,1} ) end end end function TinyTipExtras_ATTUnhook(k) if db["AnchorTooltipTable"] and db["AnchorTooltipTable"][ k ] then if acehook:IsHooked( AnchorTooltipTable[ k ], "OnUpdate") then acehook:Unhook( AnchorTooltipTable[ k ], "OnUpdate") end end end function TinyTipExtras_Init(_db,_EventFrame,_acehook) if _db then db = _db end if _EventFrame then EventFrame = _EventFrame end if _acehook then acehook = _acehook end if acehook and not acehook:IsHooked(GameTooltip, "OnTooltipCleared") then -- most sure-fire way to hide something acehook:HookScript(GameTooltip, "OnTooltipCleared", OnTooltipCleared) Original_GameTooltip_OnTooltipCleared = acehook.hooks[GameTooltip]["OnTooltipCleared"].orig end if acehook and AnchorTooltipTable then local k,v for k,v in AnchorTooltipTable do if _G[ k ] then if not acehook:IsHooked( _G[ k ], "OnUpdate") then if v then if v.Anchor then _G[ k ].TTAnchor = v.Anchor end if v.OffX then _G[ k ].TTOffX = v.OffX end if v.OffY then _G[ k ].TTOffY = v.OffY end end acehook:HookScript( _G[ k ], "OnUpdate", ATTOnUpdate) end end end end if db["ManaBar"] then if not ManaBar then ManaBar = _G.CreateFrame("StatusBar", "TinyTipExtras_ManaBar", GameTooltip) ManaBar:SetStatusBarTexture("Interface\\TargetingFrame\\UI-TargetingFrame-BarFill") ManaBar:SetHeight(8) ManaBar:SetPoint("TOPLEFT", GTStatusBar, "BOTTOMLEFT", 0, 0) ManaBar:SetPoint("TOPRIGHT", GTStatusBar, "BOTTOMRIGHT", 0, 0) ManaBar:SetScript("OnShow", ManaBar_Init) ManaBar:SetScript("OnEvent", ManaBar_OnEvent) ManaBar:RegisterEvent("UNIT_DISPLAYPOWER") ManaBar:RegisterEvent("UNIT_MANA") ManaBar:RegisterEvent("UNIT_ENERGY") ManaBar:RegisterEvent("UNIT_RAGE") end end if db["ExtraTooltip"] then if not ExtraTooltip then ExtraTooltip = tiplib:CreatePsuedoTooltip("TinyTipExtras_Tooltip", UIParent) ExtraTooltip:SetScale( db["Scale"] or 1.0 ) end if db["Compact"] then _G.TinyTip_UnCompactGameTooltip() end GTStatusBar:SetPoint("TOPLEFT", ExtraTooltip, "BOTTOMLEFT", 2, -1) GTStatusBar:SetPoint("TOPRIGHT", ExtraTooltip, "BOTTOMRIGHT", -2, -1) GTStatusBar:SetParent(ExtraTooltip) if ManaBar then ManaBar:SetParent(ExtraTooltip) end if ExtrasFrame then ExtrasFrame:SetParent(ExtraTooltip) end if _G.TinyTipAnchor_ResetReferences then _G.TinyTipAnchor_ResetReferences(ExtraTooltip.ClearAllPoints, ExtraTooltip.SetPoint, ExtraTooltip.SetOwner) end if db["ExtraTooltip"] == 1 then _G.TinyTip_ResetReferences(ExtraTooltip.AddLine, ExtraTooltip.AddDoubleLine, ExtraTooltip, ExtraTooltip) gtAddLine = ExtraTooltip.AddLine tooltip = ExtraTooltip if _G.TinyTipTargets_ResetReferences then _G.TinyTipTargets_ResetReferences(ExtraTooltip.AddLine, ExtraTooltip.AddDoubleLines, ExtraTooltip) end else _G.TinyTip_ResetReferences(GameTooltip.AddLine, GameTooltip.AddDoubleLine, ExtraTooltip, GameTooltip) gtAddLine = GameTooltip.AddLine tooltip = GameTooltip if _G.TinyTipTargets_ResetReferences then _G.TinyTipTargets_ResetReferences(GameTooltip.AddLine, GameTooltip.AddDoubleLines, GameTooltip) end end else GameTooltip:SetScale( db["Scale"] or 1.0 ) GTStatusBar:SetPoint("TOPLEFT", GameTooltip, "BOTTOMLEFT", 2, -1) GTStatusBar:SetPoint("TOPRIGHT", GameTooltip, "BOTTOMRIGHT", -2, -1) GTStatusBar:SetParent(GameTooltip) if ManaBar then ManaBar:SetParent(GameTooltip) end if ExtrasFrame then ExtrasFrame:SetParent(GameTooltip) end _G.TinyTip_ResetReferences(GameTooltip.AddLine, GameTooltip.AddDoubleLine, GameTooltip, GameTooltip) gtAddLine = GameTooltip.AddLine tooltip = GameTooltip if _G.TinyTipAnchor_ResetReferences then _G.TinyTipAnchor_ResetReferences(GameTooltip.ClearAllPoints, GameTooltip.SetPoint, GameTooltip.SetOwner) end if _G.TinyTipTargets_ResetReferences then _G.TinyTipTargets_ResetReferences(GameTooltip.AddLine, GameTooltip.AddDoubleLines, GameTooltip) end end if db["PvPIcon"] or db["Buffs"] or db["Debuffs"] or db["RTIcon"] then if not ExtrasFrame then ExtrasFrame = _G.CreateFrame("Frame", "TinyTipExtras_Frame", GameTooltip) end if TinyTipIcons_Init then TinyTipIcons_Init(db, EventFrame, ExtrasFrame, gtAddLine, tooltip) end end end