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.

106 lines
3.8 KiB

local detailsFramework = _G.DetailsFramework
if (not detailsFramework or not DetailsFrameworkCanLoad) then
return
end
local CreateFrame = CreateFrame
---@class df_roundedpanel : frame, blz_backdrop, df_optionsmixin, df_titlebar
---@field cornerTextures texture[]
---@field edgeTextures texture[]
---@field Constructor fun(self:df_roundedpanel)
---@class blz_backdrop : table
---@field TopLeftCorner texture
---@field TopRightCorner texture
---@field BottomLeftCorner texture
---@field BottomRightCorner texture
---@field TopEdge texture
---@field BottomEdge texture
---@field LeftEdge texture
---@field RightEdge texture
---@field Center texture
detailsFramework.RoundedCornerPanelMixin = {
Constructor = function(self)
self.cornerTextures = {}
self.edgeTextures = {}
local red, green, blue, alpha = detailsFramework:GetDefaultBackdropColor()
self:SetBackdrop({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true})
self:SetBackdropColor(red, green, blue, alpha * 0.95)
self:SetBackdropBorderColor(0, 0, 0, 0.95)
self.__background = self:CreateTexture(nil, "border", nil, -6)
self.__background:SetColorTexture(red, green, blue)
self.__background:SetAllPoints()
self:SetSize(self.options.width, self.options.height)
if (self.options.use_titlebar) then
detailsFramework:CreateTitleBar(self)
self:SetTitle(self.options.title)
end
if (self.options.use_scalebar) then
detailsFramework:CreateScaleBar(self, self.options)
self:SetScale(self.options.scale)
end
--fill the corner and edge textures table
for index, cornerName in ipairs({"TopLeftCorner", "TopRightCorner", "BottomLeftCorner", "BottomRightCorner"}) do
local thisTexture = self[cornerName]
self.cornerTextures[cornerName] = thisTexture
thisTexture:SetTexture([[Interface\CHARACTERFRAME\TempPortraitAlphaMaskSmall]])
--local bIsOdd = index % 2 == 1
--thisTexture:SetTexCoord(bIsOdd and 0 or 0.5, index < 3 and 0 or 0.5, bIsOdd and 0.5 or 1, index < 3 and 0.5 or 1)
if (cornerName == "TopLeftCorner") then
thisTexture:SetTexCoord(0, 0.5, 0, 0.5)
elseif (cornerName == "TopRightCorner") then
thisTexture:SetTexCoord(0.5, 1, 0, 0.5)
elseif (cornerName == "BottomLeftCorner") then
thisTexture:SetTexCoord(0, 0.5, 0.5, 1)
elseif (cornerName == "BottomRightCorner") then
thisTexture:SetTexCoord(0.5, 1, 0.5, 1)
end
end
for _, edgeName in ipairs({"TopEdge", "BottomEdge", "LeftEdge", "RightEdge"}) do
self.edgeTextures[edgeName] = self[edgeName]
end
end,
}
local defaultOptions = {
width = 200,
height = 200,
use_titlebar = true,
use_scalebar = true,
title = "",
scale = 1,
}
---create a regular panel with rounded corner
---@param parent frame
---@param name string|nil
---@param optionsTable table|nil
---@return df_roundedpanel
function detailsFramework:CreateRoundedPanel(parent, name, optionsTable)
---@type df_roundedpanel
local newRoundedPanel = CreateFrame("frame", name, parent, "BackdropTemplate")
newRoundedPanel:EnableMouse(true)
newRoundedPanel.__dftype = "df_roundedpanel"
detailsFramework:Mixin(newRoundedPanel, detailsFramework.RoundedCornerPanelMixin)
detailsFramework:Mixin(newRoundedPanel, detailsFramework.OptionsFunctions)
newRoundedPanel:BuildOptionsTable(defaultOptions, optionsTable or {})
newRoundedPanel:Constructor()
return newRoundedPanel
end