호출 방법
UI.condition_display.labelConstructor(interactive)
의존성 UI.condition_display.labelConstructor을(를) 기록한 뒤 그 이름으로 호출하세요. 네임스페이스 호출은 self를 넘기지 않으므로 콜론 호출을 쓰거나 객체를 직접 넘기세요.
하는 일
Constructs a new condition text widget: a plain wrapping RM-ConditionLabel, or with interactive set an RM-ConditionLink button that adds a leading image and OnEnter, OnLeave and OnClick callbacks. Both measure their wrapped text height and ask the parent to lay out again when it changes.
인수
| 이름 | 유형 | 하는 일 |
|---|---|---|
interactive | boolean | nil | True to build the interactive link variant with an image; false or nil builds a plain label. |
반환값
| 1 | RMConditionWidget | The new label or link widget, registered but not yet acquired. |
|---|
버전
기본 제공 도우미는 모든 버전에 등록됩니다. 다른 점은 읽는 게임 API이며, API가 없으면 도우미는 대체 동작을 하거나 이유와 함께 nil을 반환합니다.
- 해당 버전에서 사용할 수 없음 (이유는 툴팁에 표시)
- Blizzard의 지원 중단 대체 함수가 켜져 있을 때만
애드온에서 호출하는 방식
UI.condition_display.CreateConditionLinkreturn self:AcquireConditionWidget('RM-ConditionLink',function() return labelConstructor(true) end)
의존성
defaultFont→UI.condition_display.defaultFont
소스
UI/condition_display.lua, 32번째 줄. 게임에서는 읽기 전용이며, 복제하면 편집 가능한 사본이 생깁니다.
UI.condition_display.labelConstructor(interactive)
local w={type=interactive and 'RM-ConditionLink' or 'RM-ConditionLabel',text=''}
local frame=CreateFrame(interactive and 'Button' or 'Frame',nil,UIParent);w.frame=frame
local image=interactive and frame:CreateTexture(nil,'ARTWORK');w.image=image
local label=frame:CreateFontString(nil,'OVERLAY','GameFontHighlightSmall');w.label=label
label:SetPoint('TOPLEFT');label:SetWordWrap(true);label:SetHeight(0)
local function layoutText()
local inset=image and w.imagePath and (w.imageWidth+4) or 0
label:SetWidth(math.max(1,frame:GetWidth()-inset))
local textHeight=math.max(1,label:GetStringHeight() or 0)
local height=math.max(textHeight,image and w.imagePath and w.imageHeight or 0)
label:ClearAllPoints();label:SetPoint('TOPLEFT',frame,'TOPLEFT',inset,-(height-textHeight)/2)
if image then image:ClearAllPoints();image:SetPoint('TOPLEFT',frame,'TOPLEFT',0,-(height-w.imageHeight)/2) end
-- Backing frame dimensions may be quantized. Compare text requests,
-- not engine rounding, before notifying the parent layout.
local changed=height~=w.measuredHeight
w.measuredHeight=height;w:SetHeight(height)
return changed
end
local function measure()
if w.measuring then return end
w.measuring=true
local ok,changed=pcall(layoutText)
w.measuring=false
if not ok then error(changed,0) end
if changed and w.parent and w.parent.DoLayout then w.parent:DoLayout() end
end
function w:OnWidthSet() measure() end
function w:SetText(text) self.text=text==nil and '' or tostring(text);label:SetText(self.text);measure() end
function w:SetFont(path,height,flags) label:SetFont(path,height,flags);measure() end
function w:SetFontObject(font) label:SetFontObject(font or defaultFont());measure() end
function w:SetColor(red,green,blue,alpha)
if red==nil or green==nil or blue==nil then red,green,blue=1,1,1 end
label:SetTextColor(red,green,blue,alpha or 1)
end
function w:SetJustifyH(value) label:SetJustifyH(value) end
function w:SetJustifyV(value) label:SetJustifyV(value) end
if interactive then
function w:SetImage(path,...)
self.imagePath=path;image:SetTexture(path)
local count=select('#',...);if count==4 or count==8 then image:SetTexCoord(...) else image:SetTexCoord(0,1,0,1) end
if path then image:Show() else image:Hide() end;measure()
end
function w:SetImageSize(width,height) self.imageWidth,self.imageHeight=width,height;image:SetSize(width,height);measure() end
function w:SetDisabled(value) self.disabled=value==true;if self.disabled then frame:Disable() else frame:Enable() end end
end
function w:OnAcquire()
self.measuring=false;self.measuredHeight=nil
if interactive then self.imagePath=nil;self.imageWidth,self.imageHeight=24,24;image:SetTexture(nil);image:SetSize(24,24);image:Hide();self:SetDisabled(false) end
self:SetText('');self:SetFontObject();self:SetColor();self:SetJustifyH('LEFT');self:SetJustifyV('TOP');self:SetWidth(200)
if interactive then
frame:RegisterForClicks('LeftButtonUp','RightButtonUp');local lease=self.rmLease
local function live() return w.rmActive and w.rmLease==lease and not w:IsReleasing() 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)
addon:SetUIScript(frame,'OnClick',function(_,button) if live() and not w.disabled then w:Fire('OnClick',button) end end)
end
end
function w:OnRelease()
self.text='';self.measuring=false;self.measuredHeight=nil;label:SetText('')
if image then image:Hide();image:SetTexture(nil);self.imagePath=nil;if GameTooltip and GameTooltip:IsOwned(frame) then GameTooltip:Hide() end end
end
return addon:RegisterConditionWidget(w)




