Looking for lua code example of how to get a button to highlight on push down
For an addon I am working on I have created a icon button similar to other profession buttons like cooking and leatherworking. I am able to SetNormalTexture and SetHighlightTexture fine and it looks as expected in those cases. However, when I try to SetPushedTexture, "ADD" I don't get the nice appearance I expect I get basically a transparent button with a edge highlight. What I want is to find an example code of how to create a button that uses the same highlight and pushed button effects that regular ActionBars do. Thanks!
Example code below that shows what I am asking about. local NewButtonEventFrame, NewButtonEvents, NewButtonFunctionName = CreateFrame("Frame"), {} function NewButtonEvents:PLAYER_ENTERING_WORLD(isInitialLogin, isReloadingUi) if not NewButton then NewButton = CreateFrame("Button", "NewButton", UIParent) NewButton:SetWidth(40) NewButton:SetHeight(40) NewButton:SetPoint("CENTER",0,0) NewButton:SetNormalTexture("Interface\\Icons\\INV_Misc_ArmorKit_17") NewButton:SetHighlightTexture("Interface\\Buttons\\ButtonHilight-Square","ADD",0) NewButton:SetPushedTexture("Interface\\Icons\\INV_Misc_ArmorKit_17") NewButton:SetPushedTexture("Interface\\Buttons\\UI-Quickslot-Depress","ADD") NewButton:SetScript("OnClick", function() NewButtonClick() end) end if NewButton then NewButton:Show() end end function NewButtonClick() DEFAULT_CHAT_FRAME:AddMessage("Click") end NewButtonEventFrame:SetScript("OnEvent", function(self, event, ...) NewButtonEvents[event](self, ...) end) for NewButtonEventName, NewButtonFunctionName in pairs(NewButtonEvents) do NewButtonEventFrame:RegisterEvent(NewButtonEventName) end |
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:
|
Thanks for the great feedback along with all the ideas and suggestion for code improvement! This writeup was way more detailed and helpful then I expected to receive. I really appreciate all extra effort and guidance you went to. Thanks!
|
All times are GMT -6. The time now is 01:07 AM. |
vBulletin © 2024, Jelsoft Enterprises Ltd
© 2004 - 2022 MMOUI