vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
local _G = getfenv(0)
-- Frame multipliers
local FxMult, FyMult = 0.9, 0.84
-- Frame Tab multipliers
local FTxMult, FTyMult = 0.5, 0.75
-- Character subframe names

function oSkin:Tooltips()
        if not self.db.profile.Tooltips or self.initialized.Tooltips then return end
        self.initialized.Tooltips = true

        self:skinTooltip(_G["GameTooltip"])
        self:skinTooltip(_G["ItemRefTooltip"])
        
end

function oSkin:MirrorTimers()
        if not self.db.profile.MirrorTimers or self.initialized.MirrorTimers then return end
        self.initialized.MirrorTimers = true
        
        for i = 1, MIRRORTIMER_NUMTIMERS do
                self:removeRegions(_G["MirrorTimer"..i], {1, 3}) -- N.B. region 2 is text
                _G["MirrorTimer"..i]:SetHeight(_G["MirrorTimer"..i]:GetHeight() - 3)
                self:moveObject(_G["MirrorTimer"..i.."Text"], nil, nil, "-", 4)
                self:moveObject(_G["MirrorTimer"..i.."StatusBar"], nil, nil, "-", 3)
                self:applySkin(_G["MirrorTimer"..i])
                self:glazeStatusBar(_G["MirrorTimer"..i.."StatusBar"], 0)
        end
        
end

function oSkin:QuestTimers()
        if not self.db.profile.MirrorTimers or self.initialized.QuestTimers then return end
        self.initialized.QuestTimers = true
        
        self:removeRegions(_G["QuestTimerFrame"], {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}) -- N.B. region 11 is text
        _G["QuestTimerFrame"]:SetWidth(_G["QuestTimerFrame"]:GetWidth()-40)
        _G["QuestTimerFrame"]:SetHeight(_G["QuestTimerFrame"]:GetHeight()-20)
        self:moveObject(_G["QuestTimerHeader"], nil, nil, "-", 4)
        self:applySkin(_G["QuestTimerFrame"])
        
end

function oSkin:CastingBar()
        if not self.db.profile.CastingBar or self.initialized.CastingBar then return end
        self.initialized.CastingBar = true
        
        self:removeRegions(_G["CastingBarFrame"], {1, 3, 6}) -- N.B. region 2 is text, 4 & 5 are overlays
        _G["CastingBarFrame"]:SetHeight(_G["CastingBarFrame"]:GetHeight() + 5)
        self:moveObject(_G["CastingBarText"], nil, nil, "-", 5)
        self:moveObject(_G["CastingBarSpark"], nil, nil, "-", 5)
        self:moveObject(_G["CastingBarFlash"], nil, nil, "-", 5)
--      _G["CastingBarFlash"]:SetTexture("Interface\\AddOns\\oSkin\\textures\\glaze")
        self:applySkin(_G["CastingBarFrame"])
        self:glazeStatusBar(_G["CastingBarFrame"], 0)
        
end

function oSkin:StaticPopups()
        if not self.db.profile.StaticPopups or self.initialized.StaticPopups then return end
        self.initialized.StaticPopups = true
        
        self:Hook("StaticPopup_Show")
        
        for i = 1, STATICPOPUP_NUMDIALOGS do
                self:applySkin(_G["StaticPopup"..i])
                -- skin WideEditBox
                local editBox = _G["StaticPopup"..i.."WideEditBox"]
                self:removeRegions(editBox, {6, 7}) -- N.B. other regions are scripts
                editBox:SetHeight(editBox:GetHeight() / 2)
                local left,right,top,bottom = editBox:GetTextInsets()
                editBox:SetTextInsets(left + 4, right, top, bottom)
                self:applySkin(editBox)
                -- skin EditBox
                local editBox = _G["StaticPopup"..i.."EditBox"]
                self:removeRegions(editBox, {6, 7}) -- N.B. other regions are scripts
                local left,right,top,bottom = editBox:GetTextInsets()
                editBox:SetTextInsets(left + 4, right, top, bottom)
                self:applySkin(editBox)
        end
        
end

function oSkin:StaticPopup_Show(which, text_arg1, text_arg2, data)
        if not self.initialized.StaticPopups then
                return self.hooks["StaticPopup_Show"].orig(which, text_arg1, text_arg2, data)
        end

        local info = StaticPopupDialogs[which]
        local dialog, width = nil, 320
        dialog = StaticPopup_FindVisible(which, data)

        if ( not dialog ) then
                -- Find a free dialog
                local index = 1
                if ( StaticPopupDialogs[which].preferredIndex ) then
                        index = StaticPopupDialogs[which].preferredIndex
                end
                for i = index, STATICPOPUP_NUMDIALOGS do
                        local frame = getglobal("StaticPopup"..i)
                        if ( not frame:IsShown() ) then
                                dialog = frame
                                break
                        end
                end
                
                if ( not dialog and StaticPopupDialogs[which].preferredIndex ) then
                        for i = 1, StaticPopupDialogs[which].preferredIndex do
                                local frame = getglobal("StaticPopup"..i)
                                if ( not frame:IsShown() ) then
                                        dialog = frame
                                        break
                                end
                        end
                end
        end
        
        if ( (which == "SET_GUILDMOTD") 
        or (which == "SET_GUILDPLAYERNOTE") 
        or (which == "SET_GUILDPLAYERNOTE") 
        or (which == "SET_GUILDOFFICERNOTE" )) then
                width = 420
        elseif ( which == "HELP_TICKET" ) then
                width = 350
        elseif ( info.showAlert ) then
                width = 420
        end
        
        dialog.tfade:SetWidth(width-8)
        
        return self.hooks["StaticPopup_Show"].orig(which, text_arg1, text_arg2, data)

end

function oSkin:ReadyCheckFrame()
        if not self.db.profile.StaticPopups then return end

        self:keepRegions(_G["ReadyCheckFrame"], {3}) -- N.B. region 3 is text
        _G["ReadyCheckFrame"]:SetWidth(_G["ReadyCheckFrame"]:GetWidth() * FxMult)
        _G["ReadyCheckFrame"]:SetHeight(_G["ReadyCheckFrame"]:GetHeight() * FyMult)
        self:moveObject(_G["ReadyCheckFrameText"], nil, nil, "+", 15)
        self:moveObject(_G["ReadyCheckFrameYesButton"], "-", 20, nil, nil)
        self:applySkin(_G["ReadyCheckFrame"])

end

function oSkin:ChatTabs()

        if not self.db.profile.ChatTabs or self.initialized.ChatTabs then return end
        self.initialized.ChatTabs = true

        for i=1, NUM_CHAT_WINDOWS do
                self:removeRegions(_G["ChatFrame"..i.."Tab"], {1, 2, 3})
                self:createTab(_G["ChatFrame"..i.."Tab"])
        end
        
end
function oSkin:ChatFrames()

        if not self.db.profile.ChatFrames or self.initialized.ChatFrames then return end
        self.initialized.ChatFrames = true

        for i=1, NUM_CHAT_WINDOWS do
                self:createCF(_G["ChatFrame"..i])
        end
        
end

function oSkin:createTab(parent)
        self:Debug("createTab: [%s]", parent)

        oct = CreateFrame("frame", nil, parent)
        oct:SetFrameStrata("BACKGROUND")
        oct:SetFrameLevel(0)
        oct:ClearAllPoints()
        oct:SetPoint("TOPLEFT", parent, "TOPLEFT", 0, -8)
        oct:SetPoint("TOPRIGHT", parent, "TOPRIGHT", 0, -8)
        oct:SetPoint("BOTTOMLEFT", parent, "BOTTOMLEFT", 0, -5)
        oct:SetPoint("BOTTOMRIGHT", parent, "BOTTOMRIGHT", 0, -5)
        self:applySkin(oct)
        
end

function oSkin:createCF(parent)
        self:Debug("createCF: [%s]", parent)

        ocf = CreateFrame("frame", nil, parent)
        ocf:SetFrameStrata("BACKGROUND")
        ocf:SetFrameLevel(0)
        ocf:ClearAllPoints()
        ocf:SetPoint("TOPLEFT", parent, "TOPLEFT", -4, 4)
        ocf:SetPoint("TOPRIGHT", parent, "TOPRIGHT", 4, 4)
        ocf:SetPoint("BOTTOMLEFT", parent, "BOTTOMLEFT", -4, -8)
        ocf:SetPoint("BOTTOMRIGHT", parent, "BOTTOMRIGHT", 4, -8)
        self:applySkin(ocf)

end

function oSkin:ChatEditBox()
        if not self.db.profile.ChatEditBox or self.initialized.ChatEditBox then return end 
        self.initialized.ChatEditBox = true

        self:removeRegions(_G["ChatFrameEditBox"], {6, 7, 8})
        self:applySkin(_G["ChatFrameEditBox"])

end

function oSkin:LootFrame()
        if not self.db.profile.LootFrame or self.initialized.LootFrame then return end
        self.initialized.LootFrame = true

        self:removeRegions(_G["LootFrame"], {1, 2})
        
        _G["LootFrame"]:SetWidth(_G["LootFrame"]:GetWidth() * 0.66)
        _G["LootFrame"]:SetHeight(_G["LootFrame"]:GetHeight() * FyMult)

        for i, v in ipairs({ _G["LootFrame"]:GetRegions() }) do
                -- region 3 is the title
                if i == 3 then
                        self:moveObject(v, "+", 15, "-", 10)
                end
        end

        self:moveObject(_G["LootCloseButton"], "+", 65, "+", 10)

        for i=1, NUM_GROUP_LOOT_FRAMES do
                if i == 1 then
                        self:moveObject(_G["LootButton"..i], "-", 13, "+", 40)
                else
                        self:moveObject(_G["LootButton"..i], nil, nil, nil, nil)
                end
    end
    self:moveObject(_G["LootFramePrev"], "-", 15, nil, nil)     
    self:moveObject(_G["LootFrameNext"], "-", 0, nil, nil)      
        self:moveObject(_G["LootFrameUpButton"], "-", 15, nil, nil)
        self:moveObject(_G["LootFrameDownButton"], "-", 0, nil, nil)

        self:applySkin(_G["LootFrame"], 1)
        
end

function oSkin:GroupLoot()
        if not self.db.profile.GroupLoot.shown or self.initialized.GroupLoot then return end
        self.initialized.GroupLoot = true

        self:hookDDScript(GroupLootDropDownButton)      
        self:Hook("GroupLootFrame_OnShow", function()
                local texture, name, count, quality, bindOnPickUp = GetLootRollItemInfo(this.rollID)
                _G["GroupLootFrame"..this:GetID().."IconFrameIcon"]:SetTexture(texture)
                _G["GroupLootFrame"..this:GetID().."Name"]:SetText(name)
                local color = ITEM_QUALITY_COLORS[quality]
                _G["GroupLootFrame"..this:GetID().."Name"]:SetVertexColor(color.r, color.g, color.b)
                _G["GroupLootFrame"..this:GetID().."Timer"]:SetStatusBarColor(color.r, color.g, color.b)
                end)

        self:keepRegions(_G["GroupLootDropDown"], {4}) -- N.B. region 4 is text
        local f = GameFontNormalSmall:GetFont()

        for i = 1, NUM_GROUP_LOOT_FRAMES do
        
                local glf = "GroupLootFrame"..i
                self:removeRegions(_G[glf], {4, 5}) -- N.B. regions 1-3 are text
        
                if not self.db.profile.GroupLoot.small then 
                
                        _G[glf]:SetWidth(_G[glf]:GetWidth() * 0.95)
                        _G[glf]:SetHeight(_G[glf]:GetHeight() * FyMult)
        
                        self:moveObject(_G[glf.."SlotTexture"], "-", 3, "+", 5)
                        self:moveObject(_G[glf.."RollButton"], "+", 6, "+", 6)

                else
        
                        _G[glf]:SetWidth(_G[glf]:GetWidth() * 0.85)
                        _G[glf]:SetHeight(_G[glf]:GetHeight() * 0.675)
        
                        local xMult, yMult = 0.75, 0.75
                        _G[glf.."SlotTexture"]:SetWidth(_G[glf.."SlotTexture"]:GetWidth() * xMult)
                        _G[glf.."SlotTexture"]:SetHeight(_G[glf.."SlotTexture"]:GetHeight() * yMult)
                        self:moveObject(_G[glf.."SlotTexture"], "-", 2, "+", 4)
        
--                      _G[glf.."NameFrame"]:SetWidth(_G[glf.."NameFrame"]:GetWidth() / xMult) -- ???
                        _G[glf.."NameFrame"]:SetHeight(_G[glf.."NameFrame"]:GetHeight() * yMult)
                        self:moveObject(_G[glf.."NameFrame"], "+", 2, "+", 2)
        
                        _G[glf.."Name"]:SetFont(f, 7)
                        self:moveObject(_G[glf.."Name"], "+", 2, "+", 2)
        
                        _G[glf.."RollButton"]:SetWidth(_G[glf.."RollButton"]:GetWidth() * xMult)
                        _G[glf.."RollButton"]:SetHeight(_G[glf.."RollButton"]:GetHeight() * yMult)
                        self:moveObject(_G[glf.."RollButton"], "+", 10, "+", 7)
        
                        _G[glf.."GreedButton"]:SetWidth(_G[glf.."GreedButton"]:GetWidth() * xMult)
                        _G[glf.."GreedButton"]:SetHeight(_G[glf.."GreedButton"]:GetHeight() * yMult)
        
                        _G[glf.."PassButton"]:SetWidth(_G[glf.."PassButton"]:GetWidth() * xMult)
                        _G[glf.."PassButton"]:SetHeight(_G[glf.."PassButton"]:GetHeight() * yMult)
                        self:moveObject(_G[glf.."PassButton"], nil, nil, "+", 3)
        
                        _G[glf.."IconFrame"]:SetWidth(_G[glf.."IconFrame"]:GetWidth() * xMult)
                        _G[glf.."IconFrame"]:SetHeight(_G[glf.."IconFrame"]:GetHeight() * yMult)
        
                        _G[glf.."IconFrameIcon"]:SetWidth(_G[glf.."IconFrameIcon"]:GetWidth() * 0.8)
                        _G[glf.."IconFrameIcon"]:SetHeight(_G[glf.."IconFrameIcon"]:GetHeight() * 0.8)
                        _G[glf.."IconFrameIcon"]:SetAlpha(1)
                        self:moveObject(_G[glf.."IconFrameIcon"], "-", 5, "+", 5)

                        _G[glf.."Timer"]:SetWidth(_G[glf.."Timer"]:GetWidth() * xMult)
                        self:moveObject(_G[glf.."Timer"], "-", 2, "-", 2)       
                
                end

                self:removeRegions(_G[glf.."Timer"], {1})
                self:glazeStatusBar(_G[glf.."Timer"])
        
                self:applySkin(_G[glf])
        end
        
end

function oSkin:containerFrames()
        if not self.db.profile.ContainerFrames or self.initialized.ContainerFrames then return end
        self.initialized.ContainerFrames = true
        self:Hook("ContainerFrame_GenerateFrame")       

        for i = 1, NUM_CONTAINER_FRAMES do
                self:keepRegions(_G["ContainerFrame"..i], {6}) -- N.B. region 6 is text
                self:moveObject(_G["ContainerFrame"..i.."Name"], "-", 5, "+", 0)        
                self:applySkin(_G["ContainerFrame"..i], nil, nil, nil, 100)
        end

end

function oSkin:ContainerFrame_GenerateFrame(frame, size, id)
        self.hooks["ContainerFrame_GenerateFrame"].orig(frame, size, id)
        frame = frame:GetName()
        
        if ( id > NUM_BAG_FRAMES ) then
                _G[frame.."Name"]:SetTextColor(.3, .3, 1)
        elseif ( id == KEYRING_CONTAINER ) then
                _G[frame.."Name"]:SetTextColor(1, .7, 0)
        else
                _G[frame.."Name"]:SetTextColor(1, 1, 1)
        end
end

function oSkin:StackSplit()
        if not self.db.profile.StackSplit or self.initialized.StackSplit then return end
        self.initialized.StackSplit = true
        
        self:removeRegions(_G["StackSplitFrame"], {1}) -- N.B. region 2 is text
        _G["StackSplitFrame"]:SetWidth(_G["StackSplitFrame"]:GetWidth() - 12)
        _G["StackSplitFrame"]:SetHeight(_G["StackSplitFrame"]:GetHeight() - 28)
        self:moveObject(_G["StackSplitText"], nil, nil, "-", 5) 
        self:moveObject(_G["StackSplitLeftButton"], "+", 5, "-", 5)     
        self:moveObject(_G["StackSplitRightButton"], "-", 5, "-", 5)    
        self:moveObject(_G["StackSplitOkayButton"], nil, nil, "-", 13)  
        self:moveObject(_G["StackSplitCancelButton"], nil, nil, "-", 13)        

        self:applySkin(_G["StackSplitFrame"])

end

function oSkin:ItemText()
        if not self.db.profile.ItemText or self.initialized.ItemText then return end
        self.initialized.ItemText = true
        
        self:Hook("ItemTextFrame_OnEvent", function(event)
                self:Debug("ItemTextFrame_OnEvent: [%s]", event)
                self.hooks.ItemTextFrame_OnEvent(event)
                if event == "ITEM_TEXT_BEGIN" then
                        _G["ItemTextPageText"]:SetTextColor(0.7, 0.7, 0)
                end
                end)
        
        self:removeRegions(_G["ItemTextFrame"], {1, 2, 3, 4, 5, 6, 7, 8, 9}) -- N.B. region 10 & 11 are text
        _G["ItemTextFrame"]:SetWidth(_G["ItemTextFrame"]:GetWidth() - 30)
        _G["ItemTextFrame"]:SetHeight(_G["ItemTextFrame"]:GetHeight() - 60)
        self:moveObject(_G["ItemTextTitleText"], nil, nil, "-", 24)

        self:removeRegions(_G["ItemTextScrollFrame"])
        self:moveObject(_G["ItemTextScrollFrame"], "+", 30, "+", 20)
        self:skinScrollBar(_G["ItemTextScrollFrame"])
        self:moveObject(_G["ItemTextStatusBar"], nil, nil, "-", 115)
        self:glazeStatusBar(_G["ItemTextStatusBar"], 0)
        self:moveObject(_G["ItemTextPrevPageButton"], "-", 45, "+", 10)
        self:moveObject(_G["ItemTextNextPageButton"], "+", 10, "+", 10)
        self:moveObject(_G["ItemTextCloseButton"], "+", 28, "+", 8)
        
        self:applySkin(_G["ItemTextFrame"])
        
end

function oSkin:WorldMap()
        if not self.db.profile.WorldMap or self.initialized.WorldMap then return end
        self.initialized.WorldMap = true

        self:hookDDScript(WorldMapContinentDropDownButton)      
        self:hookDDScript(WorldMapZoneDropDownButton)   

        self:keepRegions(_G["WorldMapFrame"], {14}) -- N.B. region 14 is text
        self:keepRegions(_G["WorldMapContinentDropDown"], {4}) -- N.B. region 4 is text
        self:keepRegions(_G["WorldMapZoneDropDown"], {4}) -- N.B. region 4 is text
        
        
        if not IsAddOnLoaded("MetaMap") then
                self:moveObject(_G["WorldMapFrameCloseButton"], "+", 98, "-", 4)
                self:applySkin(_G["WorldMapFrame"])
        end
        
end