View Single Post
08-28-21, 05:58 AM   #2
SDPhantom
A Pyroguard Emberseer
 
SDPhantom's Avatar
AddOn Author - Click to view addons
Join Date: Jul 2006
Posts: 2,326
A few notes:

I wouldn't consider NewButton a unique enough name to occupy the global namespace. It's common practice to prefix the name of your addon to any global (including frame names) you create to prevent collisions with other addons or even the DefaultUI.

In most cases, you can create your frames in the main part of your code. You don't need to wait for any special event to do so.

If both offsets for UIObject:SetPoint() are zero, they can be omitted. (If either are non-zero, you must provide both.)

Button:SetPushedTexture() replaces the normal texture when the button is in that state. To have a persistent normal texture, you'll have to create another texture object to show it.

The push texture for that path doesn't need alpha blending. Alpha blending converts gradients of white/black depending on the mode to transparent. If a texture already contains transparency, this causes the image to do unintentional things.

You don't need to call UIObject:Show() after creating an object. It is already shown by default providing it has a valid anchor and size. (Size can also be defined by setting more than one anchor if desired.)

You should use print() instead of DEFAULT_CHAT_FRAME:AddMessage(). This lets other addons redirect through their own print handler without causing taint issues.



With these in mind, here's an example.
Lua Code:
  1. local ExampleButton=CreateFrame("Button",nil,UIParent);
  2. ExampleButton:SetPoint("CENTER");
  3. ExampleButton:SetSize(40,40);
  4. ExampleButton:SetHighlightTexture("Interface\\Buttons\\ButtonHilight-Square","ADD");
  5. ExampleButton:SetPushedTexture("Interface\\Buttons\\UI-Quickslot-Depress");
  6.  
  7. local ExampleButtonIcon=ExampleButton:CreateTexture(nil,"BACKGROUND");
  8. ExampleButtonIcon:SetAllPoints(ExampleButton);
  9. ExampleButtonIcon:SetTexture("Interface\\Icons\\INV_Misc_ArmorKit_17");
  10.  
  11. ExampleButton:SetScript("OnClick",function(self,button)
  12.     print("Button Clicked");
  13. end);
PS: ActionButtons do some funky thing with setting a custom size for their normal texture. This texture is the empty box you see if you have them shown on your multi-bars. If you look close enough, you might see a double-border on occupied ones. This is a side effect of that implementation. In the example above, this was removed for the sake of simplicity.
__________________
WoWInterface AddOns
"All I want is a pretty girl, a decent meal, and the right to shoot lightning at fools."
-Anders (Dragon Age: Origins - Awakening)

Last edited by SDPhantom : 08-28-21 at 11:05 PM.
  Reply With Quote