Quantcast

Rename Clamp.

Scott Sibley [08-04-11 - 06:10]
Rename Clamp.
Filename
Modules/Clamp/Clamp.lua
diff --git a/Modules/Clamp/Clamp.lua b/Modules/Clamp/Clamp.lua
new file mode 100644
index 0000000..e14f7cd
--- /dev/null
+++ b/Modules/Clamp/Clamp.lua
@@ -0,0 +1,219 @@
+local mod = StarTip:NewModule("Fade", "AceHook-3.0")
+mod.name = "Fade"
+local _G = _G
+local GameTooltip = _G.GameTooltip
+local StarTip = _G.StarTip
+local UnitExists = _G.UnitExists
+local self = mod
+local L = StarTip.L
+
+local defaults = {
+	profile = {
+		unitFrames = 2,
+		otherFrames = 1,
+		units = 2,
+		objects = 2,
+	}
+}
+
+mod.defaults = defaults
+
+local choices = {
+	"Hide",
+	"Fade out"
+}
+
+local get = function(info)
+	return self.db.profile[info[#info]]
+end
+
+local set = function(info, v)
+	self.db.profile[info[#info]] = v
+end
+
+local options = {
+	units = {
+		name = L["World Units"],
+		desc = L["What to do with tooltips for world frames"],
+		type = "select",
+		values = choices,
+		get = get,
+		set = set,
+		order = 4
+	},
+	unitFrames = {
+		name = L["Unit Frames"],
+		desc = L["What to do with tooltips for unit frames"],
+		type = "select",
+		values = choices,
+		get = get,
+		set = set,
+		order = 5
+	},
+	otherFrames = {
+		name = L["Other Frames"],
+		desc = L["What to do with tooltips for other frames (spells, macros, items, etc..)"],
+		type = "select",
+		values = choices,
+		get = get,
+		set = set,
+		order = 6
+	},
+	objects = {
+		name = L["World Objects"],
+		desc = L["What to do with tooltips for world objects (mailboxes, portals, etc..)"],
+		type = "select",
+		values = choices,
+		get = get,
+		set = set,
+		order = 7
+	}
+}
+
+function mod:OnInitialize()
+	self.db = StarTip.db:RegisterNamespace(self:GetName(), defaults)
+	StarTip:SetOptionsDisabled(options, true)
+	self:SecureHook("GameTooltip_SetDefaultAnchor")
+end
+
+function mod:OnEnable()
+	StarTip:SetOptionsDisabled(options, false)
+end
+
+function mod:OnDisable()
+	StarTip:SetOptionsDisabled(options, true)
+end
+
+function mod:GetOptions()
+	return options
+end
+
+function mod:GameTooltip_SetDefaultAnchor(this, owner)
+	if owner ~= UIParent and mod.isUnit then -- This is terrible. Fixes a bug, but it likely introduces another bug related to passing over unit frames. Didn't seem to bother anything in a BG test.
+		StarTip.tooltipMain:Hide()
+	end
+end
+
+-- CowTip's solution below
+local updateExistenceFrame = CreateFrame("Frame")
+local updateAlphaFrame = CreateFrame("Frame")
+
+local checkExistence = function()
+	if not UnitExists(StarTip.unit) and mod.isUnit then
+		updateExistenceFrame:SetScript("OnUpdate", nil)
+		local kind
+		if GameTooltip:GetOwner() == UIParent then
+			kind = self.db.profile.units
+		else
+			kind = self.db.profile.unitFrames
+		end
+		if kind == 2 then
+			GameTooltip:FadeOut()
+			StarTip.tooltipMain:FadeOut()
+		else
+			GameTooltip:Hide()
+			StarTip.tooltipMain:Hide()
+		end
+	end
+end
+
+local checkTooltipAlpha = function()
+	if GameTooltip:GetAlpha() < 1 then
+		updateAlphaFrame:SetScript("OnUpdate", nil)
+		local kind
+		if GameTooltip:IsOwned(UIParent) then
+			kind = self.db.profile.objects
+		else
+			kind = self.db.profile.otherFrames
+		end
+		if kind == 2 then
+			GameTooltip:FadeOut()
+			StarTip.tooltipMain:FadeOut()
+		else
+			GameTooltip:Hide()
+			StarTip.tooltipMain:Hide()
+		end
+	end
+end
+
+function mod:OnShow()
+	if self.isUnit and UnitExists(StarTip.unit) then
+		updateExistenceFrame:SetScript("OnUpdate", checkExistence)
+	else
+		updateAlphaFrame:SetScript("OnUpdate", checkTooltipAlpha)
+	end
+end
+
+function mod:OnFadeOut(this, ...)
+	if self.justFade then
+		self.justFade = nil
+		return true
+	end
+	local kind
+	if self.isUnit then
+		if GameTooltip:IsOwned(UIParent) then
+			kind = self.db.profile.units
+		else
+			kind = self.db.profile.unitFrames
+		end
+	else
+		if GameTooltip:IsOwned(UIParent) then
+			kind = self.db.profile.objects
+		else
+			kind = self.db.profile.otherFrames
+		end
+	end
+	self.isUnit = false
+	if kind == 2 then
+		return true
+	else
+		self.justHide = true
+		GameTooltip:Hide()
+		StarTip.tooltipMain:Hide()
+	end
+
+end
+
+function mod:GameTooltipHide(this, ...)
+	if self.justHide then
+		self.justHide = nil
+		return true
+	end
+	local kind
+	if self.isUnit then
+		if GameTooltip:IsOwned(UIParent) then
+			kind = self.db.profile.units
+		else
+			kind = self.db.profile.unitFrames
+		end
+	else
+		if GameTooltip:IsOwned(UIParent) then
+			kind = self.db.profile.objects
+		else
+			kind = self.db.profile.otherFrames
+		end
+	end
+	self.isUnit = false
+	if kind == 2 then
+		self.justFade = true
+		GameTooltip:FadeOut()
+		StarTip.tooltipMain:FadeOut()
+	else
+		return true
+	end
+end
+
+function mod:SetUnit()
+	self.isUnit = true
+	updateExistenceFrame:SetScript("OnUpdate", checkExistence)
+end
+
+function mod:SetItem()
+	self.isUnit = false
+	updateExistenceFrame:SetScript("OnUpdate", nil)
+end
+
+function mod:SetSpell()
+	self.isUnit = false
+	updateExistenceFrame:SetScript("OnUpdate", nil)
+end