comparison Libs/LibSharedMedia-3.0/LibSharedMedia-3.0.lua @ 0:fc346da3afd9

First commit Hot Corners standalone.
author tercio
date Fri, 08 Aug 2014 12:35:17 -0300
parents
children c31ee4251181
comparison
equal deleted inserted replaced
-1:000000000000 0:fc346da3afd9
1 --[[
2 Name: LibSharedMedia-3.0
3 Revision: $Revision: 69 $
4 Author: Elkano (elkano@gmx.de)
5 Inspired By: SurfaceLib by Haste/Otravi (troeks@gmail.com)
6 Website: http://www.wowace.com/projects/libsharedmedia-3-0/
7 Description: Shared handling of media data (fonts, sounds, textures, ...) between addons.
8 Dependencies: LibStub, CallbackHandler-1.0
9 License: LGPL v2.1
10 ]]
11
12 local MAJOR, MINOR = "LibSharedMedia-3.0", 4030402 -- increase manualy on changes
13 local lib = LibStub:NewLibrary(MAJOR, MINOR)
14
15 if not lib then return end
16
17 local _G = getfenv(0)
18
19 local pairs = _G.pairs
20 local type = _G.type
21
22 local band = _G.bit.band
23
24 local table_insert = _G.table.insert
25 local table_sort = _G.table.sort
26
27 local locale = GetLocale()
28 local locale_is_western
29 local LOCALE_MASK = 0
30 lib.LOCALE_BIT_koKR = 1
31 lib.LOCALE_BIT_ruRU = 2
32 lib.LOCALE_BIT_zhCN = 4
33 lib.LOCALE_BIT_zhTW = 8
34 lib.LOCALE_BIT_western = 128
35
36 local CallbackHandler = LibStub:GetLibrary("CallbackHandler-1.0")
37
38 lib.callbacks = lib.callbacks or CallbackHandler:New(lib)
39
40 lib.DefaultMedia = lib.DefaultMedia or {}
41 lib.MediaList = lib.MediaList or {}
42 lib.MediaTable = lib.MediaTable or {}
43 lib.MediaType = lib.MediaType or {}
44 lib.OverrideMedia = lib.OverrideMedia or {}
45
46 local defaultMedia = lib.DefaultMedia
47 local mediaList = lib.MediaList
48 local mediaTable = lib.MediaTable
49 local overrideMedia = lib.OverrideMedia
50
51
52 -- create mediatype constants
53 lib.MediaType.BACKGROUND = "background" -- background textures
54 lib.MediaType.BORDER = "border" -- border textures
55 lib.MediaType.FONT = "font" -- fonts
56 lib.MediaType.STATUSBAR = "statusbar" -- statusbar textures
57 lib.MediaType.SOUND = "sound" -- sound files
58
59 -- populate lib with default Blizzard data
60 -- BACKGROUND
61 if not lib.MediaTable.background then lib.MediaTable.background = {} end
62 lib.MediaTable.background["None"] = [[]]
63 lib.MediaTable.background["Blizzard Dialog Background"] = [[Interface\DialogFrame\UI-DialogBox-Background]]
64 lib.MediaTable.background["Blizzard Dialog Background Dark"] = [[Interface\DialogFrame\UI-DialogBox-Background-Dark]]
65 lib.MediaTable.background["Blizzard Dialog Background Gold"] = [[Interface\DialogFrame\UI-DialogBox-Gold-Background]]
66 lib.MediaTable.background["Blizzard Low Health"] = [[Interface\FullScreenTextures\LowHealth]]
67 lib.MediaTable.background["Blizzard Marble"] = [[Interface\FrameGeneral\UI-Background-Marble]]
68 lib.MediaTable.background["Blizzard Out of Control"] = [[Interface\FullScreenTextures\OutOfControl]]
69 lib.MediaTable.background["Blizzard Parchment"] = [[Interface\AchievementFrame\UI-Achievement-Parchment-Horizontal]]
70 lib.MediaTable.background["Blizzard Parchment 2"] = [[Interface\AchievementFrame\UI-GuildAchievement-Parchment-Horizontal]]
71 lib.MediaTable.background["Blizzard Rock"] = [[Interface\FrameGeneral\UI-Background-Rock]]
72 lib.MediaTable.background["Blizzard Tabard Background"] = [[Interface\TabardFrame\TabardFrameBackground]]
73 lib.MediaTable.background["Blizzard Tooltip"] = [[Interface\Tooltips\UI-Tooltip-Background]]
74 lib.MediaTable.background["Solid"] = [[Interface\Buttons\WHITE8X8]]
75 lib.DefaultMedia.background = "None"
76
77 -- BORDER
78 if not lib.MediaTable.border then lib.MediaTable.border = {} end
79 lib.MediaTable.border["None"] = [[]]
80 lib.MediaTable.border["Blizzard Achievement Wood"] = [[Interface\AchievementFrame\UI-Achievement-WoodBorder]]
81 lib.MediaTable.border["Blizzard Chat Bubble"] = [[Interface\Tooltips\ChatBubble-Backdrop]]
82 lib.MediaTable.border["Blizzard Dialog"] = [[Interface\DialogFrame\UI-DialogBox-Border]]
83 lib.MediaTable.border["Blizzard Dialog Gold"] = [[Interface\DialogFrame\UI-DialogBox-Gold-Border]]
84 lib.MediaTable.border["Blizzard Party"] = [[Interface\CHARACTERFRAME\UI-Party-Border]]
85 lib.MediaTable.border["Blizzard Tooltip"] = [[Interface\Tooltips\UI-Tooltip-Border]]
86 lib.DefaultMedia.border = "None"
87
88 -- FONT
89 if not lib.MediaTable.font then lib.MediaTable.font = {} end
90 local SML_MT_font = lib.MediaTable.font
91 if locale == "koKR" then
92 LOCALE_MASK = lib.LOCALE_BIT_koKR
93 --
94 SML_MT_font["굵은 글꼴"] = [[Fonts\2002B.TTF]]
95 SML_MT_font["기본 글꼴"] = [[Fonts\2002.TTF]]
96 SML_MT_font["데미지 글꼴"] = [[Fonts\K_Damage.TTF]]
97 SML_MT_font["퀘스트 글꼴"] = [[Fonts\K_Pagetext.TTF]]
98 --
99 lib.DefaultMedia["font"] = "기본 글꼴" -- someone from koKR please adjust if needed
100 --
101 elseif locale == "zhCN" then
102 LOCALE_MASK = lib.LOCALE_BIT_zhCN
103 --
104 SML_MT_font["伤害数字"] = [[Fonts\ARKai_C.ttf]]
105 SML_MT_font["默认"] = [[Fonts\ARKai_T.ttf]]
106 SML_MT_font["聊天"] = [[Fonts\ARHei.ttf]]
107 --
108 lib.DefaultMedia["font"] = "默认" -- someone from zhCN please adjust if needed
109 --
110 elseif locale == "zhTW" then
111 LOCALE_MASK = lib.LOCALE_BIT_zhTW
112 --
113 SML_MT_font["提示訊息"] = [[Fonts\bHEI00M.ttf]]
114 SML_MT_font["聊天"] = [[Fonts\bHEI01B.ttf]]
115 SML_MT_font["傷害數字"] = [[Fonts\bKAI00M.ttf]]
116 SML_MT_font["預設"] = [[Fonts\bLEI00D.ttf]]
117 --
118 lib.DefaultMedia["font"] = "預設" -- someone from zhTW please adjust if needed
119
120 elseif locale == "ruRU" then
121 LOCALE_MASK = lib.LOCALE_BIT_ruRU
122 --
123 SML_MT_font["Arial Narrow"] = [[Fonts\ARIALN.TTF]]
124 SML_MT_font["Friz Quadrata TT"] = [[Fonts\FRIZQT__.TTF]]
125 SML_MT_font["Morpheus"] = [[Fonts\MORPHEUS.TTF]]
126 SML_MT_font["Nimrod MT"] = [[Fonts\NIM_____.ttf]]
127 SML_MT_font["Skurri"] = [[Fonts\SKURRI.TTF]]
128 --
129 lib.DefaultMedia.font = "Friz Quadrata TT"
130 --
131 else
132 LOCALE_MASK = lib.LOCALE_BIT_western
133 locale_is_western = true
134 --
135 SML_MT_font["Arial Narrow"] = [[Fonts\ARIALN.TTF]]
136 SML_MT_font["Friz Quadrata TT"] = [[Fonts\FRIZQT__.TTF]]
137 SML_MT_font["Morpheus"] = [[Fonts\MORPHEUS.TTF]]
138 SML_MT_font["Skurri"] = [[Fonts\SKURRI.TTF]]
139 --
140 lib.DefaultMedia.font = "Friz Quadrata TT"
141 --
142 end
143
144 -- STATUSBAR
145 if not lib.MediaTable.statusbar then lib.MediaTable.statusbar = {} end
146 lib.MediaTable.statusbar["Blizzard"] = [[Interface\TargetingFrame\UI-StatusBar]]
147 lib.MediaTable.statusbar["Blizzard Character Skills Bar"] = [[Interface\PaperDollInfoFrame\UI-Character-Skills-Bar]]
148 lib.DefaultMedia.statusbar = "Blizzard"
149
150 -- SOUND
151 if not lib.MediaTable.sound then lib.MediaTable.sound = {} end
152 lib.MediaTable.sound["None"] = [[Interface\Quiet.ogg]] -- Relies on the fact that PlaySound[File] doesn't error on non-existing input.
153 lib.DefaultMedia.sound = "None"
154
155 local function rebuildMediaList(mediatype)
156 local mtable = mediaTable[mediatype]
157 if not mtable then return end
158 if not mediaList[mediatype] then mediaList[mediatype] = {} end
159 local mlist = mediaList[mediatype]
160 -- list can only get larger, so simply overwrite it
161 local i = 0
162 for k in pairs(mtable) do
163 i = i + 1
164 mlist[i] = k
165 end
166 table_sort(mlist)
167 end
168
169 function lib:Register(mediatype, key, data, langmask)
170 if type(mediatype) ~= "string" then
171 error(MAJOR..":Register(mediatype, key, data, langmask) - mediatype must be string, got "..type(mediatype))
172 end
173 if type(key) ~= "string" then
174 error(MAJOR..":Register(mediatype, key, data, langmask) - key must be string, got "..type(key))
175 end
176 mediatype = mediatype:lower()
177 if mediatype == lib.MediaType.FONT and ((langmask and band(langmask, LOCALE_MASK) == 0) or not (langmask or locale_is_western)) then return false end
178 if not mediaTable[mediatype] then mediaTable[mediatype] = {} end
179 local mtable = mediaTable[mediatype]
180 if mtable[key] then return false end
181
182 mtable[key] = data
183 rebuildMediaList(mediatype)
184 self.callbacks:Fire("LibSharedMedia_Registered", mediatype, key)
185 return true
186 end
187
188 function lib:Fetch(mediatype, key, noDefault)
189 local mtt = mediaTable[mediatype]
190 local overridekey = overrideMedia[mediatype]
191 local result = mtt and ((overridekey and mtt[overridekey] or mtt[key]) or (not noDefault and defaultMedia[mediatype] and mtt[defaultMedia[mediatype]])) or nil
192 return result ~= "" and result or nil
193 end
194
195 function lib:IsValid(mediatype, key)
196 return mediaTable[mediatype] and (not key or mediaTable[mediatype][key]) and true or false
197 end
198
199 function lib:HashTable(mediatype)
200 return mediaTable[mediatype]
201 end
202
203 function lib:List(mediatype)
204 if not mediaTable[mediatype] then
205 return nil
206 end
207 if not mediaList[mediatype] then
208 rebuildMediaList(mediatype)
209 end
210 return mediaList[mediatype]
211 end
212
213 function lib:GetGlobal(mediatype)
214 return overrideMedia[mediatype]
215 end
216
217 function lib:SetGlobal(mediatype, key)
218 if not mediaTable[mediatype] then
219 return false
220 end
221 overrideMedia[mediatype] = (key and mediaTable[mediatype][key]) and key or nil
222 self.callbacks:Fire("LibSharedMedia_SetGlobal", mediatype, overrideMedia[mediatype])
223 return true
224 end
225
226 function lib:GetDefault(mediatype)
227 return defaultMedia[mediatype]
228 end
229
230 function lib:SetDefault(mediatype, key)
231 if mediaTable[mediatype] and mediaTable[mediatype][key] and not defaultMedia[mediatype] then
232 defaultMedia[mediatype] = key
233 return true
234 else
235 return false
236 end
237 end