535 lines
21 KiB
Lua
535 lines
21 KiB
Lua
|
-- ------------------------------------------------------------------------------ --
|
||
|
-- 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
|