main
jeffi 5 months ago
parent e3c1ed1531
commit 13c53f7010
  1. 4
      DiesalGUI-2.0/DiesalGUI-2.0.lua
  2. 2
      DiesalGUI-2.0/Objects/Branch.lua
  3. 2
      DiesalGUI-2.0/Objects/Button.lua
  4. 3
      DiesalGUI-2.0/Objects/ComboBox.lua
  5. 5
      DiesalGUI-2.0/Objects/DropDown.lua
  6. 7
      DiesalGUI-2.0/Objects/ScrollingEditBox.lua
  7. 511
      DiesalStyle-2.0/DiesalStyle-2.0.lua

@ -234,7 +234,7 @@ end
-- Registers an Object constructor in the ObjectFactory -- Registers an Object constructor in the ObjectFactory
---@generic T : Diesal.Object.Type ---@generic T : Diesal.Object.Type
---@param Type `T` ---@param Type `T`
---@param constructor fun(name: string): T ---@param constructor fun(): T
---@param version number ---@param version number
function DiesalGUI:RegisterObjectConstructor(Type, constructor, version) function DiesalGUI:RegisterObjectConstructor(Type, constructor, version)
assert(type(constructor) == "function") assert(type(constructor) == "function")
@ -399,7 +399,7 @@ end
-- Mouse Input capture for any DiesalGUI interactive region -- Mouse Input capture for any DiesalGUI interactive region
---@param frame Frame ---@param frame Frame
---@param button MouseButton | "MouseWheel" ---@param button mouseButton | "MouseWheel"
function DiesalGUI:OnMouse(frame, button) function DiesalGUI:OnMouse(frame, button)
-- print(button) -- print(button)
OnMouse(frame, button) OnMouse(frame, button)

@ -281,7 +281,7 @@ local function Constructor()
button:RegisterForClicks("RightButtonUp", "LeftButtonUp") button:RegisterForClicks("RightButtonUp", "LeftButtonUp")
button:RegisterForDrag("LeftButton") button:RegisterForDrag("LeftButton")
---@param this Button ---@param this Button
---@param button MouseButton ---@param button mouseButton
button:SetScript("OnClick", function(this, button) button:SetScript("OnClick", function(this, button)
DiesalGUI:OnMouse(this, button) DiesalGUI:OnMouse(this, button)
if button == "LeftButton" then if button == "LeftButton" then

@ -96,7 +96,7 @@ local function Constructor(name)
frame:SetFontString(text) frame:SetFontString(text)
---@param this Button ---@param this Button
---@param button MouseButton ---@param button mouseButton
frame:SetScript("OnClick", function(this, button, ...) frame:SetScript("OnClick", function(this, button, ...)
DiesalGUI:OnMouse(this, button) DiesalGUI:OnMouse(this, button)

@ -217,6 +217,7 @@ local methods = {
} }
---@class DiesalComboBox : Diesal.GUI.Object.ComboBox ---@class DiesalComboBox : Diesal.GUI.Object.ComboBox
-- ~~| ComboBox Constructor |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- ~~| ComboBox Constructor |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
local function Constructor() local function Constructor()
---@class Diesal.GUI.Object.ComboBox : Diesal.GUI.ObjectBase, Diesal.GUI.ComboBox.Methods ---@class Diesal.GUI.Object.ComboBox : Diesal.GUI.ObjectBase, Diesal.GUI.ComboBox.Methods
@ -284,7 +285,7 @@ local function Constructor()
end) end)
---@param this Button ---@param this Button
---@param b MouseButton ---@param b mouseButton
button:SetScript("OnClick", function(this, b) button:SetScript("OnClick", function(this, b)
self:FireEvent("OnButtonClick") self:FireEvent("OnButtonClick")

@ -313,7 +313,8 @@ local methods = {
dropdownItem:SetSelected(true) dropdownItem:SetSelected(true)
selectedCount = selectedCount + 1 selectedCount = selectedCount + 1
if not self.settings.multiSelect then if not self.settings.multiSelect then
dropdownText = dropdownText and format("%s, %s", dropdownText, dropdownItem.settings.value) or dropdownItem.settings.value dropdownText = dropdownText and format("%s, %s", dropdownText, dropdownItem.settings.value) or
dropdownItem.settings.value
end end
selectionTable[#selectionTable + 1] = dropdownItem.settings.key selectionTable[#selectionTable + 1] = dropdownItem.settings.key
end end
@ -406,7 +407,7 @@ local methods = {
end end
end, end,
---@param self Diesal.GUI.Object.DropDown ---@param self Diesal.GUI.Object.DropDown
---@param button MouseButton ---@param button mouseButton
---@param down boolean ---@param down boolean
OnClick = function(self, button, down) OnClick = function(self, button, down)
if button == "LeftButton" then if button == "LeftButton" then

@ -141,7 +141,8 @@ local methods = {
self.grip:SetPoint("TOP", 0, -gripPositionOnTrack) self.grip:SetPoint("TOP", 0, -gripPositionOnTrack)
end, end,
["SetVerticalScroll"] = function(self, scroll) -- user scrolled only ["SetVerticalScroll"] = function(self, scroll) -- user scrolled only
self.settings.forceScrollBottom = DiesalTools.Round(scroll) == DiesalTools.Round(self.scrollFrame:GetVerticalScrollRange()) self.settings.forceScrollBottom = DiesalTools.Round(scroll) ==
DiesalTools.Round(self.scrollFrame:GetVerticalScrollRange())
self.scrollFrame:SetVerticalScroll(scroll) self.scrollFrame:SetVerticalScroll(scroll)
end, end,
["SetText"] = function(self, txt) ["SetText"] = function(self, txt)
@ -154,8 +155,8 @@ local methods = {
---@class DiesalScrollingEditBox : Diesal.GUI.Object.ScrollingEditBox ---@class DiesalScrollingEditBox : Diesal.GUI.Object.ScrollingEditBox
---@class Diesal.GUI.Object.ScrollingEditBox.Settings : Diesal.GUI.Object.ScrollingEditBox.Defaults ---@class Diesal.GUI.Object.ScrollingEditBox.Settings : Diesal.GUI.Object.ScrollingEditBox.Defaults
---@field justifyH JustifyH ---@field justifyH JustifyHorizontal
---@field justifyV JustifyV ---@field justifyV JustifyVertical
---@field contentHeight? number ---@field contentHeight? number
---@field text? string ---@field text? string

@ -111,7 +111,8 @@ local function GetBlizzColorValues(value)
if type(value) == "table" and #value >= 3 then if type(value) == "table" and #value >= 3 then
return value[1] / 255, value[2] / 255, value[3] / 255 return value[1] / 255, value[2] / 255, value[3] / 255
elseif type(value) == "string" then elseif type(value) == "string" then
return tonumber(sub(value, 1, 2), 16) / 255, tonumber(sub(value, 3, 4), 16) / 255, tonumber(sub(value, 5, 6), 16) / 255 return tonumber(sub(value, 1, 2), 16) / 255, tonumber(sub(value, 3, 4), 16) / 255,
tonumber(sub(value, 5, 6), 16) / 255
end end
end end
@ -173,13 +174,18 @@ end
local function setColor(texture, r, g, b, a) local function setColor(texture, r, g, b, a)
local status, err = pcall(texture.SetColorTexture, texture, r, g, b, a) local status, err = pcall(texture.SetColorTexture, texture, r, g, b, a)
if not status then if not status then
errorhandler('error in "' .. (texture.style.name or "texture") .. '" ' .. texture.style.mode .. " or alpha setting", r, g, b, a) errorhandler(
'error in "' .. (texture.style.name or "texture") .. '" ' .. texture.style.mode .. " or alpha setting", r, g,
b,
a)
end end
end end
local function setGradient(texture, orientation, r1, g1, b1, a1, r2, g2, b2, a2) local function setGradient(texture, orientation, r1, g1, b1, a1, r2, g2, b2, a2)
local status, err = pcall(texture.SetGradient, texture, orientation, CreateColorDiesal(r1, g1, b1, a1), CreateColorDiesal(r2, g2, b2, a2)) local status, err = pcall(texture.SetGradient, texture, orientation, CreateColorDiesal(r1, g1, b1, a1),
CreateColorDiesal(r2, g2, b2, a2))
if not status then if not status then
errorhandler('error in "' .. (texture.style.name or "texture") .. '" ' .. texture.style.mode .. " or alpha setting.") errorhandler('error in "' ..
(texture.style.name or "texture") .. '" ' .. texture.style.mode .. " or alpha setting.")
end end
end end
-- ~~| Media |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- ~~| Media |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@ -453,18 +459,24 @@ do -- | Set Colors |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Colors.UI_200 = HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.07) Colors.UI_200 = HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.07)
-- level 3 -- level 3
Colors.UI_300 = HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.12) Colors.UI_300 = HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.12)
Colors.UI_300_GR = { HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.12), HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.11) } Colors.UI_300_GR = { HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.12), HSL(Colors.UI_Hue, Colors.UI_Saturation,
0.11) }
Colors.UI_350 = HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.15) Colors.UI_350 = HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.15)
Colors.UI_350_GR = { HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.17), HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.14) } Colors.UI_350_GR = { HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.17), HSL(Colors.UI_Hue, Colors.UI_Saturation,
0.14) }
-- level 4 -- level 4
Colors.UI_400 = HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.20) Colors.UI_400 = HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.20)
Colors.UI_400_GR = { HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.20), HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.17) } Colors.UI_400_GR = { HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.20), HSL(Colors.UI_Hue, Colors.UI_Saturation,
Colors.UI_450_GR = { HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.24), HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.20) } 0.17) }
Colors.UI_450_GR = { HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.24), HSL(Colors.UI_Hue, Colors.UI_Saturation,
0.20) }
-- level 5 -- level 5
Colors.UI_500 = HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.29) Colors.UI_500 = HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.29)
Colors.UI_500_GR = { HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.29), HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.26) } Colors.UI_500_GR = { HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.29), HSL(Colors.UI_Hue, Colors.UI_Saturation,
0.26) }
Colors.UI_600_GR = { HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.35), HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.32) } Colors.UI_600_GR = { HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.35), HSL(Colors.UI_Hue, Colors.UI_Saturation,
0.32) }
-- font Colors -35 -- font Colors -35
Colors.UI_F450 = HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.75) Colors.UI_F450 = HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.75)
@ -502,65 +514,7 @@ end
do -- | Text Formatters |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ do -- | Text Formatters |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Formatters.tooltip = "|cff" .. Colors.gray_50 .. "%s\n|cff" .. Colors.yellow_500 .. "%s" Formatters.tooltip = "|cff" .. Colors.gray_50 .. "%s\n|cff" .. Colors.yellow_500 .. "%s"
end end
--[[ do -- | Set Media |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
addMedia("font", "calibrib", "Fonts\\calibrib.ttf")
addMedia("font", "DejaVuSansMono", "Fonts\\DejaVuSansMono.ttf") -- Monospaced
addMedia("font", "DejaVuSansMonoBold", "Fonts\\DejaVuSansMono-Bold.ttf") -- Monospaced
addMedia("font", "FFF Intelligent Thin Condensed", "Fonts\\FFF Intelligent Thin Condensed.ttf") -- pixel fonts
addMedia("font", "FiraMonoBold", "Fonts\\FiraMono-Bold.ttf") -- Monospaced
addMedia("font", "FiraMonoMedium", "Fonts\\FiraMono-Medium.ttf") -- Monospaced
addMedia("font", "FiraMonoRegular", "Fonts\\FiraMono-Regular.ttf") -- Monospaced
addMedia("font", "FiraSans", "Fonts\\FiraSans-Regular.ttf") -- pixel fonts
addMedia("font", "HackBold", "Fonts\\Hack-Bold.ttf") -- Monospaced
addMedia("font", "HackRegular", "Fonts\\Hack-Regular.ttf") -- Monospaced
addMedia("font", "InconsolataBold", "Fonts\\Inconsolata-Bold.ttf") -- Monospaced
addMedia("font", "InconsolataRegular", "Fonts\\Inconsolata-Regular.ttf") -- Monospaced
addMedia("font", "LucidiaMono", "Fonts\\LUCON.ttf") -- Monospaced
addMedia("font", "MonoFur", "Fonts\\monof55.ttf") -- Monospaced
addMedia("font", "MonoFurItalic", "Fonts\\monof56.ttf") -- Monospaced
addMedia("font", "OfficeCodeProBold", "Fonts\\OfficeCodePro-Bold.ttf") -- Monospaced
addMedia("font", "OfficeCodeProMedium", "Fonts\\OfficeCodePro-Medium.ttf") -- Monospaced
addMedia("font", "OfficeCodeProRegular", "Fonts\\OfficeCodePro-Regular.ttf") -- Monospaced
addMedia("font", "RobotoMonoBold", "Fonts\\RobotoMono-Bold.ttf") -- Monospaced
addMedia("font", "RobotoMonoMedium", "Fonts\\RobotoMono-Medium.ttf") -- Monospaced
addMedia("font", "RobotoMonoRegular", "Fonts\\RobotoMono-Regular.ttf") -- Monospaced
addMedia("font", "SourceCodeProBlack", "Fonts\\SourceCodePro-Black.ttf") -- Monospaced
addMedia("font", "SourceCodeProBold", "Fonts\\SourceCodePro-Bold.ttf") -- Monospaced
addMedia("font", "SourceCodeProMedium", "Fonts\\SourceCodePro-Medium.ttf") -- Monospaced
addMedia("font", "SourceCodeProRegular", "Fonts\\SourceCodePro-Regular.ttf") -- Monospaced
addMedia("font", "SourceCodeProSemibold", "Fonts\\SourceCodePro-Semibold.ttf") -- Monospaced
addMedia("font", "Standard0755", "Fonts\\Standard0755.ttf") -- pixel fonts
addMedia("font", "UbuntuMonoBold", "Fonts\\UbuntuMono-B.ttf") -- Monospaced
addMedia("font", "UbuntuMonoRegular", "Fonts\\UbuntuMono-R.ttf") -- Monospaced
addMedia("texture", "DiesalGUIcons", "Textures\\DiesalGUIcons16x256x128.tga") -- Icon Textures
addMedia("texture", "DiesalGUIcons64", "Textures\\DiesalGUIcons64x256x256.tga") -- Icon Textures
addMedia("texture", "DiesalGUIcons32", "Textures\\DiesalGUIcons32x256x256.tga") -- Icons Textures
addMedia("texture", "DiesalButtonIcons32", "Textures\\DiesalButtonIcons32x128x512.tga") -- Icons Textures
addMedia("border", "shadow", "Textures\\shadow.tga") -- Shadows
addMedia("border", "shadowNoDist", "Textures\\shadowNoDist.tga") -- Shadows
end ]]
--[[ do -- | Add LibSharedMedia |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
local font = getMedia("font", "calibrib")
if font then
LibSharedMedia:Register("font", "Calibri Bold", font)
end
font = getMedia("font", "FiraSans")
if font then
LibSharedMedia:Register("font", "Fira Sans", font)
end
font = getMedia("font", "Standard0755")
if font then
LibSharedMedia:Register("font", "Standard0755", font)
end
font = getMedia("font", "FFF Intelligent Thin Condensed")
if font then
LibSharedMedia:Register("font", "FFF Intelligent", font)
end
end ]]
DiesalFontNormal = CreateFont("DiesalFontNormal") DiesalFontNormal = CreateFont("DiesalFontNormal")
DiesalFontNormal:SetFont("Fonts\\OpenSans-Regular.ttf", 11, "") DiesalFontNormal:SetFont("Fonts\\OpenSans-Regular.ttf", 11, "")
@ -573,48 +527,12 @@ DiesalFontNormalOutline:SetFont("Fonts\\OpenSans-Regular.ttf", 11, "OUTLINE")
for _, fontName in pairs(GetFonts()) do for _, fontName in pairs(GetFonts()) do
if fontName == "FontAwesome_L" and FontAwesome_L then if fontName == "FontAwesome_L" and FontAwesome_L then
local file, height, flags = (FontAwesome_L --[[@as Font]]):GetFont()
local file, height, flags = FontAwesome_L--[[@as Font]]:GetFont()
if file then if file then
DiesalFontAwesomeRegular:SetFont(file, 11, "") DiesalFontAwesomeRegular:SetFont(file, 11, flags or "")
end
end
end
--[[ do
DiesalFontAwesomeRegular = CreateFont("DiesalFontAwesomeRegular")
DiesalFontAwesomeRegular:SetFont("Fonts\\FontAwesomeProRegular.otf", 11, "")
end ]]
--[[ do -- | Set Fonts |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DiesalFontNormal = CreateFont("DiesalFontNormal")
DiesalFontNormal:SetFont("Fonts\\OpenSans-Regular.ttf", 11, "") --SetFont("Fonts\\SourceCodePro-Regular.ttf", 11, "")
local font = getMedia("font", "calibrib")
if font then
DiesalFontNormalOutline = CreateFont("DiesalFontNormalOutline")
DiesalFontNormalOutline:SetFont(font, 11, "OUTLINE")
end
font = getMedia("font", "Standard0755")
if font then
DiesalFontPixel = CreateFont("DiesalFontPixel")
DiesalFontPixel:SetFont(font, 8, "")
end end
font = getMedia("font", "Standard0755")
if font then
DiesalFontPixelOutLine = CreateFont("DiesalFontPixelOutLine")
DiesalFontPixelOutLine:SetFont(font, 8, "OUTLINE, MONOCHROME")
DiesalFontPixelOutLine:SetSpacing(2)
end end
font = getMedia("font", "FFF Intelligent Thin Condensed")
if font then
DiesalFontPixel2 = CreateFont("DiesalFontPixel2")
DiesalFontPixel2:SetFont(font, 8, "OUTLINE, MONOCHROME")
end end
end ]]
local bytemarkers = { { 0x7FF, 192 }, { 0xFFFF, 224 }, { 0x1FFFFF, 240 } } local bytemarkers = { { 0x7FF, 192 }, { 0xFFFF, 224 }, { 0x1FFFFF, 240 } }
@ -638,346 +556,6 @@ function DiesalStyle:UTF8(decimal)
return table.concat(charbytes) return table.concat(charbytes)
end end
--[[ do -- Set Icons
---@class DiesalStyle.Icon.Coords
---@field column integer
---@field row integer
---@class DiesalStyle.Icon.File
---@field prefix { [1]: string, [2]: string, [3]: string }
---@field size { width: integer, height: integer, icon: integer }
---@class DiesalStyle.Icon
---@field name string
---@field file DiesalStyle.Icon.File
---@field coords DiesalStyle.Icon.Coords
---@class DiesalStyle.Icons : { [string]: table<string, table<string, table<integer,table<string, table<integer, table<integer, DiesalStyle.Icon>>>>>> }
DiesalStyle.Icons = DiesalStyle.Icons or {}
local Icons = DiesalStyle.Icons
---@class DiesalStyle.IconsByFileColumnRow : { [string]: DiesalStyle.Icon }
local IconsByFileColumnRow = {}
---@class DiesalStyle.IconsByName : { [string]: DiesalStyle.Icon }
local IconsByName = {}
function DiesalStyle.AddIcons(iconsToAdd)
assert(type(iconsToAdd) == "table", "iconsToAdd parameter (1) should be a table")
local prefixInfo = {
[1] = { prefix = "prefix1", count = 1, file = 1, iconSize = 1 },
[2] = { prefix = "prefix2", count = 1, file = 1, iconSize = 1 },
[3] = { prefix = "prefix3", count = 1, file = 1, iconSize = 1 },
}
---@param prefix integer
---@param key string
---@param table table
local function checkType(prefix, key, table)
assert(type(key) == "string", string.format("key %d for %s not a string.", prefixInfo[prefix].count, prefixInfo[prefix].prefix))
assert(type(table) == "table", string.format("value %d for %s is not a table.", prefixInfo[prefix].count, prefixInfo[prefix].prefix))
end
for p1, p1Table in pairs(iconsToAdd) do
checkType(1, p1, p1Table)
Icons[p1] = Icons[p1] or {}
for p2, p2Table in pairs(p1Table) do
checkType(2, p2, p2Table)
Icons[p1][p2] = Icons[p1][p2] or {}
for p3, p3Table in pairs(p2Table) do
checkType(3, p3, p3Table)
local filePrefixes = string.format("%s%s%s", p1, p2, p3)
Icons[p1][p2][p3] = Icons[p1][p2][p3] or {}
for iconSize, fileDimTable in pairs(p3Table) do
assert(type(iconSize) == "number", string.format("icon size key %d for %s is not a number.", prefixInfo[3].iconSize, filePrefixes))
filePrefixes = string.format("%s[%d]", filePrefixes, iconSize)
Icons[p1][p2][p3][iconSize] = Icons[p1][p2][p3][iconSize] or {}
for fileDimKey, iconColumns in pairs(fileDimTable) do
assert(type(fileDimKey == "string"), string.format("file dimensions key for file %d in %s is not a string.", prefixInfo[3].file, filePrefixes))
local fileDims = strsplittable("x", fileDimKey, 2)
assert(type(tonumber(fileDims[1])) == "number", string.format("could not obtain width from %s in %s", fileDimKey, filePrefixes))
assert(type(tonumber(fileDims[2])) == "number", string.format("could not obtain height from %s in %s", fileDimKey, filePrefixes))
Icons[p1][p2][p3][iconSize][fileDimKey] = Icons[p1][p2][p3][iconSize][fileDimKey] or {}
filePrefixes = string.format("%s[%s]", filePrefixes, fileDimKey)
local fileWidth = tonumber(fileDims[1]) or 0
local fileHeight = tonumber(fileDims[2]) or 0
local maxColumns = math.floor(fileWidth / iconSize)
local maxRows = math.floor(fileHeight / iconSize)
local iconsFileTable = Icons[p1][p2][p3][iconSize][fileDimKey]
local columnCount = 0
local rowCount = 0
for column, rows in pairs(iconColumns) do
columnCount = columnCount + 1
assert(type(column) == "number", string.format("column %d key in %s is not a number.", columnCount, filePrefixes))
assert(type(rows) == "table", string.format("column %d value in %s is not a table.", columnCount, filePrefixes))
local filePrefixesColumn = string.format("%s[%d]", filePrefixes, column)
iconsFileTable[column] = iconsFileTable[column] or {}
for row, icon in pairs(rows) do
rowCount = rowCount + 1
assert(type(row) == "number", string.format("row %d key in %s is not a number.", rowCount, filePrefixesColumn))
assert(type(icon) == "string", string.format("row %d value in %s is not a string.", rowCount, filePrefixesColumn))
local filePrefixesColumnRow = string.format("%s[%d]", filePrefixesColumn, row)
local iconName = icon
iconsFileTable[column][row] = {
name = iconName,
file = {
prefix = {
[1] = p1,
[2] = p2,
[3] = p3,
},
size = {
width = fileWidth,
height = fileHeight,
icon = iconSize,
},
},
coords = {
column = column,
row = row,
},
}
IconsByName[iconName] = IconsByName[iconName] or iconsFileTable[column][row]
IconsByFileColumnRow[filePrefixesColumnRow] = iconsFileTable[column][row]
end
rowCount = 1
end
prefixInfo[3].file = prefixInfo[3].file + 1
end
prefixInfo[3].iconSize = prefixInfo[3].iconSize + 1
end
prefixInfo[3].count = prefixInfo[3].count + 1
end
prefixInfo[2].count = prefixInfo[2].count + 1
end
prefixInfo[1].count = prefixInfo[1].count + 1
end
end
---@param iconTable DiesalStyle.Icon
local function CreateIconStyle(iconTable)
local fileName = string.format("%s%s%s", iconTable.file.prefix[1], iconTable.file.prefix[2], iconTable.file.prefix[3])
local iconSize = iconTable.file.size.icon
fileName = fileName .. (iconSize ~= 16 and iconSize or "")
local fileWidth = iconTable.file.size.width
local fileHeight = iconTable.file.size.height
local column = iconTable.coords.column
local row = iconTable.coords.row
return {
fileName,
{
column,
row,
iconSize,
fileWidth,
fileHeight,
},
}
end
---@param iconName string
function DiesalStyle.GetIconStyleByName(iconName)
return IconsByName[iconName] and CreateIconStyle(IconsByName[iconName]) or {}
end
-- [prefix1][prefix2][prefix3][iconSize][fileWidthxfileHeight][column][row]
-- DiesalGUIcons16x256x128.tga, Column 3, Row 4
-- [Diesal][GUI][cons][16][256x128][3][4]
---@param iconFile string
function DiesalStyle.GetIconByFileColumnRow(iconFile)
return IconsByFileColumnRow[iconFile] and CreateIconStyle(IconsByFileColumnRow[iconFile]) or {}
end
-- Camel Case File Name
local DefaultDiesalIcons = {
-- Prefix 1
Diesal = {
-- Prefix 2
Button = {
-- Prefix 3
Icons = {
-- Icon Size
[32] = {
-- WidthxHeight
["128x512"] = {
[1] = {
[1] = "background-horseshoe",
[2] = "hover-horseshoe",
[3] = "normal-horseshoe",
},
[2] = {
[1] = "background-crosshair",
[2] = "hover-crosshair",
[3] = "normal-crosshair",
},
[3] = {
[1] = "background-crossbones",
[2] = "hover-crossbones",
[3] = "normal-crossbones",
},
[4] = {
[1] = "background-tag",
[2] = "hover-tag",
[3] = "normal-tag",
},
[5] = {
[1] = "background-crossed-swords",
[2] = "hover-crossed-swords",
[3] = "normal-crossed-swords",
},
[6] = {
[1] = "background-oc",
[2] = "hover-oc",
[3] = "normal-oc",
},
},
},
},
},
-- Prefix 2
GU = {
-- Prefix 3
Icons = {
-- Icon Size
[16] = {
-- WidthxHeight
["256x128"] = {
-- Column 1
[1] = {
-- Row 1
[1] = "solid-white-arrow-up",
[4] = "outline-textured-rewind",
[5] = "outline-textured-question-mark",
[6] = "outline-textured-cirle-plus",
[7] = "outline-textured-file",
[8] = "outline-blue-folder-closed",
},
[2] = {
[1] = "solid-white-arrow-down",
[4] = "outline-textured-pause",
[5] = "outline-textured-cog",
[6] = "outline-textured-cirle-minus",
[7] = "outline-textured-folder",
[8] = "outline-blue-folder-opened",
},
[3] = {
[1] = "solid-white-arrow-right",
[4] = "outline-textured-play",
[5] = "outline-textured-reload",
[6] = "outline-textured-square-minus",
[7] = "outline-textured-folder-plus",
[8] = "outline-white-file",
},
[4] = {
[1] = "solid-white-arrow-left",
[4] = "outline-textured-fast-forward",
[5] = "outline-textured-home",
[6] = "outline-textured-square-plus",
[7] = "outline-textured-folder-minus",
[8] = "outline-multi-cluster",
},
[5] = {
[1] = "solid-white-circle",
[4] = "outline-textured-back",
[5] = "outline-textured-arrow-down",
[8] = "outline-textured-diskette",
},
[6] = {
[4] = "outline-textured-forward",
[5] = "outline-textured-arrow-up",
},
[7] = {
[5] = "outline-textured-arrow-right",
},
[8] = {
[5] = "outline-textured-arrow-left",
},
[9] = {
[5] = "outline-textured-arrow-close",
},
[10] = {
[5] = "outline-textured-check",
},
[11] = {
[5] = "outline-textured-lock-unclocked",
},
[12] = {
[5] = "outline-textured-lock-locked",
},
[13] = {
[5] = "outline-textured-lock-delete",
},
[14] = {
[4] = "outline-textured-circle",
[5] = "outline-textured-power",
},
[15] = {
[4] = "outline-textured-dropplet-down",
[5] = "outline-textured-ellipse",
},
[16] = {
[4] = "outline-textured-dropplet-square",
},
},
},
[32] = {
["256x256"] = {
[1] = {
[1] = "white-horseshoe",
[2] = "black-horseshoe",
},
[2] = {
[1] = "white-crosshair",
[2] = "black-crosshair",
},
[3] = {
[1] = "white-crossbones",
[2] = "black-crossbones",
},
[4] = {
[1] = "white-tag",
[2] = "black-tag",
},
[5] = {
[1] = "white-crossed-swords",
[2] = "black-crossed-swords",
},
[6] = {
[1] = "white-oc",
[2] = "black-oc",
},
},
},
[64] = {
["256x256"] = {
[1] = {
[1] = "marker-droplette-yellow-diamond",
},
[2] = {
[1] = "marker-droplette-green-leaf",
},
[3] = {
[1] = "marker-droplette-teal-star",
},
},
},
},
},
},
}
DiesalStyle.AddIcons(DefaultDiesalIcons)
end ]]
-- ~~| DiesalStyle API |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- ~~| DiesalStyle API |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
--[[ --[[
Texture style table format Texture style table format
@ -1140,8 +718,10 @@ function DiesalStyle:StyleTexture(texture, style)
texture.style.alpha = formatAlpha(style.alpha) or texture.style.alpha or { 1, 1 } texture.style.alpha = formatAlpha(style.alpha) or texture.style.alpha or { 1, 1 }
-- gradient -- gradient
if texture.style.gradient then if texture.style.gradient then
texture.style.gradient.orientation = style.gradient_orientation or texture.style.gradient.orientation or DEFAULT_GRADIENT_ORIENTATION texture.style.gradient.orientation = style.gradient_orientation or texture.style.gradient.orientation or
texture.style.gradient.color = style.gradient_color or texture.style.gradient.color or { DEFAULT_COLOR, DEFAULT_COLOR } DEFAULT_GRADIENT_ORIENTATION
texture.style.gradient.color = style.gradient_color or texture.style.gradient.color or
{ DEFAULT_COLOR, DEFAULT_COLOR }
end end
-- image -- image
if texture.style.image then if texture.style.image then
@ -1177,7 +757,8 @@ function DiesalStyle:StyleTexture(texture, style)
end end
if style.debug then if style.debug then
print(texture:GetHeight(), texture.style.position[1], texture.style.position[2], texture.style.position[3], texture.style.position[4]) print(texture:GetHeight(), texture.style.position[1], texture.style.position[2], texture.style.position[3],
texture.style.position[4])
end end
-- [1] Texture > [2] gradient > [3] color -- [1] Texture > [2] gradient > [3] color
if texture.style.image then -- [1] Texture if texture.style.image then -- [1] Texture
@ -1187,8 +768,10 @@ function DiesalStyle:StyleTexture(texture, style)
setGradient(texture, "HORIZONTAL", 1, 1, 1, 1, 1, 1, 1, 1) -- clear gradient setGradient(texture, "HORIZONTAL", 1, 1, 1, 1, 1, 1, 1, 1) -- clear gradient
texture:SetColorTexture(1, 1, 1, 1) -- clear color texture:SetColorTexture(1, 1, 1, 1) -- clear color
-- apply settings -- apply settings
texture:SetTexCoord(texture.style.image.coords[1], texture.style.image.coords[2], texture.style.image.coords[3], texture.style.image.coords[4]) texture:SetTexCoord(texture.style.image.coords[1], texture.style.image.coords[2], texture.style.image.coords[3],
texture:SetTexture(texture.style.image.file, texture.style.image.tiling and texture.style.image.tiling[1], texture.style.image.tiling and texture.style.image.tiling[2]) texture.style.image.coords[4])
texture:SetTexture(texture.style.image.file, texture.style.image.tiling and texture.style.image.tiling[1],
texture.style.image.tiling and texture.style.image.tiling[2])
texture:SetHorizTile(texture.style.image.tiling[1] and true) texture:SetHorizTile(texture.style.image.tiling[1] and true)
texture:SetVertTile(texture.style.image.tiling[2] and true) texture:SetVertTile(texture.style.image.tiling[2] and true)
local r, g, b = GetBlizzColorValues(texture.style.image.color) local r, g, b = GetBlizzColorValues(texture.style.image.color)
@ -1200,9 +783,12 @@ function DiesalStyle:StyleTexture(texture, style)
texture:SetTexture() -- clear image texture:SetTexture() -- clear image
texture:SetColorTexture(1, 1, 1, 1) -- clear color texture:SetColorTexture(1, 1, 1, 1) -- clear color
-- apply settings -- apply settings
local r1, g1, b1 = GetBlizzColorValues(texture.style.gradient.color[texture.style.gradient.orientation == "HORIZONTAL" and 1 or 2]) local r1, g1, b1 = GetBlizzColorValues(texture.style.gradient.color
local r2, g2, b2 = GetBlizzColorValues(texture.style.gradient.color[texture.style.gradient.orientation == "HORIZONTAL" and 2 or 1]) [texture.style.gradient.orientation == "HORIZONTAL" and 1 or 2])
local a1, a2 = texture.style.alpha[texture.style.gradient.orientation == "HORIZONTAL" and 1 or 2], texture.style.alpha[texture.style.gradient.orientation == "HORIZONTAL" and 2 or 1] local r2, g2, b2 = GetBlizzColorValues(texture.style.gradient.color
[texture.style.gradient.orientation == "HORIZONTAL" and 2 or 1])
local a1, a2 = texture.style.alpha[texture.style.gradient.orientation == "HORIZONTAL" and 1 or 2],
texture.style.alpha[texture.style.gradient.orientation == "HORIZONTAL" and 2 or 1]
setGradient(texture, texture.style.gradient.orientation, r1, g1, b1, a1, r2, g2, b2, a2) setGradient(texture, texture.style.gradient.orientation, r1, g1, b1, a1, r2, g2, b2, a2)
elseif texture.style.color then -- [3] color elseif texture.style.color then -- [3] color
-- set mode -- set mode
@ -1248,7 +834,8 @@ function DiesalStyle:StyleOutline(leftTexture, rightTexture, topTexture, bottomT
color = style.gradient[2] and style.gradient[3] and { style.gradient[2], style.gradient[3] }, color = style.gradient[2] and style.gradient[3] and { style.gradient[2], style.gradient[3] },
} }
end end
style.gradient_orientation = style.gradient_orientation and style.gradient_orientation:upper() --formatOrientation(style.gradient_orientation) -- fuck you style.gradient_orientation = style.gradient_orientation and
style.gradient_orientation:upper() --formatOrientation(style.gradient_orientation) -- fuck you
if not texture.style.gradient and (style.gradient_orientation or style.gradient_alpha or style.gradient_color) then if not texture.style.gradient and (style.gradient_orientation or style.gradient_alpha or style.gradient_color) then
texture.style.gradient = {} texture.style.gradient = {}
end end
@ -1261,8 +848,10 @@ function DiesalStyle:StyleOutline(leftTexture, rightTexture, topTexture, bottomT
texture.style.alpha = formatAlpha(style.alpha) or texture.style.alpha or { 1, 1 } texture.style.alpha = formatAlpha(style.alpha) or texture.style.alpha or { 1, 1 }
-- gradient -- gradient
if texture.style.gradient then if texture.style.gradient then
texture.style.gradient.orientation = style.gradient_orientation or texture.style.gradient.orientation or DEFAULT_GRADIENT_ORIENTATION texture.style.gradient.orientation = style.gradient_orientation or texture.style.gradient.orientation or
texture.style.gradient.color = style.gradient_color or texture.style.gradient.color or { DEFAULT_COLOR, DEFAULT_COLOR } DEFAULT_GRADIENT_ORIENTATION
texture.style.gradient.color = style.gradient_color or texture.style.gradient.color or
{ DEFAULT_COLOR, DEFAULT_COLOR }
end end
-- | Apply Settings |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- | Apply Settings |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@ -1449,9 +1038,11 @@ function DiesalStyle:StyleShadow(object, frame, style)
local shadowStyle = object.shadow.style local shadowStyle = object.shadow.style
-- ~~ Format New Settings ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- ~~ Format New Settings ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
local red, green, blue = DiesalTools.GetColor(style.color) local red, green, blue = DiesalTools.GetColor(style.color)
local offset = style.offset and type(style.offset) == "number" and { style.offset, style.offset, style.offset, style.offset } or style.offset local offset = style.offset and type(style.offset) == "number" and
{ style.offset, style.offset, style.offset, style.offset } or style.offset
-- Setting ~~~~~~~~~~~~~~~~~~~~~~~ New Setting ~~~~~~~~~~~~~~~ Old Setting ~~~~~~~~~~~~~~~~~ Default ~~~~~~~~~~~~~~~~~~ -- Setting ~~~~~~~~~~~~~~~~~~~~~~~ New Setting ~~~~~~~~~~~~~~~ Old Setting ~~~~~~~~~~~~~~~~~ Default ~~~~~~~~~~~~~~~~~~
shadowStyle.edgeFile = style.edgeFile or shadowStyle.edgeFile or [[Interface\Buttons\WHITE8X8]] -- getMedia("border", "shadow") shadowStyle.edgeFile = style.edgeFile or shadowStyle.edgeFile or
[[Interface\Buttons\WHITE8X8]] -- getMedia("border", "shadow")
shadowStyle.edgeSize = style.edgeSize or shadowStyle.edgeSize or 5 shadowStyle.edgeSize = style.edgeSize or shadowStyle.edgeSize or 5
shadowStyle.red = red or shadowStyle.red or 0 shadowStyle.red = red or shadowStyle.red or 0

Loading…
Cancel
Save