调用方式
UI.condition_icon.constructor()
记录依赖项 UI.condition_icon.constructor,然后按该名称调用。带命名空间的调用不会传入 self:请使用冒号调用,或自行传入该对象。
作用
Constructs a new RM-ConditionIcon widget: a clickable image with an optional caption below it, with SetImage, SetImageByAtlas, SetImageSize, SetLabel and SetDisabled, firing OnClick, OnEnter and OnLeave while its lease is live. It returns the registered but not yet acquired widget; addon:CreateConditionIcon passes it to addon:AcquireConditionWidget.
参数
无。
返回值
| 1 | RMConditionWidget | The new icon widget, registered with the condition widget system. |
|---|
版本
内置辅助函数在每个版本上都会注册。不同的是它们读取的游戏 API;某个 API 缺失时,辅助函数会改用后备方案,或返回 nil 并附上原因。
- 该版本不可用(原因见提示)
- 仅在暴雪的弃用兼容层开启时
示例
-- needs the dependency UI.condition_icon.constructor
local icon = addon:AcquireConditionWidget("RM-ConditionIcon", UI.condition_icon.constructor)
icon:SetImage("Interface\\Icons\\INV_Misc_QuestionMark")
icon:SetImageSize(36, 36)
icon:SetLabel(L["Spell"])
parent:AddChild(icon)源码
UI/condition_icon.lua,第 27 行。在游戏中为只读;“复制”会生成一份可编辑的副本。
UI.condition_icon.constructor()
local w={type='RM-ConditionIcon',alive=false,disabled=false}
local frame=CreateFrame('Button',nil,UIParent);w.frame=frame;frame:EnableMouse(true)
local image=frame:CreateTexture(nil,'ARTWORK');w.image=image;image:SetPoint('TOP',0,-5)
local label=frame:CreateFontString(nil,'OVERLAY','GameFontHighlightSmall');w.label=label
label:SetPoint('BOTTOMLEFT');label:SetPoint('BOTTOMRIGHT');label:SetJustifyH('CENTER');label:SetJustifyV('TOP');label:SetHeight(18)
function w:SetLabel(text)
self.labelText=text or '';label:SetText(self.labelText)
if self.labelText~='' then label:Show() else label:Hide() end
self:SetHeight(image:GetHeight()+(self.labelText~='' and 25 or 10))
end
function w:SetText(text) self:SetLabel(text) end
function w:SetImage(path,...)
image:SetTexture(path)
local count=select('#',...)
if count==4 or count==8 then image:SetTexCoord(...) else image:SetTexCoord(0,1,0,1) end
end
function w:SetImageByAtlas(atlas) image:SetAtlas(atlas) end
function w:SetImageSize(width,height)
image:SetSize(width,height);self:SetHeight(height+(self.labelText~='' and 25 or 10))
end
function w:SetDisabled(value)
self.disabled=value==true
if self.disabled then frame:Disable();image:SetVertexColor(.5,.5,.5,.5);label:SetTextColor(.5,.5,.5)
else frame:Enable();image:SetVertexColor(1,1,1,1);label:SetTextColor(1,1,1) end
end
function w:OnAcquire()
self.alive=true;self:SetWidth(110);self:SetLabel('');self:SetImage(nil);self:SetImageSize(64,64);self:SetDisabled(false)
frame:RegisterForClicks('LeftButtonUp')
local lease=self.rmLease
local function live() return w.alive and w.rmActive and w.rmLease==lease and not w:IsReleasing() end
addon:SetUIScript(frame,'OnClick',function(_,button) if live() and not w.disabled then w:Fire('OnClick',button) end end)
addon:SetUIScript(frame,'OnEnter',function() if live() then w:Fire('OnEnter') end end)
addon:SetUIScript(frame,'OnLeave',function() if live() then w:Fire('OnLeave') end end)
end
function w:OnRelease()
self.alive=false
if GameTooltip and GameTooltip:IsOwned(frame) then GameTooltip:Hide() end
self:SetLabel('');self:SetImage(nil)
end
return addon:RegisterConditionWidget(w)




