参考 › 函数参考 › UI

UI.condition_icon.constructor

依赖项

调用方式

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.

参数

无。

返回值

1RMConditionWidgetThe new icon widget, registered with the condition widget system.

版本

内置辅助函数在每个版本上都会注册。不同的是它们读取的游戏 API;某个 API 缺失时,辅助函数会改用后备方案,或返回 nil 并附上原因。

  • 该版本不可用(原因见提示)
  • 仅在暴雪的弃用兼容层开启时
游戏 API经典旧世TBC 周年版经典进阶服永久服正式服
CreateFrame经典旧世TBC 周年版经典进阶服永久服正式服
GameFontHighlightSmall经典旧世TBC 周年版经典进阶服永久服正式服
GameTooltip经典旧世TBC 周年版经典进阶服永久服正式服
UIParent经典旧世TBC 周年版经典进阶服永久服正式服

示例

-- 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)

返回函数参考