Thread Tools Display Modes
08-28-16, 02:33 AM   #1
Layback_
An Onyxian Warder
Join Date: Feb 2016
Posts: 358
Skinning Blizzard Default Frames

For some overhaul UIs like Elv and Tuk, they have created a custom skin (or design(?)) for game menus and some other Blizzard default frames.

I was also expecting to create custom skinned menus, but was not sure of what would be the best practice to do so.

So, if anyone has an experience of creating a customized menus or at least have some knowledge regarding such topic(?), could I get some advice or explanation on how I would achieve this?
(Like process that I should follow: Disable default UI designs, create new design, blah blah blah)

Thank you.
  Reply With Quote
08-28-16, 02:44 AM   #2
Aftermathhqt
A Molten Giant
 
Aftermathhqt's Avatar
AddOn Author - Click to view addons
Join Date: Dec 2009
Posts: 784
Originally Posted by Layback_ View Post
For some overhaul UIs like Elv and Tuk, they have created a custom skin (or design(?)) for game menus and some other Blizzard default frames.

I was also expecting to create custom skinned menus, but was not sure of what would be the best practice to do so.

So, if anyone has an experience of creating a customized menus or at least have some knowledge regarding such topic(?), could I get some advice or explanation on how I would achieve this?
(Like process that I should follow: Disable default UI designs, create new design, blah blah blah)

Thank you.
Best way is to look at ElvUI & Tukui, they got some amazing functions that are going to help you a lot.

Then its just about looking for each frame name and being!

1. You want to create a border function
2. You want to create a backdrop function which you use the border in too
3. A button function that removes the old textures and adds new.
4. A close button function that removes old texturesand adds new.
5. A scroll frame close button, that removes textures and adds new.

Last edited by Aftermathhqt : 08-28-16 at 02:47 AM.
  Reply With Quote
08-28-16, 03:04 AM   #3
Layback_
An Onyxian Warder
Join Date: Feb 2016
Posts: 358
Originally Posted by Game92 View Post
Best way is to look at ElvUI & Tukui, they got some amazing functions that are going to help you a lot.

Then its just about looking for each frame name and being!

1. You want to create a border function
2. You want to create a backdrop function which you use the border in too
3. A button function that removes the old textures and adds new.
4. A close button function that removes old texturesand adds new.
5. A scroll frame close button, that removes textures and adds new.
Yeah, I tried to have a look at Elv and Tuk's functions, but I could've not found where they are located

I thought that they would be defined in API.lua file, but seems they are not D:
  Reply With Quote
08-28-16, 03:42 AM   #4
Aftermathhqt
A Molten Giant
 
Aftermathhqt's Avatar
AddOn Author - Click to view addons
Join Date: Dec 2009
Posts: 784
Originally Posted by Layback_ View Post
Yeah, I tried to have a look at Elv and Tuk's functions, but I could've not found where they are located

I thought that they would be defined in API.lua file, but seems they are not D:

In Tukui they are defined in API.
  Reply With Quote
08-28-16, 03:44 AM   #5
syncrow
A Flamescale Wyrmkin
 
syncrow's Avatar
AddOn Author - Click to view addons
Join Date: Jul 2014
Posts: 149
Originally Posted by Layback_ View Post
I thought that they would be defined in API.lua file, but seems they are not D:
Take a look at
ElvUI\Core\toolkit.lua
__________________
  Reply With Quote
08-28-16, 03:47 AM   #6
Aftermathhqt
A Molten Giant
 
Aftermathhqt's Avatar
AddOn Author - Click to view addons
Join Date: Dec 2009
Posts: 784
Heres my functions to remove textures/hide frames.

Lua Code:
  1. A.Func = function() return end

Lua Code:
  1. A.Kill = function(Object)
  2.     if Object.UnregisterAllEvents then Object:UnregisterAllEvents() end
  3.     Object.Show = A.Func
  4.     Object:Hide()
  5. end
  6.  
  7. A.StripTexture = function(Object, Kill)
  8.     for i = 1, Object:GetNumRegions() do
  9.         local Region = select(i, Object:GetRegions())
  10.         if Region:GetObjectType() == "Texture" then
  11.             if Kill then A.Kill(Region) else Region:SetTexture(nil) end
  12.         end
  13.     end
  14. end

Heres my skinning API

Lua Code:
  1. local A, C, L = select(2, ...):unpack()
  2.  
  3. local BorderColor = unpack(C.General.BorderColor)
  4.  
  5. A.Mult = 768/string.match(A.Resolution, "%d+x(%d+)")/C.General.UIScale
  6. A.Scale = function(ScaleObject) return A.Mult*math.floor(ScaleObject/A.Mult) end
  7.  
  8. A.CreateBorder = function(self, ButtonOverlay, OverlayButtonWidth, OverlayButtonHeight, LeftSize, RightSize, BottomSize, TopSize, SLeftSize, SRightSize, SBottomSize, STopSize)
  9.     if not self.HasBorder then
  10.         self.ABorder = CreateFrame("Frame", nil, self)
  11.         self.ABorder:SetFrameLevel(self:GetFrameLevel() + 5)
  12.         self.ABorder:SetPoint("TOPLEFT", self, "TOPLEFT", LeftSize or 0, TopSize or 0)
  13.         self.ABorder:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", RightSize or 0, BottomSize or 0)
  14.         self.ABorder:SetBackdrop({
  15.             edgeFile = "Interface\\Buttons\\WHITE8x8", edgeSize = A.Scale(1.5),
  16.         })
  17.         self.ABorder:SetBackdropBorderColor(BorderColor, BorderColor, BorderColor)
  18.  
  19.         self.ABorderShadow = CreateFrame("Frame", nil, self)
  20.         self.ABorderShadow:SetFrameLevel(self.ABorder:GetFrameLevel() - 1)
  21.         self.ABorderShadow:SetPoint("TOPLEFT", self, "TOPLEFT", LeftSize or 0, TopSize or 0)
  22.         self.ABorderShadow:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", RightSize or 0, BottomSize or 0)
  23.         self.ABorderShadow:SetBackdrop({
  24.             edgeFile = "Interface\\Buttons\\WHITE8x8", edgeSize = A.Scale(2),
  25.         })
  26.         self.ABorderShadow:SetBackdropBorderColor(0, 0, 0, 1)
  27.        
  28.         self.ABorderShadow2 = CreateFrame("Frame", nil, self)
  29.         self.ABorderShadow2:SetFrameLevel(self.ABorder:GetFrameLevel() - 1)
  30.         self.ABorderShadow2:SetPoint("TOPLEFT", self, "TOPLEFT", SLeftSize or -0.8, STopSize or 0.8)
  31.         self.ABorderShadow2:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", SRightSize or 0.8, SBottomSize or -0.8)
  32.         self.ABorderShadow2:SetBackdrop({
  33.             edgeFile = "Interface\\Buttons\\WHITE8x8", edgeSize = A.Scale(2),
  34.         })
  35.         self.ABorderShadow2:SetBackdropBorderColor(0, 0, 0, 1)
  36.    
  37.         if ButtonOverlay then
  38.             self.AShadowOverlay = self:CreateTexture(nil, "OVERLAY")
  39.             self.AShadowOverlay:SetPoint("CENTER", self, 0,0)
  40.             self.AShadowOverlay:SetWidth(OverlayButtonWidth or 33)
  41.             self.AShadowOverlay:SetHeight(OverlayButtonHeight or 33)
  42.             self.AShadowOverlay:SetTexture(C.Media.BorderOverlay)
  43.             self.AShadowOverlay:SetVertexColor(0, 0, 0, 0.80)
  44.         end
  45.        
  46.         self.HasBorder = true
  47.     end
  48. end
  49.  
  50. A.ColorBorder = function(self, R, G, B)
  51.     self.ABorder:SetBackdropBorderColor(R, G, B)
  52. end
  53.  
  54. A.Skin = function(self)
  55.     self:SetBackdrop({
  56.         bgFile = "Interface\\Buttons\\WHITE8x8",
  57.         insets = {top = 1, left = 1, bottom = 1, right = 1},
  58.     })
  59.     self:SetBackdropColor(unpack(C.General.BackdropColor))
  60.  
  61.     A.CreateBorder(self)
  62. end
  63.  
  64. A.SkinButton = function(self, SmallerButton)   
  65.     self:SetNormalTexture("")
  66.     self:SetHighlightTexture("")
  67.     self:SetPushedTexture("")
  68.     self:SetDisabledTexture("")
  69.  
  70.     if self.Left then self.Left:SetAlpha(0) end
  71.     if self.Middle then self.Middle:SetAlpha(0) end
  72.     if self.Right then self.Right:SetAlpha(0) end
  73.     if self.LeftSeparator then self.LeftSeparator:Hide() end
  74.     if self.RightSeparator then self.RightSeparator:Hide() end
  75.    
  76.     if SmallerButton then
  77.         A.CreateBorder(self, nil, nil, nil, nil, nil, 1, -1, nil, nil, 0.8, -0.8)
  78.        
  79.         self:SetBackdrop({
  80.             bgFile = C.Media.Texture2,
  81.             insets = {top = 2, left = 1, bottom = 2, right = 1},
  82.         })
  83.     else
  84.         A.CreateBorder(self)
  85.        
  86.         self:SetBackdrop({
  87.             bgFile = C.Media.Texture2,
  88.             insets = {top = 1, left = 1, bottom = 1, right = 1},
  89.         })
  90.     end
  91.     self:SetBackdropColor(unpack(C.General.PanelColor))
  92.    
  93.     self:HookScript("OnEnter", function() A.ColorBorder(self, A.ClassColor.r, A.ClassColor.g, A.ClassColor.b) end)
  94.     self:HookScript("OnLeave", function() A.ColorBorder(self, BorderColor, BorderColor, BorderColor) end)
  95. end
  96.  
  97. A.CloseButton = function(self, OffsetX, OffsetY, CloseSize)
  98.     self:SetSize(CloseSize or 18, CloseSize or 18)
  99.     self:ClearAllPoints()
  100.     self:SetPoint("TOPRIGHT", OffsetX or 0, OffsetY or 0)
  101.    
  102.     self:SetNormalTexture("")
  103.     self:SetPushedTexture("")
  104.     self:SetHighlightTexture("")
  105.     self:SetDisabledTexture("")
  106.    
  107.     self:SetBackdrop({
  108.         bgFile = "Interface\\Buttons\\WHITE8x8",
  109.         insets = {top = 1, left = 1, bottom = 1, right = 1},
  110.     })
  111.     self:SetBackdropColor(unpack(C.General.BackdropColor))
  112.    
  113.     A.CreateBorder(self)
  114.  
  115.     local ACloseButtonFont = self:CreateFontString(nil, "OVERLAY")
  116.     ACloseButtonFont:SetFont(C.Media.Font, 12.5, "THINOUTLINE")
  117.     ACloseButtonFont:SetShadowOffset(1, -1)
  118.     ACloseButtonFont:SetShadowColor(0, 0, 0)
  119.     ACloseButtonFont:SetPoint("CENTER", 1.5, 1)
  120.     ACloseButtonFont:SetText("x")
  121.    
  122.     self:HookScript("OnEnter", function(self) ACloseButtonFont:SetTextColor(1, 0, 0) A.ColorBorder(self, 1, 0, 0) end)
  123.     self:HookScript("OnLeave", function(self) ACloseButtonFont:SetTextColor(1, 1, 1) A.ColorBorder(self, BorderColor, BorderColor, BorderColor) end)
  124. end

And heres where i've skinned a few objects.

Lua Code:
  1. local A, C, L = select(2, ...):unpack()
  2.  
  3. local ASkin = CreateFrame("Frame", nil, UIParent)
  4. ASkin:RegisterEvent("ADDON_LOADED")
  5. ASkin:SetScript("OnEvent", function(self, event, AddOn)
  6.     if AddOn == "AftermathhUI" then
  7.    
  8.         -- Frames
  9.        
  10.         local Frames = {
  11.         "GameMenuFrame",
  12.         "StackSplitFrame",
  13.         "ReadyCheckFrame",
  14.         }
  15.    
  16.         for i = 1, #Frames do
  17.             local SkinFrames = _G[Frames[i]]
  18.             if SkinFrames then
  19.                 A.Skin(SkinFrames)
  20.             end
  21.         end
  22.        
  23.         -- Buttons
  24.        
  25.         local Buttons = {
  26.         "StackSplitOkayButton",
  27.         "StackSplitCancelButton",
  28.         "ReadyCheckFrameYesButton",
  29.         "ReadyCheckFrameNoButton",
  30.         }
  31.        
  32.         for i = 1, #Buttons do
  33.             local SkinButtons = _G[Buttons[i]]
  34.             if SkinButtons then
  35.                 A.SkinButton(SkinButtons)
  36.             end
  37.         end
  38.        
  39.         local SmallButtons = {
  40.         "GameMenuButtonHelp",
  41.         "GameMenuButtonWhatsNew",
  42.         "GameMenuButtonOptions",
  43.         "GameMenuButtonUIOptions",
  44.         "GameMenuButtonKeybindings",
  45.         "GameMenuButtonMacros",
  46.         "GameMenuButtonAddons",
  47.         "GameMenuButtonLogout",
  48.         "GameMenuButtonQuit",
  49.         "GameMenuButtonContinue",
  50.         "GameMenuButtonStore",
  51.         }
  52.        
  53.         for i = 1, #SmallButtons do
  54.             local SkinSmallButtons = _G[SmallButtons[i]]
  55.             if SkinSmallButtons then
  56.                 A.SkinButton(SkinSmallButtons, true)
  57.             end
  58.         end
  59.        
  60.         -- Headers
  61.        
  62.         local Headers = {
  63.         "GameMenuFrame"
  64.         }
  65.        
  66.         for i = 1, #Headers do
  67.         local Title = _G[Headers[i].."Header"]
  68.             if Title then
  69.                 Title:SetTexture("")
  70.                 Title:ClearAllPoints()
  71.                 if _G["GameMenuFrameHeader"] then
  72.                     Title:SetPoint("TOP", GameMenuFrame, 0, 7)
  73.                 else
  74.                     Title:SetPoint("TOP", Headers[i], 0, 0)
  75.                 end
  76.             end
  77.         end
  78.        
  79.         -- ReadyCheck
  80.        
  81.         ReadyCheckFrame:HookScript("OnShow", function(self) if UnitIsUnit("player", self.initiator) then self:Hide() end end)
  82.         select(2, ReadyCheckListenerFrame:GetRegions()):Hide()
  83.        
  84.         -- Static Popup
  85.        
  86.         for i = 1, 4 do
  87.             local AStaticFrame = _G["StaticPopup"..i]
  88.             for k = 1, 3 do
  89.                 A.SkinButton(AStaticFrame["button"..k])
  90.             end
  91.             A.Skin(AStaticFrame)
  92.         end
  93.        
  94.         -- StackSplitFrame
  95.        
  96.         StackSplitFrame:GetRegions():Hide()
  97.    
  98.         -- QueueStatusFrame Tooltip
  99.    
  100.        local AQueueStatusFrame = _G["QueueStatusFrame"]
  101.         A.StripTexture(AQueueStatusFrame)
  102.         A.Skin(AQueueStatusFrame)
  103.    
  104.         -- GarrisonAlertFrame
  105.    
  106.         local AGarrisonMissionAlertFrame = _G["GarrisonMissionAlertFrame"]
  107.         A.StripTexture(AGarrisonMissionAlertFrame)
  108.         A.Skin(AGarrisonMissionAlertFrame)
  109.  
  110.         local AGarrisonShipMissionAlertFrame = _G["GarrisonShipMissionAlertFrame"]
  111.         A.StripTexture(AGarrisonShipMissionAlertFrame)
  112.         A.Skin(AGarrisonShipMissionAlertFrame)
  113.        
  114.         -- New RecipeAlertFrame
  115.        
  116.         hooksecurefunc(NewRecipeLearnedAlertSystem, "setUpFunction", function(frame, ...)
  117.             frame:GetRegions():Hide()
  118.             frame.Icon:SetDrawLayer("OVERLAY", 7)
  119.  
  120.             --local IconOverlay = CreateFrame("Frame", nil, frame)
  121.             --IconOverlay:SetAllPoints(frame.Icon)
  122.             --A.CreateBorder(IconOverlay, nil, nil, nil, 4, -4, 4, -4, 4.8, -4.8, 4.8, -4.8)
  123.            
  124.             A.Skin(frame)
  125.         end)
  126.        
  127.         -- BattlePet Tooltip
  128.    
  129.         local AFloatingBattlePetTooltip = _G["FloatingBattlePetTooltip"]
  130.         AFloatingBattlePetTooltip.BorderRight:Hide()
  131.         AFloatingBattlePetTooltip.BorderLeft:Hide()
  132.         AFloatingBattlePetTooltip.BorderBottom:Hide()
  133.         AFloatingBattlePetTooltip.BorderBottomLeft:Hide()
  134.         AFloatingBattlePetTooltip.BorderBottomRight:Hide()
  135.         AFloatingBattlePetTooltip.BorderTop:Hide()
  136.         AFloatingBattlePetTooltip.BorderTopLeft:Hide()
  137.         AFloatingBattlePetTooltip.BorderTopRight:Hide()
  138.         AFloatingBattlePetTooltip.Background:Hide()
  139.    
  140.         A.Skin(AFloatingBattlePetTooltip)
  141.         A.CloseButton(AFloatingBattlePetTooltip.CloseButton, -4, -4, 14)
  142.     end
  143.    
  144.     if AddOn == "TinyDPS" then
  145.         A.CreateBorder(tdpsFrame)
  146.     end
  147. end)
  Reply With Quote
08-28-16, 05:01 AM   #7
Layback_
An Onyxian Warder
Join Date: Feb 2016
Posts: 358
Originally Posted by syncrow View Post
Take a look at
Awesome! I found it!
  Reply With Quote
08-28-16, 05:04 AM   #8
Layback_
An Onyxian Warder
Join Date: Feb 2016
Posts: 358
Originally Posted by Game92 View Post
Heres my functions to remove textures/hide frames.

Code:
code was here...
This is awesome !!

Just a quick question here. For A.Func function, do you really have to return? Can't it be just like:

Lua Code:
  1. A.Func = function() end

Last edited by Layback_ : 08-28-16 at 08:38 PM.
  Reply With Quote
08-28-16, 05:29 AM   #9
Aftermathhqt
A Molten Giant
 
Aftermathhqt's Avatar
AddOn Author - Click to view addons
Join Date: Dec 2009
Posts: 784
Originally Posted by Layback_ View Post
This is awesome !!

Just a quick question here. For A.Func function, do you really have to return? Can't it be just like:

Lua Code:
  1. A.Func = function() end
Yes, it gotta be like that =)

Last edited by Aftermathhqt : 08-28-16 at 06:04 AM.
  Reply With Quote
08-28-16, 06:11 AM   #10
Layback_
An Onyxian Warder
Join Date: Feb 2016
Posts: 358
Originally Posted by Game92 View Post
Yes, it gotta be like that =)
Aight!

Thank you so much for your help!
  Reply With Quote
08-28-16, 07:02 AM   #11
Phanx
Cat.
 
Phanx's Avatar
AddOn Author - Click to view addons
Join Date: Mar 2006
Posts: 5,617
No, it doesn't have to be like that. These are the same:

function() return end

function() end

Both are valid functions that do nothing and effectively return nil.
__________________
Retired author of too many addons.
Message me if you're interested in taking over one of my addons.
Don’t message me about addon bugs or programming questions.
  Reply With Quote
08-28-16, 07:26 AM   #12
Layback_
An Onyxian Warder
Join Date: Feb 2016
Posts: 358
Originally Posted by Phanx View Post
No, it doesn't have to be like that. These are the same:

function() return end

function() end

Both are valid functions that do nothing and effectively return nil.
Haha, that's what I thought so!

Thx for your confirmation
  Reply With Quote
08-29-16, 09:16 PM   #13
Layback_
An Onyxian Warder
Join Date: Feb 2016
Posts: 358
All righty,

I was making some modifications on GameMenuFrame and approached with some issue.

Please have a look at this image first.



As you can sse, the shadow for GameMenuFrame is bit pushed to the right while the temporary frame above it is drawn properly.

Both frames are made of exactly same functions which are:

Lua Code:
  1. local function SetBase(self)
  2.     local tex = LSM:Fetch("background", "backdrop");
  3.  
  4.     self:SetBackdrop({
  5.         bgFile = tex,
  6.     });
  7.     self:SetBackdropColor(1, 1, 1, 1);
  8. end
  9.  
  10. local function SetBorder(self, target, size)
  11.     local object = target or self;
  12.     local tex = LSM:Fetch("background", "backdrop");
  13.     local s = size or 1;
  14.  
  15.     local border = CreateFrame("Frame", object:GetName() .. "Border", self);
  16.     border:SetFrameLevel(self:GetFrameLevel());
  17.     border:SetPoint("TOPLEFT", object, -s, s);
  18.     border:SetPoint("TOPRIGHT", object, s, s);
  19.     border:SetPoint("BOTTOMLEFT", object, -s, -s);
  20.     border:SetPoint("BOTTOMRIGHT", object, s, -s);
  21.     border:SetBackdrop({
  22.         edgeFile = tex,
  23.         edgeSize = s,
  24.     });
  25.     border:SetBackdropBorderColor(0, 0, 0, 1);
  26.  
  27.     object.border = border;
  28. end
  29.  
  30. local function SetShadow(self, target, size)
  31.     local object = target or self;
  32.     local tex = LSM:Fetch("border", "fer13");
  33.     local s = size or 2;
  34.  
  35.     if self:GetFrameLevel() <= 1 then
  36.         self:SetFrameLevel(self:GetFrameLevel() + 1);
  37.     end
  38.  
  39.     local shadow = CreateFrame("Frame", object:GetName() .. "Shadow", self);
  40.     shadow:SetFrameLevel(self:GetFrameLevel() - 1);
  41.     shadow:SetPoint("TOPLEFT", object.border or object, -s, s);
  42.     shadow:SetPoint("TOPRIGHT", object.border or object, s, s);
  43.     shadow:SetPoint("BOTTOMLEFT", object.border or object, -s, -s);
  44.     shadow:SetPoint("BOTTOMRIGHT", object.border or object, s, -s);
  45.     shadow:SetBackdrop({
  46.         edgeFile = tex,
  47.         edgeSize = s,
  48.     });
  49.     shadow:SetBackdropBorderColor(1, 1, 1, 1);
  50.  
  51.     object.shadow = shadow;
  52. end

and here are actual function calls:

Lua Code:
  1. local testFrame = _G["GameMenuFrame"];
  2. testFrame:StripTexture(); -- From Game92, Thank you!
  3. testFrame:SetBase();
  4. testFrame:SetBorder();
  5. testFrame:SetShadow();
  6.  
  7. testFrame = CreateFrame("Frame", "testFrame", UIParent);
  8. testFrame:SetSize(50, 50);
  9. testFrame:SetPoint("CENTER", 0, 220);
  10. testFrame:SetBase();
  11. testFrame:SetBorder();
  12. testFrame:SetShadow();

I've checked with all other frames that utilizes same approach and looked like GameMenuFrame was the only one that causes this issue (and those GameMenuButtonXXXX as well).

Last edited by Layback_ : 08-29-16 at 09:19 PM.
  Reply With Quote
08-29-16, 10:12 PM   #14
Phanx
Cat.
 
Phanx's Avatar
AddOn Author - Click to view addons
Join Date: Mar 2006
Posts: 5,617
1. System Options > Advanced > Disable "Use UI scale"

2. Make sure the GameMenuFrame's position offsets and dimensions are all integers:

/dump GameMenuFrame:GetPoint()
/dump GameMenuFrame:GetSize()


(Note that due to floating-point stupidity, the numbers you'll see from these commands won't look like integers, but as long as they're really close, it's fine; eg. 0.9999999994324324 is actually 1.)
__________________
Retired author of too many addons.
Message me if you're interested in taking over one of my addons.
Don’t message me about addon bugs or programming questions.
  Reply With Quote
08-29-16, 11:20 PM   #15
Layback_
An Onyxian Warder
Join Date: Feb 2016
Posts: 358
Originally Posted by Phanx View Post
1. System Options > Advanced > Disable "Use UI scale"

2. Make sure the GameMenuFrame's position offsets and dimensions are all integers:

/dump GameMenuFrame:GetPoint()
/dump GameMenuFrame:GetSize()


(Note that due to floating-point stupidity, the numbers you'll see from these commands won't look like integers, but as long as they're really close, it's fine; eg. 0.9999999994324324 is actually 1.)
Hi Phanx,

Just checked "Use UI Scale" and it was already disabled. Also I checked size and point using dump, but they were set to proper numbers (as you said they were like stupid floating-point numbers though...).

Additionally, I had a close look via Photoshop (using 'fstack' command) and the size and point was perfect.
It's just a graphic in WoW that is being distorted








Last edited by Layback_ : 08-29-16 at 11:22 PM.
  Reply With Quote
08-30-16, 12:27 AM   #16
Phanx
Cat.
 
Phanx's Avatar
AddOn Author - Click to view addons
Join Date: Mar 2006
Posts: 5,617
Are you (a) using non-fullscreen windowed mode or (b) using something other than your monitor's native resolution?
__________________
Retired author of too many addons.
Message me if you're interested in taking over one of my addons.
Don’t message me about addon bugs or programming questions.
  Reply With Quote
08-30-16, 12:31 AM   #17
Layback_
An Onyxian Warder
Join Date: Feb 2016
Posts: 358
Originally Posted by Phanx View Post
Are you (a) using non-fullscreen windowed mode or (b) using something other than your monitor's native resolution?
I'm actually using a Fullscreen Windowed Mode at the moment.
  Reply With Quote
08-30-16, 08:22 AM   #18
Layback_
An Onyxian Warder
Join Date: Feb 2016
Posts: 358
Originally Posted by Phanx View Post
Are you (a) using non-fullscreen windowed mode or (b) using something other than your monitor's native resolution?
Just checked with another PC with fullscreen mode and the same issue is occurring
  Reply With Quote
08-30-16, 08:53 AM   #19
Lombra
A Molten Giant
 
Lombra's Avatar
AddOn Author - Click to view addons
Join Date: Nov 2006
Posts: 554
Maybe it's an issue with the texture graphic? I notice you're using a different texture for the shadow.
__________________
Grab your sword and fight the Horde!
  Reply With Quote
08-30-16, 10:29 AM   #20
Layback_
An Onyxian Warder
Join Date: Feb 2016
Posts: 358
Originally Posted by Lombra View Post
Maybe it's an issue with the texture graphic? I notice you're using a different texture for the shadow.
Hmmmmmm....

I don't think that's an issue here as all other frames are working fine with that texture.

Here I attached that texture file
Attached Files
File Type: tga fer13.tga (8.0 KB, 105 views)
  Reply With Quote

WoWInterface » Developer Discussions » Lua/XML Help » Skinning Blizzard Default Frames


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off