WoWInterface

WoWInterface (https://www.wowinterface.com/forums/index.php)
-   PTR API and Graphics Changes (https://www.wowinterface.com/forums/forumdisplay.php?f=175)
-   -   SetBackdropBorderColor removed in 9.0? (https://www.wowinterface.com/forums/showthread.php?t=58109)

Zax 07-19-20 08:43 AM

SetBackdropBorderColor removed in 9.0?
 
Hello,
While testing one of my addons on the PTR server, I got this error:
Code:

attempt to call method 'SetBackdropBorderColor' (a nil value)
It's in a frame script, from an XML document:
Code:

                <Scripts>
                        <OnLoad>
                                self.SetText=function(self,arg)
                                        self:SetBackdropBorderColor(0.5,0.5,0.5);
                                        self:SetBackdropColor(0.3,0.3,0.3,0.5);
                                end;
                        </OnLoad>
                </Scripts>

SetBackdropBorderColor is removed in Shadowlands? Is there an equivalent?

Thanks.

Rilgamon 07-19-20 08:48 AM

Might be related to this ... https://us.forums.blizzard.com/en/wo...beta/586355/11

"One of the major changes in 9.0 is a change to SetBackdrop. The TL/DR, on live, 100% of frames support backdrops, whether they are used or not. 1000s of frames between every addon and default UI, even frames that never see such as event frames have backdrops. UI team realized this is a serious performance issue. so effective in 9.0, no frames have backdrops unless the addon imports/inherits the backdrop template.
this means addons that aren’t importing them now throw nil errors with method “Setbackdrop”. This issue affects a large number of addons."

Zax 07-19-20 09:42 AM

Thank you very much.

sezz 07-19-20 01:27 PM

Quote:

Originally Posted by Zax (Post 336409)
testing one of my addons on the PTR server

PTR is on 9.x or do you mean Beta?

Xrystal 07-19-20 04:14 PM

Quote:

Originally Posted by sezz (Post 336413)
PTR is on 9.x or do you mean Beta?


Retail PTR is showing as 8.3.7 to me .. so I assume they are talking about the Beta which has the Backdrop changes in place.

Zax 07-19-20 11:53 PM

Sorry, I'm talking about the beta (9.x).

myrroddin 07-20-20 05:56 PM

How does one import or inherit the SetBackdrop template? Preferably in Lua. I dislike XML.

Fizzlemizz 07-20-20 06:21 PM

Code:

local f = CreateFrame("Frame", nil, self, BackdropTemplateMixin and "BackdropTemplate")
Testing for BackdropTemplateMixin is to differentiate between 9 and pre 9.

Then use as normal:
Code:

f:SetBackdrop({ ... })
This is from people that are in the Beta.

myrroddin 07-20-20 07:11 PM

Cool, thanks. Do the mixin and template exist on 8.3.x? I'm guessing no.

Xrystal 07-20-20 07:28 PM

Quote:

Originally Posted by myrroddin (Post 336421)
Cool, thanks. Do the mixin and template exist on 8.3.x? I'm guessing no.

Nope new to 9.0.1

https://www.townlong-yak.com/framexml/beta
Backdrop.lua / Backdrop.xml

Fizzlemizz 07-20-20 08:22 PM

Using:
Code:

BackdropTemplateMixin and "BackdropTemplate"
Allows the same code to exist/run in both 8.x and 9+ versions ie. if the mixin doesn't exist, don't use the template and if it does, magic it in.

Zax 07-28-20 09:03 AM

I don't understand how could I apply alpha to a texture/background using this new syntax:
Code:

f.Backdrop = _G[name.."Backdrop"] or CreateFrame("Frame", name.."Backdrop", f, "BackdropTemplate")
f.Backdrop:SetAllPoints()
f.Backdrop.backdropInfo = {
        bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background-Dark",
        edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border",
        tile = true,
        tileSize = 32,
        edgeSize = 32,
        insets = { left = 11, right = 12, top = 12, bottom = 9, },
}
f.Backdrop:ApplyBackdrop()

Thank you.

Fizzlemizz 07-28-20 10:18 AM

Same as normal. The Mixin that is applied when using the template applies all the pre 9x backdrop methods to the frame. Nothing really changes once you've inherited the template.

Lua Code:
  1. if not f.Backdrop then
  2.     f.Backdrop = CreateFrame("Frame", name.."Backdrop", f, "BackdropTemplate")
  3.     f.Backdrop:SetAllPoints()
  4.     f.Backdrop.backdropInfo = {
  5.         bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background-Dark",
  6.         edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border",
  7.         tile = true,
  8.         tileSize = 32,
  9.         edgeSize = 32,
  10.         insets = { left = 11, right = 12, top = 12, bottom = 9, },
  11.     }
  12.     f.Backdrop:SetBackdrop(f.Backdrop.backdropInfo)
  13.     f.Backdrop:SetBackdropColor(r, g, b, a)
  14.     f.Backdrop:SetBackdropBorderColor(r, g, b, a)
  15. end
f could just have easily inherited the backdrop template negating the need for a separate frame unless the backdrop is applied after the frame is created eg. something like KGPanels where a backdrop can be added/removed at runtime.

Example

Zax 07-28-20 12:26 PM

Quote:

Originally Posted by Fizzlemizz (Post 336472)
Same as normal. The Mixin that is applied when using the template applies all the pre 9x backdrop methods to the frame. Nothing really changes once you've inherited the template.

Nice, I didn't understand this point.

Thank you very much :)

Zax 08-02-20 04:43 AM

Quote:

Originally Posted by Fizzlemizz (Post 336419)
Code:

local f = CreateFrame("Frame", nil, self, BackdropTemplateMixin and "BackdropTemplate")
Testing for BackdropTemplateMixin is to differentiate between 9 and pre 9.

And what about Classic? Is Blizzard planning to change SetBackdrop() in Classic also?

As I am actually in the process of update my addons to 9.x, I would like some of them to work in Classic.
The problem is many of my frames are defined in XML, and of course inherits="BackdropTemplate" raises an error in Classic.

So, if Classic will not use BackdropTemplate, is there a way to dynamically modify an inheritance defined in XML?

Thanks.

Fizzlemizz 08-02-20 10:08 AM

Test and add a backdrop frame in the OnLoad script:

This adds an extra frame for the backdrop rather than just inheriting the template.
Code:

<Frame>
  <Scripts>
    <OnLoad>
            if BackdropTemplateMixin then
                self.background = CreateFrame("Frame", nil, self, "BackdropTemplate")
                self.background:SetAllPoints()
                self.background:SetBackdrop({ ... })
                      self.background:SetFrameLevel(self:GetFrameLevel())
              end
    </OnLoad>
  </Scripts>
</Frame>

Blizzard are not concerned with making addons compatible between Classic and Retail. Addon authors have to decide how far they are willing to go if that's what they want to do.

Zax 08-03-20 12:54 AM

Nice trick, thank you :)

Fizzlemizz 08-03-20 01:10 AM

Once again, not mine. I don't have beta access.

This would need to add some "pass-through" methods to the parent frame if you are modifying the backdrop during play and want to maintain the single code base for retail and classic.

p3lim 08-04-20 08:55 AM

Adding this since it's probably useful:

If you want to add a backdrop to a frame you don't control the creation of (e.g. from another addon), you can mix in the mixin:
Lua Code:
  1. Mixin(yourFrame, BackdropTemplateMixin)

Then you should be able to use :SetBackdrop and the likes on that frame.

Zax 08-04-20 11:36 AM

Quote:

Originally Posted by p3lim (Post 336518)
Lua Code:
  1. Mixin(yourFrame, BackdropTemplateMixin)

Great!

Now I just have to use this code on OnLoad of my old frames, without inherits="BackdropTemplate" and it works on both 8.x and 9.0 versions:
Code:

---------------------------------- testing WoW version
local wowversion, wowbuild, wowdate, wowtocversion = GetBuildInfo()
if (wowtocversion > 90000) then Mixin(self, BackdropTemplateMixin)
---------------------------------- same code for 8.x and 9.x
self:SetBackdrop({
        bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background",
        edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border",
        tile = true,
        tileSize = 32,
        edgeSize = 32,
        insets = {left = 12, right = 12, top = 12, bottom = 11},
})
----------------------------------



All times are GMT -6. The time now is 05:41 AM.

vBulletin © 2024, Jelsoft Enterprises Ltd
© 2004 - 2022 MMOUI