forked from Bastion/Bastion
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
133 lines
4.2 KiB
133 lines
4.2 KiB
--- @type StdUi
|
|
local StdUi = LibStub and LibStub('StdUi', true);
|
|
if not StdUi then
|
|
return
|
|
end
|
|
|
|
local module, version = 'Position', 2;
|
|
if not StdUi:UpgradeNeeded(module, version) then return end;
|
|
|
|
-- Points
|
|
local Center = 'CENTER';
|
|
|
|
local Top = 'TOP';
|
|
local Bottom = 'BOTTOM';
|
|
local Left = 'LEFT';
|
|
local Right = 'RIGHT';
|
|
|
|
local TopLeft = 'TOPLEFT';
|
|
local TopRight = 'TOPRIGHT';
|
|
local BottomLeft = 'BOTTOMLEFT';
|
|
local BottomRight = 'BOTTOMRIGHT';
|
|
|
|
StdUi.Anchors = {
|
|
Center = Center,
|
|
|
|
Top = Top,
|
|
Bottom = Bottom,
|
|
Left = Left,
|
|
Right = Right,
|
|
|
|
TopLeft = TopLeft,
|
|
TopRight = TopRight,
|
|
BottomLeft = BottomLeft,
|
|
BottomRight = BottomRight,
|
|
}
|
|
|
|
--- Glues object below referenced object
|
|
function StdUi:GlueBelow(object, referencedObject, x, y, align)
|
|
if align == Left then
|
|
object:SetPoint(TopLeft, referencedObject, BottomLeft, x, y);
|
|
elseif align == Right then
|
|
object:SetPoint(TopRight, referencedObject, BottomRight, x, y);
|
|
else
|
|
object:SetPoint(Top, referencedObject, Bottom, x, y);
|
|
end
|
|
end
|
|
|
|
--- Glues object above referenced object
|
|
function StdUi:GlueAbove(object, referencedObject, x, y, align)
|
|
if align == Left then
|
|
object:SetPoint(BottomLeft, referencedObject, TopLeft, x, y);
|
|
elseif align == Right then
|
|
object:SetPoint(BottomRight, referencedObject, TopRight, x, y);
|
|
else
|
|
object:SetPoint(Bottom, referencedObject, Top, x, y);
|
|
end
|
|
end
|
|
|
|
function StdUi:GlueTop(object, referencedObject, x, y, align)
|
|
if align == Left then
|
|
object:SetPoint(TopLeft, referencedObject, TopLeft, x, y);
|
|
elseif align == Right then
|
|
object:SetPoint(TopRight, referencedObject, TopRight, x, y);
|
|
else
|
|
object:SetPoint(Top, referencedObject, Top, x, y);
|
|
end
|
|
end
|
|
|
|
function StdUi:GlueBottom(object, referencedObject, x, y, align)
|
|
if align == Left then
|
|
object:SetPoint(BottomLeft, referencedObject, BottomLeft, x, y);
|
|
elseif align == Right then
|
|
object:SetPoint(BottomRight, referencedObject, BottomRight, x, y);
|
|
else
|
|
object:SetPoint(Bottom, referencedObject, Bottom, x, y);
|
|
end
|
|
end
|
|
|
|
function StdUi:GlueRight(object, referencedObject, x, y, inside)
|
|
if inside then
|
|
object:SetPoint(Right, referencedObject, Right, x, y);
|
|
else
|
|
object:SetPoint(Left, referencedObject, Right, x, y);
|
|
end
|
|
end
|
|
|
|
function StdUi:GlueLeft(object, referencedObject, x, y, inside)
|
|
if inside then
|
|
object:SetPoint(Left, referencedObject, Left, x, y);
|
|
else
|
|
object:SetPoint(Right, referencedObject, Left, x, y);
|
|
end
|
|
end
|
|
|
|
function StdUi:GlueAfter(object, referencedObject, topX, topY, bottomX, bottomY)
|
|
if topX and topY then
|
|
object:SetPoint(TopLeft, referencedObject, TopRight, topX, topY);
|
|
end
|
|
if bottomX and bottomY then
|
|
object:SetPoint(BottomLeft, referencedObject, BottomRight, bottomX, bottomY);
|
|
end
|
|
end
|
|
|
|
function StdUi:GlueBefore(object, referencedObject, topX, topY, bottomX, bottomY)
|
|
if topX and topY then
|
|
object:SetPoint(TopRight, referencedObject, TopLeft, topX, topY);
|
|
end
|
|
if bottomX and bottomY then
|
|
object:SetPoint(BottomRight, referencedObject, BottomLeft, bottomX, bottomY);
|
|
end
|
|
end
|
|
|
|
-- More advanced positioning functions
|
|
function StdUi:GlueAcross(object, referencedObject, topLeftX, topLeftY, bottomRightX, bottomRightY)
|
|
object:SetPoint(TopLeft, referencedObject, TopLeft, topLeftX, topLeftY);
|
|
object:SetPoint(BottomRight, referencedObject, BottomRight, bottomRightX, bottomRightY);
|
|
end
|
|
|
|
-- Glues object to opposite side of anchor
|
|
function StdUi:GlueOpposite(object, referencedObject, x, y, anchor)
|
|
if anchor == 'TOP' then object:SetPoint('BOTTOM', referencedObject, anchor, x, y);
|
|
elseif anchor == 'BOTTOM' then object:SetPoint('TOP', referencedObject, anchor, x, y);
|
|
elseif anchor == 'LEFT' then object:SetPoint('RIGHT', referencedObject, anchor, x, y);
|
|
elseif anchor == 'RIGHT' then object:SetPoint('LEFT', referencedObject, anchor, x, y);
|
|
elseif anchor == 'TOPLEFT' then object:SetPoint('BOTTOMRIGHT', referencedObject, anchor, x, y);
|
|
elseif anchor == 'TOPRIGHT' then object:SetPoint('BOTTOMLEFT', referencedObject, anchor, x, y);
|
|
elseif anchor == 'BOTTOMLEFT' then object:SetPoint('TOPRIGHT', referencedObject, anchor, x, y);
|
|
elseif anchor == 'BOTTOMRIGHT' then object:SetPoint('TOPLEFT', referencedObject, anchor, x, y);
|
|
else object:SetPoint('CENTER', referencedObject, anchor, x, y);
|
|
end
|
|
end
|
|
|
|
StdUi:RegisterModule(module, version); |