TradeSkillMaster/Core/UI/Support/TexturePacks.lua

535 lines
21 KiB
Lua
Raw Normal View History

2020-11-13 14:13:12 -05:00
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster --
-- https://tradeskillmaster.com --
-- All Rights Reserved - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
local _, TSM = ...
local TexturePacks = TSM.UI:NewPackage("TexturePacks")
local NineSlice = TSM.Include("Util.NineSlice")
local Color = TSM.Include("Util.Color")
local Theme = TSM.Include("Util.Theme")
local private = {
colorLookup = {},
}
local TEXTURE_FILE_INFO = {
uiFrames = {
path = "Interface\\Addons\\TradeSkillMaster\\Media\\UIFrames.tga",
scale = 1,
width = 256,
height = 256,
coord = {
["AuctionCounterTexture"] = { 166, 189, 214, 225 },
["DividerHandle"] = { 3, 11, 3, 85 },
["GlobalEdgeBottomEdge"] = { 68, 78, 217, 227 },
["GlobalEdgeBottomLeftCorner"] = { 83, 93, 217, 227 },
["GlobalEdgeBottomRightCorner"] = { 194, 204, 3, 13 },
["GlobalEdgeLeftEdge"] = { 194, 204, 18, 28 },
["GlobalEdgeRightEdge"] = { 243, 253, 3, 13 },
["GlobalEdgeTopEdge"] = { 243, 253, 18, 28 },
["GlobalEdgeTopLeftCorner"] = { 194, 204, 33, 43 },
["GlobalEdgeTopRightCorner"] = { 243, 253, 33, 43 },
["HighlightDot"] = { 97, 105, 48, 56 },
["InnerFrameBottomEdge"] = { 110, 120, 87, 97 },
["InnerFrameBottomLeftCorner"] = { 110, 120, 102, 112 },
["InnerFrameBottomRightCorner"] = { 118, 128, 66, 76 },
["InnerFrameLeftEdge"] = { 133, 143, 3, 13 },
["InnerFrameRightEdge"] = { 148, 158, 3, 13 },
["InnerFrameTopEdge"] = { 133, 143, 18, 28 },
["InnerFrameTopLeftCorner"] = { 148, 158, 18, 28 },
["InnerFrameTopRightCorner"] = { 67, 77, 33, 43 },
["LargeActiveButtonLeft"] = { 14, 26, 90, 114 },
["LargeActiveButtonMiddle"] = { 14, 26, 119, 143 },
["LargeActiveButtonRight"] = { 16, 28, 3, 27 },
["LargeClickedButtonLeft"] = { 16, 28, 32, 56 },
["LargeClickedButtonMiddle"] = { 16, 28, 61, 85 },
["LargeClickedButtonRight"] = { 31, 43, 90, 114 },
["LargeHoverButtonLeft"] = { 31, 43, 119, 143 },
["LargeHoverButtonMiddle"] = { 33, 45, 3, 27 },
["LargeHoverButtonRight"] = { 33, 45, 32, 56 },
["LargeInactiveButtonLeft"] = { 33, 45, 61, 85 },
["LargeInactiveButtonMiddle"] = { 48, 60, 90, 114 },
["LargeInactiveButtonRight"] = { 48, 60, 119, 143 },
["LoadingBarLeft"] = { 50, 62, 3, 27 },
["LoadingBarMiddle"] = { 50, 62, 32, 56 },
["LoadingBarRight"] = { 50, 62, 61, 85 },
["MediumActiveButtonLeft"] = { 3, 15, 232, 252 },
["MediumActiveButtonMiddle"] = { 20, 32, 232, 252 },
["MediumActiveButtonRight"] = { 37, 49, 232, 252 },
["MediumClickedButtonLeft"] = { 54, 66, 232, 252 },
["MediumClickedButtonMiddle"] = { 65, 77, 117, 137 },
["MediumClickedButtonRight"] = { 65, 77, 142, 162 },
["MediumHoverButtonLeft"] = { 68, 80, 167, 187 },
["MediumHoverButtonMiddle"] = { 68, 80, 192, 212 },
["MediumHoverButtonRight"] = { 71, 83, 232, 252 },
["MediumInactiveButtonLeft"] = { 88, 100, 232, 252 },
["MediumInactiveButtonMiddle"] = { 82, 94, 117, 137 },
["MediumInactiveButtonRight"] = { 82, 94, 142, 162 },
["OuterFrameBottomEdge"] = { 67, 77, 48, 58 },
["OuterFrameBottomLeftCorner"] = { 67, 77, 3, 13 },
["OuterFrameBottomRightCorner"] = { 67, 77, 18, 28 },
["OuterFrameLeftEdge"] = { 82, 92, 33, 43 },
["OuterFrameRightEdge"] = { 82, 92, 48, 58 },
["OuterFrameTopEdge"] = { 82, 92, 3, 13 },
["OuterFrameTopLeftCorner"] = { 82, 92, 18, 28 },
["OuterFrameTopRightCorner"] = { 97, 107, 33, 43 },
["PopupBottomEdge"] = { 14, 26, 148, 160 },
["PopupBottomLeftCorner"] = { 31, 43, 148, 160 },
["PopupBottomRightCorner"] = { 48, 60, 148, 160 },
["PopupLeftEdge"] = { 98, 110, 214, 226 },
["PopupRightEdge"] = { 115, 127, 214, 226 },
["PopupTopEdge"] = { 132, 144, 214, 226 },
["PopupTopLeftCorner"] = { 149, 161, 214, 226 },
["PopupTopRightCorner"] = { 65, 105, 90, 112 },
["RoundDarkBottom"] = { 110, 118, 48, 56 },
["RoundDarkBottomLeft"] = { 112, 120, 33, 41 },
["RoundDarkBottomRight"] = { 123, 131, 46, 54 },
["RoundDarkCenter"] = { 125, 133, 33, 41 },
["RoundDarkLeft"] = { 149, 156, 55, 62 },
["RoundDarkRight"] = { 138, 146, 33, 41 },
["RoundDarkTop"] = { 133, 140, 59, 66 },
["RoundDarkTopLeft"] = { 209, 216, 45, 52 },
["RoundDarkTopRight"] = { 151, 159, 33, 41 },
["RoundedBottomCenter"] = { 183, 187, 3, 11 },
["RoundedBottomLeft"] = { 97, 105, 3, 11 },
["RoundedBottomRight"] = { 97, 105, 16, 24 },
["RoundedCenter"] = { 110, 118, 3, 11 },
["RoundedLeft"] = { 149, 157, 46, 50 },
["RoundedRight"] = { 149, 157, 46, 50 },
["RoundedTop"] = { 183, 187, 3, 11 },
["RoundedTopLeft"] = { 110, 118, 16, 24 },
["RoundedTopRight"] = { 136, 144, 46, 54 },
["SettingsNavShadow"] = { 3, 9, 90, 162 },
["SmallActiveButtonLeft"] = { 99, 111, 117, 133 },
["SmallActiveButtonMiddle"] = { 99, 111, 138, 154 },
["SmallActiveButtonRight"] = { 209, 221, 3, 19 },
["SmallClickedButtonLeft"] = { 166, 178, 3, 19 },
["SmallClickedButtonMiddle"] = { 166, 178, 24, 40 },
["SmallClickedButtonRight"] = { 226, 238, 3, 19 },
["SmallHoverButtonLeft"] = { 209, 221, 24, 40 },
["SmallHoverButtonMiddle"] = { 226, 238, 24, 40 },
["SmallHoverButtonRight"] = { 166, 178, 45, 61 },
["SmallInactiveButtonLeft"] = { 67, 79, 66, 82 },
["SmallInactiveButtonMiddle"] = { 84, 96, 66, 82 },
["SmallInactiveButtonRight"] = { 101, 113, 66, 82 },
["SmallLogo"] = { 85, 161, 167, 186 },
["TSMLogo"] = { 3, 63, 167, 227 },
["ToggleDisabledOff"] = { 85, 132, 191, 209 },
["ToggleDisabledOn"] = { 105, 152, 231, 249 },
["ToggleOff"] = { 137, 184, 191, 209 },
["ToggleOn"] = { 157, 204, 231, 249 },
},
},
iconPack = {
path = "Interface\\Addons\\TradeSkillMaster\\Media\\IconPack.tga",
scale = 1,
width = 256,
height = 256,
coord = {
["12x12/Add/Circle"] = { 236, 248, 88, 100 },
["12x12/Add/Default"] = { 92, 104, 92, 104 },
["12x12/Attention"] = { 106, 118, 92, 104 },
["12x12/Bid"] = { 120, 132, 92, 104 },
["12x12/Caret/Down"] = { 134, 146, 92, 104 },
["12x12/Caret/Right"] = { 148, 160, 92, 104 },
["12x12/Checkmark/Circle"] = { 162, 174, 92, 104 },
["12x12/Checkmark/Default"] = { 176, 188, 92, 104 },
["12x12/Chevron/Down"] = { 190, 202, 92, 104 },
["12x12/Chevron/Right"] = { 204, 216, 92, 104 },
["12x12/Chevron/Up"] = { 218, 230, 92, 104 },
["12x12/Circle"] = { 232, 244, 102, 114 },
["12x12/Clock"] = { 88, 100, 116, 128 },
["12x12/Close/Circle"] = { 88, 100, 130, 142 },
["12x12/Close/Default"] = { 88, 100, 144, 156 },
["12x12/Configure"] = { 88, 100, 158, 170 },
["12x12/Delete"] = { 88, 100, 172, 184 },
["12x12/DragHandle"] = { 88, 100, 186, 198 },
["12x12/Duplicate"] = { 88, 100, 200, 212 },
["12x12/Edit"] = { 88, 100, 214, 226 },
["12x12/Expand All"] = { 88, 100, 228, 240 },
["12x12/Export"] = { 88, 100, 242, 254 },
["12x12/Filter"] = { 102, 114, 106, 118 },
["12x12/Folder"] = { 116, 128, 106, 118 },
["12x12/Grip"] = { 130, 142, 106, 118 },
["12x12/Groups"] = { 144, 156, 106, 118 },
["12x12/Hide"] = { 158, 170, 106, 118 },
["12x12/Import"] = { 172, 184, 106, 118 },
["12x12/Link"] = { 186, 198, 106, 118 },
["12x12/Mailing"] = { 200, 212, 106, 118 },
["12x12/More/Horizontal"] = { 214, 226, 106, 118 },
["12x12/More/Vertical"] = { 228, 240, 116, 128 },
["12x12/Operation"] = { 242, 254, 116, 128 },
["12x12/PlayPause"] = { 102, 114, 120, 132 },
["12x12/Popout"] = { 116, 128, 120, 132 },
["12x12/Post"] = { 130, 142, 120, 132 },
["12x12/Queue"] = { 144, 156, 120, 132 },
["12x12/Reset"] = { 158, 170, 120, 132 },
["12x12/Resize"] = { 172, 184, 120, 132 },
["12x12/Running"] = { 186, 198, 120, 132 },
["12x12/SaleRate"] = { 200, 212, 120, 132 },
["12x12/Search"] = { 214, 226, 120, 132 },
["12x12/Select All"] = { 228, 240, 130, 142 },
["12x12/Shopping"] = { 242, 254, 130, 142 },
["12x12/SkillUp"] = { 102, 114, 144, 156 },
["12x12/Star/Filled"] = { 102, 114, 158, 170 },
["12x12/Star/Unfilled"] = { 102, 114, 172, 184 },
["12x12/Subtract/Circle"] = { 102, 114, 186, 198 },
["12x12/Subtract/Default"] = { 102, 114, 200, 212 },
["12x12/Visible"] = { 102, 114, 214, 226 },
["12x12/WoW"] = { 102, 114, 228, 240 },
["14x14/Add/Circle"] = { 240, 254, 56, 70 },
["14x14/Add/Default"] = { 40, 54, 112, 126 },
["14x14/Attention"] = { 40, 54, 128, 142 },
["14x14/Bid"] = { 40, 54, 144, 158 },
["14x14/Caret/Down"] = { 40, 54, 160, 174 },
["14x14/Caret/Right"] = { 40, 54, 176, 190 },
["14x14/Checkmark/Circle"] = { 40, 54, 192, 206 },
["14x14/Checkmark/Default"] = { 40, 54, 208, 222 },
["14x14/Chevron/Down"] = { 40, 54, 224, 238 },
["14x14/Chevron/Right"] = { 40, 54, 240, 254 },
["14x14/Chevron/Up"] = { 56, 70, 112, 126 },
["14x14/Circle"] = { 60, 74, 72, 86 },
["14x14/Clock"] = { 60, 74, 88, 102 },
["14x14/Close/Circle"] = { 56, 70, 128, 142 },
["14x14/Close/Default"] = { 56, 70, 144, 158 },
["14x14/Configure"] = { 56, 70, 160, 174 },
["14x14/Delete"] = { 56, 70, 176, 190 },
["14x14/DragHandle"] = { 56, 70, 192, 206 },
["14x14/Duplicate"] = { 56, 70, 208, 222 },
["14x14/Edit"] = { 56, 70, 224, 238 },
["14x14/Expand All"] = { 56, 70, 240, 254 },
["14x14/Export"] = { 72, 86, 104, 118 },
["14x14/Filter"] = { 76, 90, 72, 86 },
["14x14/Folder"] = { 76, 90, 88, 102 },
["14x14/Grip"] = { 72, 86, 120, 134 },
["14x14/Groups"] = { 72, 86, 136, 150 },
["14x14/Hide"] = { 72, 86, 152, 166 },
["14x14/Import"] = { 72, 86, 168, 182 },
["14x14/Link"] = { 72, 86, 184, 198 },
["14x14/Mailing"] = { 72, 86, 200, 214 },
["14x14/More/Horizontal"] = { 72, 86, 216, 230 },
["14x14/More/Vertical"] = { 72, 86, 232, 246 },
["14x14/Operation"] = { 92, 106, 60, 74 },
["14x14/PlayPause"] = { 108, 122, 60, 74 },
["14x14/Popout"] = { 124, 138, 60, 74 },
["14x14/Post"] = { 140, 154, 60, 74 },
["14x14/Queue"] = { 156, 170, 60, 74 },
["14x14/Reset"] = { 172, 186, 60, 74 },
["14x14/Resize"] = { 188, 202, 60, 74 },
["14x14/Running"] = { 204, 218, 60, 74 },
["14x14/SaleRate"] = { 220, 234, 60, 74 },
["14x14/Search"] = { 236, 250, 72, 86 },
["14x14/Select All"] = { 92, 106, 76, 90 },
["14x14/Shopping"] = { 108, 122, 76, 90 },
["14x14/SkillUp"] = { 124, 138, 76, 90 },
["14x14/Star/Filled"] = { 140, 154, 76, 90 },
["14x14/Star/Unfilled"] = { 156, 170, 76, 90 },
["14x14/Subtract/Circle"] = { 172, 186, 76, 90 },
["14x14/Subtract/Default"] = { 188, 202, 76, 90 },
["14x14/Visible"] = { 204, 218, 76, 90 },
["14x14/WoW"] = { 220, 234, 76, 90 },
["18x18/Add/Circle"] = { 0, 18, 26, 44 },
["18x18/Add/Default"] = { 0, 18, 46, 64 },
["18x18/Attention"] = { 0, 18, 66, 84 },
["18x18/Bid"] = { 0, 18, 86, 104 },
["18x18/Caret/Down"] = { 0, 18, 106, 124 },
["18x18/Caret/Right"] = { 0, 18, 126, 144 },
["18x18/Checkmark/Circle"] = { 0, 18, 146, 164 },
["18x18/Checkmark/Default"] = { 0, 18, 166, 184 },
["18x18/Chevron/Down"] = { 0, 18, 186, 204 },
["18x18/Chevron/Right"] = { 0, 18, 206, 224 },
["18x18/Chevron/Up"] = { 0, 18, 226, 244 },
["18x18/Circle"] = { 20, 38, 26, 44 },
["18x18/Clock"] = { 26, 44, 0, 18 },
["18x18/Close/Circle"] = { 20, 38, 46, 64 },
["18x18/Close/Default"] = { 20, 38, 66, 84 },
["18x18/Configure"] = { 20, 38, 86, 104 },
["18x18/Delete"] = { 20, 38, 106, 124 },
["18x18/DragHandle"] = { 20, 38, 126, 144 },
["18x18/Duplicate"] = { 20, 38, 146, 164 },
["18x18/Edit"] = { 20, 38, 166, 184 },
["18x18/Expand All"] = { 20, 38, 186, 204 },
["18x18/Export"] = { 20, 38, 206, 224 },
["18x18/Filter"] = { 20, 38, 226, 244 },
["18x18/Folder"] = { 46, 64, 0, 18 },
["18x18/Grip"] = { 66, 84, 0, 18 },
["18x18/Groups"] = { 86, 104, 0, 18 },
["18x18/Hide"] = { 106, 124, 0, 18 },
["18x18/Import"] = { 126, 144, 0, 18 },
["18x18/Link"] = { 146, 164, 0, 18 },
["18x18/Mailing"] = { 166, 184, 0, 18 },
["18x18/More/Horizontal"] = { 186, 204, 0, 18 },
["18x18/More/Vertical"] = { 206, 224, 0, 18 },
["18x18/Operation"] = { 226, 244, 0, 18 },
["18x18/PlayPause"] = { 40, 58, 20, 38 },
["18x18/Popout"] = { 60, 78, 20, 38 },
["18x18/Post"] = { 80, 98, 20, 38 },
["18x18/Queue"] = { 100, 118, 20, 38 },
["18x18/Reset"] = { 120, 138, 20, 38 },
["18x18/Resize"] = { 140, 158, 20, 38 },
["18x18/Running"] = { 160, 178, 20, 38 },
["18x18/SaleRate"] = { 180, 198, 20, 38 },
["18x18/Search"] = { 200, 218, 20, 38 },
["18x18/Select All"] = { 220, 238, 20, 38 },
["18x18/Shopping"] = { 40, 58, 40, 58 },
["18x18/SkillUp"] = { 60, 78, 40, 58 },
["18x18/Star/Filled"] = { 80, 98, 40, 58 },
["18x18/Star/Unfilled"] = { 100, 118, 40, 58 },
["18x18/Subtract/Circle"] = { 120, 138, 40, 58 },
["18x18/Subtract/Default"] = { 140, 158, 40, 58 },
["18x18/Visible"] = { 160, 178, 40, 58 },
["18x18/WoW"] = { 180, 198, 40, 58 },
["24x24/Close/Default"] = { 0, 24, 0, 24 },
["Misc/Checkbox/Checked"] = { 200, 218, 40, 58 },
["Misc/Checkbox/Unchecked"] = { 220, 238, 40, 58 },
["Misc/Crafting"] = { 240, 256, 20, 36 },
["Misc/Normal Search"] = { 240, 256, 38, 54 },
["Misc/Radio/Checked"] = { 40, 58, 72, 90 },
["Misc/Radio/Unchecked"] = { 40, 58, 92, 110 },
},
},
}
local NINE_SLICE_STYLES = {
rounded = {
topLeft = "uiFrames.RoundedTopLeft",
bottomLeft = "uiFrames.RoundedBottomLeft",
topRight = "uiFrames.RoundedTopRight",
bottomRight = "uiFrames.RoundedBottomRight",
left = "uiFrames.RoundedLeft",
right = "uiFrames.RoundedRight",
top = "uiFrames.RoundedTop",
bottom = "uiFrames.RoundedBottomCenter",
center = "uiFrames.RoundedCenter",
},
global = {
topLeft = "uiFrames.GlobalEdgeTopLeftCorner",
bottomLeft = "uiFrames.GlobalEdgeBottomLeftCorner",
topRight = "uiFrames.GlobalEdgeTopRightCorner",
bottomRight = "uiFrames.GlobalEdgeBottomRightCorner",
left = "uiFrames.GlobalEdgeLeftEdge",
right = "uiFrames.GlobalEdgeRightEdge",
top = "uiFrames.GlobalEdgeTopEdge",
bottom = "uiFrames.GlobalEdgeBottomEdge",
center = nil,
},
outerFrame = {
topLeft = "uiFrames.OuterFrameTopLeftCorner",
bottomLeft = "uiFrames.OuterFrameBottomLeftCorner",
topRight = "uiFrames.OuterFrameTopRightCorner",
bottomRight = "uiFrames.OuterFrameBottomRightCorner",
left = "uiFrames.OuterFrameLeftEdge",
right = "uiFrames.OuterFrameRightEdge",
top = "uiFrames.OuterFrameTopEdge",
bottom = "uiFrames.OuterFrameBottomEdge",
center = "__WHITE",
},
popup = {
topLeft = "uiFrames.PopupTopLeftCorner",
bottomLeft = "uiFrames.PopupBottomLeftCorner",
topRight = "uiFrames.PopupTopRightCorner",
bottomRight = "uiFrames.PopupBottomRightCorner",
left = "uiFrames.PopupLeftEdge",
right = "uiFrames.PopupRightEdge",
top = "uiFrames.PopupTopEdge",
bottom = "uiFrames.PopupBottomEdge",
center = "__WHITE",
},
solid = {
topLeft = "__WHITE",
bottomLeft = "__WHITE",
topRight = "__WHITE",
bottomRight = "__WHITE",
left = "__WHITE",
right = "__WHITE",
top = "__WHITE",
bottom = "__WHITE",
center = "__WHITE",
}
}
-- ============================================================================
-- Module Functions
-- ============================================================================
function TexturePacks.OnInitialize()
for _, info in pairs(NINE_SLICE_STYLES) do
-- extract the texture info
for part, texturePack in pairs(info) do
if texturePack == "__WHITE" then
info[part] = {
texture = "Interface\\Buttons\\WHITE8X8",
coord = { 0, 1, 0, 1 },
width = 8,
height = 8,
}
else
local width, height = TexturePacks.GetSize(texturePack)
local fileInfo, coord, color, angle = private.SplitTexturePath(texturePack)
assert(not color and not angle)
info[part] = {
texture = fileInfo.path,
coord = { private.GetTexCoord(fileInfo, coord) },
width = width,
height = height,
}
end
end
end
-- apply an offset to the topRight part of the popup style so it shows correctly
NINE_SLICE_STYLES.popup.topRight.offset = {
{ 0, 10 },
}
for key, info in pairs(NINE_SLICE_STYLES) do
NineSlice.RegisterStyle(key, info)
end
end
function TexturePacks.IsValid(key)
local fileInfo, coord = private.SplitTexturePath(key)
return fileInfo and coord and true or false
end
function TexturePacks.GetSize(key)
local fileInfo, coord = private.SplitTexturePath(key)
assert(fileInfo and coord)
local minX, maxX, minY, maxY = unpack(coord)
local width = (maxX - minX) / fileInfo.scale
local height = (maxY - minY) / fileInfo.scale
return width, height
end
function TexturePacks.GetWidth(key)
local width = TexturePacks.GetSize(key)
return width
end
function TexturePacks.GetHeight(key)
local _, height = TexturePacks.GetSize(key)
return height
end
function TexturePacks.SetTexture(texture, key)
local fileInfo, coord, color, angle = private.SplitTexturePath(key)
texture:SetTexture(fileInfo.path)
if angle then
texture:SetTexCoord(private.GetTexCoordRotated(fileInfo, coord, angle))
else
texture:SetTexCoord(private.GetTexCoord(fileInfo, coord))
end
if color then
texture:SetVertexColor((private.colorLookup[color] or Theme.GetColor(color)):GetFractionalRGBA())
else
texture:SetVertexColor(1, 1, 1, 1)
end
end
function TexturePacks.SetSize(texture, key)
local width, height = TexturePacks.GetSize(key)
texture:SetWidth(width)
texture:SetHeight(height)
end
function TexturePacks.SetWidth(texture, key)
texture:SetWidth(TexturePacks.GetWidth(key))
end
function TexturePacks.SetHeight(texture, key)
texture:SetHeight(TexturePacks.GetHeight(key))
end
function TexturePacks.SetTextureAndWidth(texture, key)
TexturePacks.SetTexture(texture, key)
TexturePacks.SetWidth(texture, key)
end
function TexturePacks.SetTextureAndHeight(texture, key)
TexturePacks.SetTexture(texture, key)
TexturePacks.SetHeight(texture, key)
end
function TexturePacks.SetTextureAndSize(texture, key)
TexturePacks.SetTexture(texture, key)
TexturePacks.SetSize(texture, key)
end
function TexturePacks.GetTextureLink(key)
local width, height = TexturePacks.GetSize(key)
local fileInfo, coord, color = private.SplitTexturePath(key)
assert(fileInfo and coord)
local minX, maxX, minY, maxY = unpack(coord)
local r, g, b, a = 255, 255, 255, 255
if color then
r, g, b, a = (private.colorLookup[color] or Theme.GetColor(color)):GetRGBA()
end
assert(a == 255)
return "|T"..strjoin(":", fileInfo.path, width, height, 0, 0, fileInfo.width, fileInfo.height, minX, maxX, minY, maxY, r, g, b).."|t"
end
function TexturePacks.GetColoredKey(key, color)
local fileInfo, _, existingColor = private.SplitTexturePath(key)
assert(fileInfo and not existingColor)
if type(color) == "string" then
-- this is a theme color key, so just add it on
return key.."#"..color
elseif color:Equals(Color.GetFullWhite()) then
return key
end
assert(not color:Equals(Color.GetTransparent()))
local hex = color:GetHex()
private.colorLookup[hex] = color
return key..hex
end
-- ============================================================================
-- Private Helper Functions
-- ============================================================================
function private.SplitTexturePath(key)
local file, entry, color, angle, color2 = strmatch(key, "^([^%.]+)%.([^#@]+)(#?[0-9a-fA-Z_]*)@?([0-9]*)(#?[0-9a-fA-Z_]*)$")
color = (color ~= "" and color) or (color2 ~= "" and color2) or nil
angle = angle ~= "" and tonumber(angle) or nil
local fileInfo = file and TEXTURE_FILE_INFO[file]
if color and not strmatch(color, "^#[0-9a-fA-F]+$") then
-- remove the leading '#' from theme color keys
color = strsub(color, 2)
end
return fileInfo, fileInfo and fileInfo.coord[entry], color, angle
end
function private.GetTexCoord(fileInfo, coord)
local minX, maxX, minY, maxY = unpack(coord)
minX = minX / fileInfo.width
maxX = maxX / fileInfo.width
minY = minY / fileInfo.height
maxY = maxY / fileInfo.height
return minX, maxX, minY, maxY
end
function private.GetTexCoordRotated(fileInfo, coord, angle)
local minX, maxX, minY, maxY = private.GetTexCoord(fileInfo, coord)
local aspect = fileInfo.width / fileInfo.height
local centerX = (minX + maxX) / 2
local centerY = (minY + maxY) / 2
local ULx, ULy = private.RotateCoordPair(minX, minY, centerX, centerY, angle, aspect)
local LLx, LLy = private.RotateCoordPair(minX, maxY, centerX, centerY, angle, aspect)
local URx, URy = private.RotateCoordPair(maxX, minY, centerX, centerY, angle, aspect)
local LRx, LRy = private.RotateCoordPair(maxX, maxY, centerX, centerY, angle, aspect)
return ULx, ULy, LLx, LLy, URx, URy, LRx, LRy
end
function private.RotateCoordPair(x, y, originX, originY, angle, aspect)
local cosResult = cos(angle)
local sinResult = sin(angle)
y = y / aspect
originY = originY / aspect
local resultX = originX + (x - originX) * cosResult - (y - originY) * sinResult
local resultY = (originY + (y - originY) * cosResult + (x - originX) * sinResult) * aspect
return resultX, resultY
end