|
|
|
|
--[[
|
|
|
|
|
On the theory that the mouse can only interact with one element on the screen at
|
|
|
|
|
a time, there's no need for every element to always define its own highlight.
|
|
|
|
|
|
|
|
|
|
rematch:ShowTextureHighlight(texture) will parent a shared frame to the texture's
|
|
|
|
|
parent, then make the frame's texture the same as the given texture, but with
|
|
|
|
|
alphaMode "ADD", causing the texture to light up.
|
|
|
|
|
|
|
|
|
|
Use rematch:HideTextureHighlight() to remove it.
|
|
|
|
|
|
|
|
|
|
CompositeButtons use this method to highlight its textures, but with its own frame.
|
|
|
|
|
|
|
|
|
|
TODO: Make CompositeButtons use this instead and add UpdateTextureHighlight to
|
|
|
|
|
the postUpdateFuncs of its scrollframes.
|
|
|
|
|
]]
|
|
|
|
|
|
|
|
|
|
local _,L = ...
|
|
|
|
|
local rematch = Rematch
|
|
|
|
|
|
|
|
|
|
local highlight = CreateFrame("Frame",nil,UIParent,"RematchUseParentLevel")
|
|
|
|
|
highlight:SetSize(32,32)
|
|
|
|
|
highlight:EnableMouse(false)
|
|
|
|
|
highlight:Hide()
|
|
|
|
|
|
|
|
|
|
highlight.Overlay = highlight:CreateTexture(nil,"OVERLAY")
|
|
|
|
|
highlight.Overlay:SetAllPoints(true)
|
|
|
|
|
highlight.Overlay:SetAlpha(0.75) -- adjust this to control "brightness"
|
|
|
|
|
highlight.Overlay:SetBlendMode("ADD")
|
|
|
|
|
|
|
|
|
|
local currentTexture -- the texture currently being highlighted
|
|
|
|
|
|
|
|
|
|
function rematch:ShowTextureHighlight(texture)
|
|
|
|
|
local parent = texture and texture:GetParent()
|
|
|
|
|
if parent then
|
|
|
|
|
currentTexture = texture
|
|
|
|
|
highlight:SetParent(parent)
|
|
|
|
|
highlight:SetPoint("TOPLEFT",texture,"TOPLEFT")
|
|
|
|
|
highlight:SetPoint("BOTTOMRIGHT",texture,"BOTTOMRIGHT")
|
|
|
|
|
highlight.Overlay:SetTexture(texture:GetTexture())
|
|
|
|
|
highlight.Overlay:SetTexCoord(texture:GetTexCoord())
|
|
|
|
|
highlight.Overlay:SetDesaturated(texture:IsDesaturated())
|
|
|
|
|
highlight.Overlay:SetVertexColor(texture:GetVertexColor())
|
|
|
|
|
highlight:Show()
|
|
|
|
|
else
|
|
|
|
|
currentTexture = nil
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function rematch:HideTextureHighlight()
|
|
|
|
|
currentTexture = nil
|
|
|
|
|
highlight:Hide()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- call this when the contents of the button/texture may change to update the highlight
|
|
|
|
|
function rematch:UpdateTextureHighlight()
|
|
|
|
|
if currentTexture then
|
|
|
|
|
if currentTexture:IsVisible() then -- if texture still on screen, update it
|
|
|
|
|
highlight.Overlay:SetTexture(currentTexture:GetTexture())
|
|
|
|
|
highlight.Overlay:SetTexCoord(currentTexture:GetTexCoord())
|
|
|
|
|
highlight:Show()
|
|
|
|
|
else -- underlying texture no longer on screen, hide highlight but don't nil
|
|
|
|
|
-- currentTexture in case the underlying texture is shown later (this is
|
|
|
|
|
-- to fix the problem of a highlight no longer updating on mouseover scrolling)
|
|
|
|
|
highlight:Hide()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|