Back to Home

ESO Lua File v101043

libraries/zo_templates/editboxsizetemplates.lua

[◄ back to folders ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
local EditContainerSizerManager = ZO_Object:Subclass()
function EditContainerSizerManager:New()
    local obj = ZO_Object.New(self)
    obj:Initialize()
    return obj
end
function EditContainerSizerManager:Initialize()
    self.sizers = {}
    EVENT_MANAGER:RegisterForEvent("EditContainerSizerManager", EVENT_ALL_GUI_SCREENS_RESIZED, function() self:OnAllGuiScreensResized() end)
    EVENT_MANAGER:RegisterForEvent("EditContainerSizerManager", EVENT_INPUT_LANGUAGE_CHANGED, function() self:OnInputLanguageChanged() end)
end
function EditContainerSizerManager:Add(sizer)
    table.insert(self.sizers, sizer)
end
function EditContainerSizerManager:OnAllGuiScreensResized()
end
function EditContainerSizerManager:OnInputLanguageChanged()
end
function EditContainerSizerManager:RefreshAllSizers()
    for _, sizer in ipairs(self.sizers) do
        sizer:RefreshAllSizes()
    end
end
local EDIT_CONTAINER_SIZER_MANAGER = EditContainerSizerManager:New()
--This class is responsible for resizing the edit box backdrops. These backdrops require space for the text, additional padding
--(buffer top and buffer bottom), and for the IME underlining (IME_UNDERLINE_THICKNESS_PIXELS) if applicable.
ZO_EditContainerSizer = ZO_Object:Subclass()
function ZO_EditContainerSizer:New(...)
    local obj = ZO_Object.New(self)
    obj:Initialize(...)
    return obj
end
function ZO_EditContainerSizer:Initialize(bufferTop, bufferBottom)
    self.backdrops = {}
    self.bufferTop = bufferTop
    self.bufferBottom = bufferBottom
    EDIT_CONTAINER_SIZER_MANAGER:Add(self)
end
function ZO_EditContainerSizer:Add(backdrop)
    table.insert(self.backdrops, backdrop)
    self:RefreshSize(backdrop)
end
function ZO_EditContainerSizer.GetHeight(backdrop, bufferTop, bufferBottom)
    local editBox
    local name = backdrop:GetName()
    for i = 1, backdrop:GetNumChildren() do
        local child = backdrop:GetChild(i)
        if child:GetType() == CT_EDITBOX then
            editBox = child
            break
        end
    end
    if editBox then
        local textHeight = editBox:GetFontHeight()
        local IMEUnderlineThicknessUIUnits = 0
        if DoesCurrentLanguageRequireIME() then
            IMEUnderlineThicknessUIUnits = IME_UNDERLINE_THICKNESS_PIXELS / GetUIGlobalScale()
        end
        return textHeight + bufferTop + bufferBottom + IMEUnderlineThicknessUIUnits
    else
        return 0
    end
end
function ZO_EditContainerSizer:RefreshSize(backdrop)
    backdrop:SetHeight(ZO_EditContainerSizer.GetHeight(backdrop, self.bufferTop, self.bufferBottom))
end
function ZO_EditContainerSizer.ForceRefreshSize(backdrop, bufferTop, bufferBottom)
    backdrop:SetHeight(ZO_EditContainerSizer.GetHeight(backdrop, bufferTop, bufferBottom))
end
function ZO_EditContainerSizer:RefreshAllSizes()
    for _, backdrop in ipairs(self.backdrops) do
        backdrop:SetHeight(ZO_EditContainerSizer.GetHeight(backdrop, self.bufferTop, self.bufferBottom))
    end
end