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:menuFrames() if not self.db.profile.MenuFrames or self.initialized.MenuFrames then return end self.initialized.MenuFrames = true self:hookDDScript(OptionsFrameResolutionDropDownButton) self:hookDDScript(OptionsFrameRefreshDropDownButton) self:hookDDScript(OptionsFrameMultiSampleDropDownButton) self:applySkin(_G["GameMenuFrame"], 1, nil, nil, 100) -- Video Options self:applySkin(_G["OptionsFrame"], 1, nil, nil, 300) self:keepRegions(_G["OptionsFrameResolutionDropDown"], {4}) -- N.B. region 4 is text self:keepRegions(_G["OptionsFrameRefreshDropDown"], {4}) -- N.B. region 4 is text self:keepRegions(_G["OptionsFrameMultiSampleDropDown"], {4}) -- N.B. region 4 is text self:applySkin(_G["OptionsFrameDisplay"]) self:applySkin(_G["OptionsFrameWorldAppearance"]) self:applySkin(_G["OptionsFrameBrightness"]) self:applySkin(_G["OptionsFramePixelShaders"]) self:applySkin(_G["OptionsFrameMiscellaneous"]) -- Sound self:applySkin(_G["SoundOptionsFrame"], 1, nil, nil, 100) -- Interface self:HookScript(UIOptionsFrameTab1, "OnClick", function() self:Debug("UIOFT1_OnClick") self.hooks[UIOptionsFrameTab1].OnClick() self:moveObject(_G["UIOptionsFrameTab2"], nil, nil, "+", 1) end) self:HookScript(UIOptionsFrameTab2, "OnClick", function() self:Debug("UIOFT2_OnClick") self.hooks[UIOptionsFrameTab2].OnClick() self:moveObject(_G["UIOptionsFrameTab2"], nil, nil, "-", 1) end) self:hookDDScript(UIOptionsFrameClickCameraDropDownButton) self:hookDDScript(UIOptionsFrameTargetofTargetDropDownButton) self:hookDDScript(UIOptionsFrameCombatTextDropDownButton) self:keepRegions(_G["UIOptionsFrame"], {1}) -- N.B. region 1 is text -- change this to allow Frames to be resized _G["UIOptionsFrame"]:SetParent(_G["GameMenuFrame"]:GetParent()) -- get the title text and move it for i,v in ipairs({ _G["UIOptionsFrame"]:GetRegions() }) do -- region 1 is the title if i == 1 then self:moveObject(v, nil, nil, "-", 170) break end end -- change these to allow the buttons to work _G["UIOptionsFrameDefaults"]:SetFrameStrata(_G["GameMenuFrame"]:GetFrameStrata()) _G["UIOptionsFrameOkay"]:SetFrameStrata(_G["GameMenuFrame"]:GetFrameStrata()) _G["UIOptionsFrameCancel"]:SetFrameStrata(_G["GameMenuFrame"]:GetFrameStrata()) -- find the Close button and move it for i,v in ipairs({ _G["UIOptionsFrame"]:GetChildren() }) do local point, relativeTo, relativePoint, xOfs, yOfs = v:GetPoint() if point == "TOPRIGHT" and relativeTo:GetName() == "BasicOptions" then v:SetFrameStrata(_G["GameMenuFrame"]:GetFrameStrata()) self:moveObject(v, "-", 8, "-", 8) end end -- BasicOptions _G["BasicOptions"]:SetWidth(_G["BasicOptions"]:GetWidth() * 0.95) _G["BasicOptions"]:SetHeight(_G["BasicOptions"]:GetHeight() * FyMult) self:keepRegions(_G["UIOptionsFrameClickCameraDropDown"], {4}) -- N.B. region 4 is text self:applySkin(_G["BasicOptionsGeneral"]) self:applySkin(_G["BasicOptionsDisplay"]) self:applySkin(_G["BasicOptionsCamera"]) self:applySkin(_G["BasicOptionsHelp"]) self:applySkin(_G["BasicOptions"]) -- AdvancedOptions _G["AdvancedOptions"]:SetWidth(_G["AdvancedOptions"]:GetWidth() * 0.95) _G["AdvancedOptions"]:SetHeight(_G["AdvancedOptions"]:GetHeight() * FyMult) self:keepRegions(_G["UIOptionsFrameTargetofTargetDropDown"], {4}) -- N.B. region 4 is text self:keepRegions(_G["UIOptionsFrameCombatTextDropDown"], {4}) -- N.B. region 4 is text self:applySkin(_G["AdvancedOptionsActionBars"]) self:applySkin(_G["AdvancedOptionsChat"]) self:applySkin(_G["AdvancedOptionsRaid"]) self:applySkin(_G["AdvancedOptionsCombatText"]) self:applySkin(_G["AdvancedOptions"]) for i = 1, 2 do local tabName = _G["UIOptionsFrameTab"..i] self:keepRegions(tabName, {7, 8}) -- N.B. region 7 is text, 8 is highlight tabName:SetFrameStrata(_G["GameMenuFrame"]:GetFrameStrata()) tabName:SetHeight(tabName:GetHeight() * FTyMult) if i == 2 then self:moveObject(tabName, nil, nil, "+", 1) end self:moveObject(_G[tabName:GetName().."Text"], nil, nil, "+", 5) self:moveObject(_G[tabName:GetName().."HighlightTexture"], nil, nil, "+", 8) self:applySkin(tabName) end -- Others self:applySkin(_G["ScriptErrors"]) self:applySkin(_G["ColorPickerFrame"], 1, nil, nil, 100) if IsAddOnLoaded("Blizzard_MacroUI") then self:MacroFrame() end if IsAddOnLoaded("Blizzard_BindingUI") then self:KeyBindingFrame() end end function oSkin:MacroFrame() if not self.db.profile.MenuFrames or self.initialized.MacroFrame then return end self.initialized.MacroFrame = true self:keepRegions(_G["MacroFrame"], {6, 9, 10, 11 ,12}) -- N.B. regions 6, 9-12 are text _G["MacroFrame"]:SetWidth(_G["MacroFrame"]:GetWidth() * FxMult) _G["MacroFrame"]:SetHeight(_G["MacroFrame"]:GetHeight() * FyMult) for i = 1, 2 do local tabName = _G["MacroFrameTab"..i] self:keepRegions(tabName, {7, 8}) -- N.B. region 7 is text, 8 is highlight self:moveObject(_G[tabName:GetName().."Text"], nil, nil, "+", 5) self:moveObject(_G[tabName:GetName().."HighlightTexture"], nil, nil, "+", 8) self:applySkin(tabName) end self:moveObject(_G["MacroFrameCloseButton"], "+", 28, "+", 8) self:moveObject(_G["MacroButton1"], "-", 10, nil, nil) self:moveObject(_G["MacroFrameSelectedMacroBackground"], nil, nil, "+", 10) self:moveObject(_G["MacroFrameTextBackground"], nil, nil, "+", 10) self:moveObject(_G["MacroDeleteButton"], "-", 10, "-", 72) self:moveObject(_G["MacroNewButton"], "-", 4, "+", 10) self:moveObject(_G["MacroExitButton"], "-", 4, "+", 10) self:moveObject(_G["MacroFrameCharLimitText"], nil, nil, "-", 75) self:skinScrollBar(_G["MacroFrameScrollFrame"]) self:applySkin(_G["MacroFrameTextBackground"]) self:applySkin(_G["MacroFrame"]) -- Macro Popup Frame self:keepRegions(_G["MacroPopupFrame"], {5, 6}) -- N.B. regions 5 & 6 are text _G["MacroPopupFrame"]:SetWidth(_G["MacroPopupFrame"]:GetWidth() * FxMult) _G["MacroPopupFrame"]:SetHeight(_G["MacroPopupFrame"]:GetHeight() - 20) -- N.B. must be absolute not multiple self:moveObject(_G["MacroPopupFrame"], "+", 40, nil, nil) local xOfs, yOfs = 5, 15 self:moveObject(_G["MacroPopupEditBox"], "-", xOfs, "+", yOfs) self:moveObject(_G["MacroPopupScrollFrame"], "+", 10, "+", yOfs) self:moveObject(_G["MacroPopupButton1"], "-", xOfs, "+", yOfs) self:moveObject(_G["MacroPopupCancelButton"], nil, nil, "-", 4) for i,v in ipairs({ _G["MacroPopupFrame"]:GetRegions() }) do -- regions 5 & 6 are text if i == 5 or i == 6 then self:moveObject(v, "-", xOfs, "+", yOfs) end end self:removeRegions(_G["MacroPopupScrollFrame"]) self:skinScrollBar(_G["MacroPopupScrollFrame"]) self:applySkin(_G["MacroPopupFrame"]) end function oSkin:KeyBindingFrame() if not self.db.profile.MenuFrames or self.initialized.KeyBindingFrame then return end self.initialized.KeyBindingFrame = true self:keepRegions(_G["KeyBindingFrame"], {7, 8, 9, 10, 12}) -- N.B. regions 7-10 & 12 are text _G["KeyBindingFrame"]:SetWidth(_G["KeyBindingFrame"]:GetWidth() * 0.95) -- N.B. Don't change Height self:moveObject(_G["KeyBindingFrameHeaderText"], nil, nil, "-", 8) self:moveObject(_G["KeyBindingFrameCharacterButton"], "+", 30, "+", 5) self:moveObject(_G["KeyBindingFrameOutputText"], nil, nil, "-", 10) self:moveObject(_G["KeyBindingFrameDefaultButton"], nil, nil, "-", 14) self:moveObject(_G["KeyBindingFrameCancelButton"], "+", 40, "-", 14) self:removeRegions(_G["KeyBindingFrameScrollFrame"]) self:skinScrollBar(_G["KeyBindingFrameScrollFrame"]) self:applySkin(_G["KeyBindingFrame"]) end function oSkin:makeModelFramesRotatable() --[[ [12:55:21] http://ace.pastey.net/551 [12:55:42] That should do framerate independant rotation of the model, based on how much the mouse moves [13:12:43] Gngsk: http://ace.pastey.net/552 - This doesn't work quite right, but if you work on it you'll be able to zoom in on the character's face using the y offset of the mouse This does the trick, but it might be worth stealing chester's code from SuperInspect ]] -- Click to drag Modelframes self:Hook("Model_RotateLeft") self:Hook("Model_RotateRight") self:makeMFRotatable(_G["CharacterModelFrame"]) self:makeMFRotatable(_G["PetModelFrame"]) self:makeMFRotatable(_G["DressUpModel"]) self:makeMFRotatable(_G["PetStableModel"]) end function oSkin:makeMFRotatable(frame) --frame:EnableMouseWheel(true) frame:EnableMouse(true) frame.draggingDirection = nil frame.cursorPosition = { } frame:SetScript("OnUpdate", function() if this.dragging then local x,y = GetCursorPosition() if this.cursorPosition.x > x then Model_RotateLeft(frame, (this.cursorPosition.x - x) * arg1) elseif this.cursorPosition.x < x then Model_RotateRight(frame, (x - this.cursorPosition.x) * arg1) end this.cursorPosition.x, this.cursorPosition.y = GetCursorPosition() end end) frame:SetScript("OnMouseDown", function() if arg1 == "LeftButton" then this.dragging = true this.cursorPosition.x, this.cursorPosition.y = GetCursorPosition() end end) frame:SetScript("OnMouseUp", function() if this.dragging then this.dragging = false this.cursorPosition.x, this.cursorPosition.y = nil end end) --[[ MouseWheel to zoom Modelframe - in/out works, but needs to be fleshed out frame:SetScript("OnMouseWheel", function() local xPos, yPos, zPos = frame:GetPosition() if arg1 == 1 then frame:SetPosition(xPos+00.1, 0, 0) else frame:SetPosition(xPos-00.1, 0, 0) end end) ]] end function oSkin:Model_RotateLeft(model, rotationIncrement) if ( not rotationIncrement ) then rotationIncrement = 0.03 end model.rotation = model.rotation - rotationIncrement model:SetRotation(model.rotation) --PlaySound("igInventoryRotateCharacter") end function oSkin:Model_RotateRight(model, rotationIncrement) if ( not rotationIncrement ) then rotationIncrement = 0.03 end model.rotation = model.rotation + rotationIncrement model:SetRotation(model.rotation) --PlaySound("igInventoryRotateCharacter") end function oSkin:BankFrame() if not self.db.profile.BankFrame or self.initialized.BankFrame then return end self.initialized.BankFrame = true self:removeRegions(_G["BankFrame"], {1, 2}) -- N.B. regions 3-5 are text _G["BankFrame"]:SetWidth(_G["BankFrame"]:GetWidth() * FxMult) _G["BankFrame"]:SetHeight(_G["BankFrame"]:GetHeight() * FyMult) self:moveObject(_G["BankFrameTitleText"], nil, nil, "-", 35) self:moveObject(_G["BankCloseButton"], "+", 28, "+", 6) self:moveObject(_G["BankFrameItem1"], "-", 10, nil, nil) for i,v in ipairs({ _G["BankFrame"]:GetRegions() }) do -- regions 4 and 5 hold the slot text if i == 4 or i == 5 then self:moveObject(v, "+", 10, "-", 40) end end self:moveObject(_G["BankFramePurchaseInfo"], nil, nil, "-", 40) self:moveObject(_G["BankFrameMoneyFrame"], nil, nil, "_", 90) self:applySkin(_G["BankFrame"]) end function oSkin:MailFrame() if not self.db.profile.MailFrame or self.initialized.MailFrame then return end self.initialized.MailFrame = true self:Hook("OpenMail_Update", function() self:Debug("OpenMail_Update") self.hooks.OpenMail_Update() self:moveObject(_G["OpenMailAttachmentText"], nil, nil, "-", 70) end) self:removeRegions(_G["MailFrame"]) _G["MailFrame"]:SetWidth(_G["MailFrame"]:GetWidth() * FxMult) _G["MailFrame"]:SetHeight(_G["MailFrame"]:GetHeight() * FyMult) self:moveObject(_G["InboxCloseButton"], "+", 28, "+", 8) -->>-- Inbox Frame self:moveObject(_G["InboxTitleText"], "-", 15, "+", 6) self:moveObject(_G["InboxCurrentPage"], nil, nil, "+", 12) for i = 1, 7 do self:removeRegions(_G["MailItem"..i], {2, 3}) -- N.B. regions 1, 4 & 5 are text end local xOfs, yOfs = 5, 20 self:moveObject(_G["MailItem1"], "-", xOfs, "+", yOfs) self:moveObject(_G["InboxPrevPageButton"], "-", xOfs, "+", yOfs / 2) self:moveObject(_G["InboxNextPageButton"], "-", xOfs, "+", yOfs / 2) -->>-- Send Mail Frame local xOfs, yOfs = 5, 10 self:removeRegions(_G["SendMailFrame"], {4, 5}) -- N.B. regions 1, 2 & 3 are text self:moveObject(_G["SendMailTitleText"], "-", 15, "+", 6) self:removeRegions(_G["SendMailScrollFrame"], {3, 4}) -- N.B. regions 1 & 2 are the background for _, v in { _G["SendMailScrollFrame"], _G["SendMailNameEditBox"], _G["SendMailCostMoneyFrame"], _G["SendMailPackageButton"], _G["SendMailMoneyFrame"], _G["SendMailCancelButton"] } do self:moveObject(v, "-", xOfs, "+", yOfs) end self:skinScrollBar(_G["SendMailScrollFrame"]) -->>-- Open Mail Frame self:keepRegions(_G["OpenMailFrame"], {6, 7, 8, 9, 10, 11}) -- N.B. regions 6 - 11 are text _G["OpenMailFrame"]:SetWidth(_G["OpenMailFrame"]:GetWidth() * FxMult) _G["OpenMailFrame"]:SetHeight(_G["OpenMailFrame"]:GetHeight() * FyMult) self:moveObject(_G["OpenMailCloseButton"], "+", 28, "+", 8) self:moveObject(_G["OpenMailTitleText"], nil, nil, "-", 30) self:moveObject(_G["OpenMailSenderLabel"], "-", 5, "+", 10) self:moveObject(_G["OpenMailSubjectLabel"], "-", 5, "+", 10) self:moveObject(_G["OpenMailScrollFrame"], "-", 5, "+", 10) self:removeRegions(_G["OpenMailScrollFrame"], {1, 2}) -- N.B. regions 3 & 4 are the background self:skinScrollBar(_G["OpenMailScrollFrame"]) self:moveObject(_G["OpenMailCancelButton"], "+", 30, "-", 72) self:applySkin(_G["OpenMailFrame"]) -->>-- FrameTabs for i = 1, 2 do self:keepRegions(_G["MailFrameTab"..i], {7, 8}) -- N.B. region 7 is text, 8 is highlight if i == 1 then self:moveObject(_G["MailFrameTab"..i], nil, nil, "-", 70) else self:moveObject(_G["MailFrameTab"..i], "+", 4, nil, nil) end self:applySkin(_G["MailFrameTab"..i]) end self:applySkin(_G["MailFrame"]) end function oSkin:AuctionFrame() if not self.db.profile.AuctionFrame or self.initialized.AuctionFrame then return end self.initialized.AuctionFrame = true self:Hook("FilterButton_SetType") self:hookDDScript(BrowseDropDownButton) -->>-- All Tabs self:removeRegions(_G["AuctionFrame"]) _G["AuctionFrame"]:SetHeight(_G["AuctionFrame"]:GetHeight() - 6) self:moveObject(_G["AuctionFrameCloseButton"], "-", 4, "+", 8) for i = 1, 3 do self:keepRegions(_G["AuctionFrameTab"..i], {7, 8}) -- N.B. region 7 is the Text, 8 is the highlight if i == 1 then self:moveObject(_G["AuctionFrameTab"..i], nil, nil, "-", 4) else self:moveObject(_G["AuctionFrameTab"..i], "+", 3, nil, nil) end self:applySkin(_G["AuctionFrameTab"..i]) end self:moveObject(_G["AuctionFrameMoneyFrame"], nil, nil, "-", 6) -->>-- Browse Frame self:moveObject(_G["BrowseTitle"], nil, nil, "+", 6) self:removeRegions(_G["BrowseFilterScrollFrame"]) self:skinScrollBar(_G["BrowseFilterScrollFrame"]) self:removeRegions(_G["BrowseScrollFrame"]) self:skinScrollBar(_G["BrowseScrollFrame"]) for i=1,15 do self:removeRegions(_G["AuctionFilterButton"..i], {1, 2}) self:applySkin(_G["AuctionFilterButton"..i]) end self:removeRegions(_G["BrowseDropDown"], {1, 2, 3}) -- N.B. region 4 is text self:moveObject(_G["BrowseDropDownName"], "+", 40, nil, nil) for _,v in {_G["BrowseQualitySort"], _G["BrowseLevelSort"], _G["BrowseDurationSort"], _G["BrowseHighBidderSort"], _G["BrowseCurrentBidSort"] } do self:removeRegions(v, {1, 2, 3}) self:applySkin(v) end -->>-- Bid Frame self:moveObject(_G["BidTitle"], nil, nil, "+", 6) self:removeRegions(_G["BidScrollFrame"]) self:skinScrollBar(_G["BidScrollFrame"]) for _,v in {_G["BidQualitySort"],_G["BidLevelSort"], _G["BidDurationSort"], _G["BidBuyoutSort"], _G["BidStatusSort"], _G["BidBidSort"],} do self:removeRegions(v, {1, 2, 3}) self:applySkin(v) end -->>-- Auctions Frame self:moveObject(_G["AuctionsTitle"], nil, nil, "+", 6) _G["AuctionsItemButton"]:SetWidth(_G["AuctionsItemButton"]:GetWidth() + 10) _G["AuctionsItemButton"]:SetHeight(_G["AuctionsItemButton"]:GetHeight() + 10) self:applySkin(_G["AuctionsItemButton"]) self:removeRegions(_G["AuctionsScrollFrame"]) self:skinScrollBar(_G["AuctionsScrollFrame"]) for _,v in {_G["AuctionsQualitySort"], _G["AuctionsDurationSort"], _G["AuctionsHighBidderSort"], _G["AuctionsBidSort"] } do self:removeRegions(v, {1, 2, 3}) self:applySkin(v) end self:applySkin(_G["AuctionFrame"]) -->>-- AuctionDressUpFrame self:removeRegions(_G["AuctionDressUpFrame"], {1, 2}) --N.B. regions 3 & 4 are the background _G["AuctionDressUpFrame"]:SetWidth(_G["AuctionDressUpFrame"]:GetWidth() - 6) _G["AuctionDressUpFrame"]:SetHeight(_G["AuctionDressUpFrame"]:GetHeight() - 13) self:moveObject(_G["AuctionDressUpBackgroundTop"], nil, nil, "+", 8) _G["AuctionDressUpModelRotateLeftButton"]:Hide() _G["AuctionDressUpModelRotateRightButton"]:Hide() self:removeRegions(_G["AuctionDressUpFrameCloseButton"], {2, 3, 4}) -- N.B. region 1 is the button artwork self:applySkin(_G["AuctionDressUpFrame"]) end function oSkin:FilterButton_SetType(button, type, text, isLast) local normalText = getglobal(button:GetName().."NormalText") local normalTexture = getglobal(button:GetName().."NormalTexture") local line = getglobal(button:GetName().."Lines") if ( type == "class" ) then button:SetText(text) normalText:SetPoint("LEFT", button, "LEFT", 4, 0) --normalTexture:SetAlpha(1.0) line:Hide() elseif ( type == "subclass" ) then button:SetText(HIGHLIGHT_FONT_COLOR_CODE..text..FONT_COLOR_CODE_CLOSE) --button:SetText("|cff007FFF"..text.."|r") normalText:SetPoint("LEFT", button, "LEFT", 12, 0) --normalTexture:SetAlpha(0.4) line:Hide() elseif ( type == "invtype" ) then button:SetText(HIGHLIGHT_FONT_COLOR_CODE..text..FONT_COLOR_CODE_CLOSE) normalText:SetPoint("LEFT", button, "LEFT", 20, 0) normalTexture:SetAlpha(0.0) if ( isLast ) then line:SetTexCoord(0.4375, 0.875, 0, 0.625) else line:SetTexCoord(0, 0.4375, 0, 0.625) end line:Show() end button.type = type end