Mercurial > wow > buffalo2
comparison ObjectiveTracker/ObjectiveStyle.lua @ 23:e837384ac363
Separating objective tracker module
| author | Nenue |
|---|---|
| date | Sun, 10 Apr 2016 04:35:32 -0400 |
| parents | ObjectiveStyle.lua@d5ee940de273 |
| children | 07ef62fe201f |
comparison
equal
deleted
inserted
replaced
| 22:9b3fa734abff | 23:e837384ac363 |
|---|---|
| 1 local B = select(2,...).frame | |
| 2 local mod = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame') | |
| 3 local print = B.print('SetStyle') | |
| 4 ------------------------------------------------------------- | |
| 5 --- Deals with swapping between different color palettes | |
| 6 --- | |
| 7 | |
| 8 local titleFont, textFont = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Regular.ttf]] | |
| 9 local titleSize, textSize = 16, 15 | |
| 10 local titleOutline, textOutline = "OUTLINE", "OUTLINE" | |
| 11 local titleSpacing, textSpacing = 3, 3 | |
| 12 local unpack, type, pairs, tconcat = unpack, type, pairs, table.concat | |
| 13 local wrapperHeadFont, wrapperHeadSize, wrapperHeadOutline = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], 16, 'NONE' | |
| 14 local headerFont, headerSize = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], 24 | |
| 15 local headerOutline, headerSpacing = 'OUTLINE', 2 | |
| 16 | |
| 17 | |
| 18 mod.defaults.Style = { | |
| 19 Format = { | |
| 20 Frame = { | |
| 21 Width = 270, | |
| 22 }, | |
| 23 title = { | |
| 24 Indent = 0, | |
| 25 Spacing = 0, | |
| 26 }, | |
| 27 status = { | |
| 28 Indent = 5, | |
| 29 Spacing = 0, | |
| 30 } | |
| 31 }, | |
| 32 FontBank = { | |
| 33 ['Normal'] = _G.VeneerCriteriaFontNormal, | |
| 34 ['Progress'] = _G.VeneerCriteriaFontProgress, | |
| 35 ['Complete'] = _G.VeneerCriteriaFontComplete, | |
| 36 ['Failed'] = _G.VeneerCriteriaFontFailed, | |
| 37 }, | |
| 38 Normal = { | |
| 39 title = { | |
| 40 TextColor = {1, 1, 1, 1}, | |
| 41 Width = 270, | |
| 42 Spacing = 0, | |
| 43 Indent = 2, | |
| 44 }, | |
| 45 titlebg = { | |
| 46 }, | |
| 47 status = { | |
| 48 Width = 270, | |
| 49 Spacing = 0, | |
| 50 }, | |
| 51 statusbg = { | |
| 52 }, | |
| 53 Frame = { | |
| 54 } | |
| 55 }, | |
| 56 Tracker = { | |
| 57 Normal = { | |
| 58 title = { | |
| 59 Font = {headerFont, headerSize, headerOutline}, Spacing = headerSpacing, | |
| 60 Indent = 2, | |
| 61 TextColor = {1, .9, .2, 1}, | |
| 62 }, | |
| 63 titlebg = { | |
| 64 Gradient = {'VERTICAL', MinColor = {0,0,0,0.25}, MaxColor = {0,0,0,.15}}, | |
| 65 } | |
| 66 } | |
| 67 }, | |
| 68 TrackerBlock = { | |
| 69 Normal = { | |
| 70 titlebg = { | |
| 71 Indent = 2, | |
| 72 Gradient = { 'HORIZONTAL', MinColor = {0.7, 0, 0.9, 1}, MaxColor = {.7, 0, 0.9, .1}}, | |
| 73 }, | |
| 74 title = { | |
| 75 TextColor = {1,1,1,1}, | |
| 76 Font = {titleFont, titleSize, titleOutline}, | |
| 77 Spacing = titleSpacing, | |
| 78 }, | |
| 79 status = { | |
| 80 TextColor = {1,1,1,1}, | |
| 81 Font = {textFont, textSize, textOutline}, | |
| 82 Spacing = textSpacing, | |
| 83 }, | |
| 84 statusbg = { | |
| 85 Gradient = { 'HORIZONTAL', MinColor = {0.2, .4, 1, 1}, MaxColor = {.7, 0, 0.9, .1}}, | |
| 86 } | |
| 87 }, | |
| 88 Daily = { | |
| 89 titlebg = { | |
| 90 Gradient = {'HORIZONTAL', MinColor = {0, .4, 1, 1}, MaxColor = {0, 0.4, 1, .1}, }, | |
| 91 }, | |
| 92 statusbg = { | |
| 93 Gradient = {'HORIZONTAL', MinColor = {0, .4, 1, 1}, MaxColor = {0, 0.35, .90, .1}, }, | |
| 94 }, | |
| 95 title = { | |
| 96 TextColor = {0.7,1,1,1}, | |
| 97 Font = {titleFont, titleSize, titleOutline}, | |
| 98 Spacing = titleSpacing, | |
| 99 }, | |
| 100 status = { | |
| 101 TextColor = {1,1,1,1}, | |
| 102 Font = {textFont, textSize, textOutline}, | |
| 103 Spacing = textSpacing, | |
| 104 }, | |
| 105 }, | |
| 106 Super = { | |
| 107 title = { | |
| 108 TextColor = {1,1,1,1}, | |
| 109 Font = {titleFont, titleSize, titleOutline}, | |
| 110 Spacing = titleSpacing, BackgroundFullWidth = true | |
| 111 }, | |
| 112 titlebg = { | |
| 113 Gradient = { 'HORIZONTAL', MinColor = {0, .7, .6, 1}, MaxColor = {0, .7, .6, 1}}, | |
| 114 }, | |
| 115 status = { | |
| 116 TextColor = {1,1,1,1}, | |
| 117 Font = {textFont, textSize, textOutline}, | |
| 118 Spacing = textSpacing, | |
| 119 }, | |
| 120 statusbg = { | |
| 121 Gradient = { 'HORIZONTAL', MinColor = {0, .7, .6, 1}, MaxColor = {0, .7, .6, 1} }, | |
| 122 }, | |
| 123 }, | |
| 124 MouseDown = { | |
| 125 title = { | |
| 126 Font = {titleFont, titleSize, titleOutline}, | |
| 127 Spacing = titleSpacing, | |
| 128 }, | |
| 129 titlebg = { | |
| 130 Gradient = {'HORIZONTAL', MinColor = {0.2, .4, 1, 1}, MaxColor = {0.2, .4, 1, 1}, }, | |
| 131 }, | |
| 132 status = { | |
| 133 Font = {textFont, textSize, textOutline}, | |
| 134 Spacing = textSpacing, | |
| 135 }, | |
| 136 statusbg = { | |
| 137 Gradient = {'HORIZONTAL', MinColor = {0.2, .4, 1, 1}, MaxColor = {0.2, .4, 1, 1}, }, | |
| 138 } | |
| 139 }, | |
| 140 Complete = { | |
| 141 title = { | |
| 142 TextColor = {1,1,1,1}, | |
| 143 Font = {titleFont, titleSize, titleOutline}, Spacing = titleSpacing, | |
| 144 }, | |
| 145 titlebg = { | |
| 146 Gradient = {'HORIZONTAL', MinColor = {0, 1, 0, 1}, MaxColor = {0, 1, 0, 1}, }, | |
| 147 }, | |
| 148 status = { | |
| 149 TextColor = {1,1,1,1}, | |
| 150 Font = {textFont, textSize, textOutline}, Spacing = textSpacing, | |
| 151 }, | |
| 152 statusbg = { | |
| 153 Gradient = {'HORIZONTAL', MinColor = {0, 1, 0, 1}, MaxColor = {0, 1, 0, 1}, }, | |
| 154 } | |
| 155 }, | |
| 156 AutoQuest = { | |
| 157 Normal = { | |
| 158 titlebg = { | |
| 159 Indent = 2, | |
| 160 Gradient = {'HORIZONTAL', MinColor = {0.2, .4, 1, 1}, MaxColor = {.7, 0, 0.9, 1}}, | |
| 161 }, | |
| 162 title = { | |
| 163 TextColor = {1,1,1,1}, | |
| 164 Font = {titleFont, titleSize, titleOutline}, | |
| 165 Spacing = titleSpacing, | |
| 166 }, | |
| 167 status = { | |
| 168 TextColor = {0,1,0,1}, | |
| 169 Font = {textFont, textSize, textOutline}, | |
| 170 Spacing = textSpacing, | |
| 171 }, | |
| 172 statusbg = { | |
| 173 Gradient = {'HORIZONTAL', MinColor = {0.2, .4, 1, 1}, MaxColor = {.7, 0, 0.9, 1}}, | |
| 174 } | |
| 175 }, | |
| 176 }, | |
| 177 Cheevs = { | |
| 178 Normal = { | |
| 179 | |
| 180 title = { | |
| 181 Font = {titleFont, titleSize, titleOutline}, | |
| 182 Spacing = titleSpacing, | |
| 183 }, | |
| 184 titlebg = { | |
| 185 Gradient = {'HORIZONTAL', MinColor = {0.2, .4, 1, 1}, MaxColor = {.7, 0, 0.9, 1}}, | |
| 186 | |
| 187 }, | |
| 188 status = { | |
| 189 Font = {textFont, textSize, textOutline}, | |
| 190 Spacing = textSpacing, | |
| 191 }, | |
| 192 statusbg = { | |
| 193 Gradient = {'HORIZONTAL', MinColor = {0.2, .4, 1, 1}, MaxColor = {.7, 0, 0.9, 1}}, | |
| 194 }, | |
| 195 }, | |
| 196 Complete = { | |
| 197 title = { | |
| 198 Font = {titleFont, titleSize, titleOutline}, | |
| 199 Spacing = titleSpacing, | |
| 200 }, | |
| 201 titlebg = { | |
| 202 Gradient = {'HORIZONTAL', MinColor = {0.2, .4, 1, 1}, MaxColor = {.7, 0, 0.9, 1}}, | |
| 203 }, | |
| 204 status = { | |
| 205 Font = {textFont, textSize, textOutline}, | |
| 206 Spacing = textSpacing, | |
| 207 }, | |
| 208 statusbg = { | |
| 209 Gradient = {'HORIZONTAL', MinColor = {0.2, .4, 1, 1}, MaxColor = {.7, 0, 0.9, 1}}, | |
| 210 }, | |
| 211 }, | |
| 212 } | |
| 213 } | |
| 214 } | |
| 215 | |
| 216 local style_cache_func = {} | |
| 217 local block_vars = { | |
| 218 ['titleSize'] = {'titleWidth', 'titleHeight'}, | |
| 219 ['FrameSize'] = {'width', 'height'} | |
| 220 } | |
| 221 local attrib_vars = { | |
| 222 ['Font'] = {'height'}, | |
| 223 } | |
| 224 | |
| 225 mod.BlockStyleCache = {} | |
| 226 local style_cache = mod.BlockStyleCache | |
| 227 mod.regions = {} | |
| 228 mod.regionStyles = {} | |
| 229 mod.SetBlockStyle = function(frame, frameType, ...) | |
| 230 -- var names intended to reflect argument order | |
| 231 print('|cFFFFFF00'..frame:GetName()..'|r', frameType, ...) | |
| 232 --@debug@ | |
| 233 local c = mod.defaults.Normal | |
| 234 local style_list = {... } | |
| 235 local styleName = frameType .. '-' .. table.concat(style_list,'') | |
| 236 local previousClass = {mod.Conf.Style[frameType] } | |
| 237 local previousClassString = {'frame' } | |
| 238 local parentName | |
| 239 | |
| 240 if not style_cache[styleName] then | |
| 241 local style = {} | |
| 242 | |
| 243 --[[ | |
| 244 if mod.defaults.Style[frameType] then | |
| 245 print(' setting style class |cFF00FFFF'..frameType) | |
| 246 else | |
| 247 print(' resorting to class Normal (missing |cFFFF8800'.. frameType..'|r)') | |
| 248 end | |
| 249 --]] | |
| 250 local normal = mod.defaults.Style.Normal | |
| 251 local root = mod.defaults.Style[frameType] or normal | |
| 252 for i, className in ipairs(style_list) do | |
| 253 print('|cFF00FF00'..i..'|r', className) | |
| 254 local class = normal | |
| 255 local childClass | |
| 256 if previousClass then | |
| 257 for i = #previousClass, 1, -1 do | |
| 258 print('checking if '..className..' child of '.. previousClassString[i]) | |
| 259 if previousClass[i][className] then | |
| 260 print(' it is!') | |
| 261 childClass = previousClass[i][className] | |
| 262 parentName = previousClassString[i] | |
| 263 break | |
| 264 end | |
| 265 end | |
| 266 end | |
| 267 if childClass then | |
| 268 class = childClass | |
| 269 print(' ChildClass '..parentName..'.|cFFFF0088'.. className .. '|r') | |
| 270 elseif root[className] then | |
| 271 class = root[className] | |
| 272 print(' SubClass |cFF0088FF'.. className .. '|r') | |
| 273 elseif normal[className] then | |
| 274 class = normal[className] | |
| 275 print(' SubClass Normal.|cFFFF0088'..className..'|r') | |
| 276 else | |
| 277 --print(' SubClass not found '..className..'') | |
| 278 end | |
| 279 tinsert(previousClass, class) | |
| 280 tinsert(previousClassString, className) | |
| 281 | |
| 282 for elementName, element in pairs(class) do | |
| 283 if not elementName:match('^%u') then | |
| 284 --print(' scanning Element |cFF8800FF'.. elementName ..'|r') | |
| 285 if not style[elementName] then | |
| 286 style[elementName] = {} | |
| 287 end | |
| 288 for key, value in pairs(element) do | |
| 289 if mod.SetBlockAttribute[key] then | |
| 290 --print(' |cFF00FF00'..elementName..'|r.|cFF00FFFF'..key..' =', (type(value) == 'table' and ('{'..table.concat(value,', ')..'}') or tostring(value))) | |
| 291 style[elementName][key] = value | |
| 292 end | |
| 293 | |
| 294 end | |
| 295 end | |
| 296 | |
| 297 end | |
| 298 end | |
| 299 | |
| 300 for k, elements in pairs(mod.defaults.Style.Normal) do | |
| 301 if not style[k] and type(elements) ~= 'table' then | |
| 302 style[k] = elements | |
| 303 end | |
| 304 end | |
| 305 | |
| 306 | |
| 307 --[[print('result for: ', frame:GetName()) | |
| 308 for k,v in pairs(style) do | |
| 309 if type(v) == 'table' and not k:match('^%u') then | |
| 310 for kk, vv in pairs(v) do | |
| 311 --print(' |cFFFFFF00'..k..'|r.|cFF00FF00'..kk..'|r =', (type(vv) == 'table' and ('{'..table.concat(vv,', ')..'}') or tostring(vv))) | |
| 312 end | |
| 313 else | |
| 314 --print(' |cFFFFFFFF' .. k ..'|r =', tostring(v)) | |
| 315 end | |
| 316 end | |
| 317 --]] | |
| 318 print('saving |cFFFFFF00'..styleName) | |
| 319 style_cache[styleName] = style | |
| 320 else | |
| 321 | |
| 322 print('using |cFFFF00FF'..styleName) | |
| 323 end | |
| 324 | |
| 325 local style = style_cache[styleName] | |
| 326 | |
| 327 if not style_cache_func[styleName] then | |
| 328 local code = | |
| 329 "return function (frame)\n".. | |
| 330 " local func = Veneer.ObjectiveTracker.SetBlockAttribute\n".. | |
| 331 " local cache = Veneer.ObjectiveTracker.BlockStyleCache" | |
| 332 --.. " print('CacheFunc', '|cFFFFFF00SET|r "..styleName.." |cFFFFFF00ON|r', frame:GetName()) " | |
| 333 | |
| 334 for elementName, styleset in pairs(style) do | |
| 335 code = code .. | |
| 336 "\n if frame['"..elementName.."'] then" | |
| 337 | |
| 338 for attributeName, value in pairs(styleset) do | |
| 339 if mod.SetBlockAttribute[attributeName] then | |
| 340 --print(' add function '..elementName..':'.. attributeName ..'(', (type(value) == 'table' and ('{'..table.concat(value,', ')..'}') or tostring(value)), ')') | |
| 341 | |
| 342 | |
| 343 --mod.SetBlockAttribute[attributeName](region, value) | |
| 344 code = code | |
| 345 --.. "\n print('CacheFunc', ' applying', '|cFF00FFFF" .. attributeName .. "|r to', '|cFF0088FF"..elementName.."|r', cache['"..styleName.."']['"..elementName.."']['".. attributeName .."'])" | |
| 346 .. "\n\n func['" .. attributeName .. "'](frame['"..elementName.."'],".. | |
| 347 " cache['"..styleName.."']['"..elementName.."']['".. attributeName .."'])" | |
| 348 | |
| 349 --- Set any frame.blah variables used in Updates | |
| 350 if block_vars[elementName .. attributeName] then | |
| 351 --print('|cFF008800BVar|r', elementName..attributeName) | |
| 352 for i, blockKey in ipairs(block_vars[elementName .. attributeName]) do | |
| 353 --print(' assigning |cFF008800'..blockKey..'|r') | |
| 354 frame[blockKey] = (type(value) == 'table') and value[i] or value | |
| 355 end | |
| 356 end | |
| 357 | |
| 358 end | |
| 359 end | |
| 360 code = code .. | |
| 361 "\n else".. | |
| 362 --"\n print('CacheFunc', ' |cFFFF4400missing', frame:GetName()..'."..elementName.."')".. | |
| 363 "\n end" | |
| 364 end | |
| 365 code = code .. "\nend" | |
| 366 local result = assert(loadstring(code)) | |
| 367 --print('storing style func', styleName, result()) | |
| 368 style_cache_func[styleName] = result() | |
| 369 | |
| 370 end | |
| 371 style_cache_func[styleName](frame) | |
| 372 | |
| 373 --- Hardcoding the sizing vars for sanity | |
| 374 local defaultWidth = mod.Conf.Wrapper.Width | |
| 375 local normalSettings = mod.defaults.Style.Format | |
| 376 frame.width = defaultWidth | |
| 377 frame.statusWidth = defaultWidth - normalSettings.status.Indent | |
| 378 frame.titleWidth = defaultWidth - normalSettings.title.Indent | |
| 379 frame.attachmentHeight = frame.attachmentHeight or 0 | |
| 380 | |
| 381 if frame.title then | |
| 382 frame.titleHeight = frame.title and frame.title:GetStringHeight() or 0 | |
| 383 if frame.titleHeight > 0 then | |
| 384 print('add spacing to', frame.titleHeight) | |
| 385 frame.titleHeight = frame.titleHeight + (frame.title.spacing or 0)*2 | |
| 386 end | |
| 387 | |
| 388 frame.title.spacing = frame.title.spacing or frame.title:GetSpacing() | |
| 389 frame.title:SetPoint('LEFT', frame, 'LEFT', normalSettings.title.Indent) | |
| 390 frame.title:SetPoint('TOP', frame, 'TOP', 0, -frame.title.spacing) | |
| 391 frame.title:SetWidth(frame.width) | |
| 392 if frame.titlebg then | |
| 393 frame.titlebg:SetHeight(frame.titleHeight) | |
| 394 frame.titlebg:SetWidth(frame.width) | |
| 395 end | |
| 396 print(' titleHeight', frame.titleHeight, 'indent', normalSettings.title.Indent, 'spacing', frame.title.spacing) | |
| 397 print(' -- text:', frame.title:GetSize()) | |
| 398 print(' -- bg:', frame.titlebg:GetSize()) | |
| 399 | |
| 400 else | |
| 401 frame.titleHeight = 0 | |
| 402 end | |
| 403 | |
| 404 | |
| 405 if frame.status and (frame.status:GetText() or frame.attachmentHeight > 0) then | |
| 406 frame.statusHeight = frame.status and frame.status:GetStringHeight() or 0 | |
| 407 if frame.statusHeight > 0 then | |
| 408 frame.statusHeight = frame.statusHeight + (frame.status.spacing or 0)*2 | |
| 409 end | |
| 410 | |
| 411 frame.status.spacing = frame.status.spacing or frame.status:GetSpacing() | |
| 412 | |
| 413 frame.status:SetWidth(frame.width) | |
| 414 frame.status:SetPoint('LEFT', frame, 'LEFT', normalSettings.status.Indent, 0) | |
| 415 frame.status:SetPoint('TOP', frame.titlebg, 'BOTTOM', 0, 0) | |
| 416 --frame.status:SetHeight(frame.statusHeight) | |
| 417 if frame.statusbg then | |
| 418 | |
| 419 --frame.statusbg:SetHeight(frame.statusHeight + (frame.attachmentHeight or 0)) | |
| 420 --frame.statusbg:SetPoint('BOTTOM', frame, 'BOTTOM', 0, 0) | |
| 421 frame.statusbg:SetWidth(frame.width) | |
| 422 end | |
| 423 print(' status tHeight', frame.statusHeight, 'indent', normalSettings.status.Indent, 'spacing', frame.status.spacing) | |
| 424 else | |
| 425 if frame.status then | |
| 426 frame.status:Hide() | |
| 427 end | |
| 428 if frame.statusbg then | |
| 429 frame.statusbg:Hide() | |
| 430 end | |
| 431 frame.statusHeight = 0 | |
| 432 end | |
| 433 | |
| 434 frame.height = frame.titleHeight + frame.statusHeight + (frame.attachmentHeight or 0) | |
| 435 frame:SetSize(frame.width, frame.height) | |
| 436 print(' |cFF0088FFsizing frame', frame.width, frame.height) | |
| 437 end | |
| 438 | |
| 439 --- Argument containers | |
| 440 local o -- text flag | |
| 441 local a1, a2, a3, a4, b1, b2, b3, b4 -- color1, color2 | |
| 442 local f1, f2, f3 -- font | |
| 443 local w1, w2 -- size | |
| 444 local p1, p2, p3, x, y -- path/point args | |
| 445 mod.SetBlockAttribute = {} | |
| 446 local sb = mod.SetBlockAttribute | |
| 447 local print = B.print('Attribute') | |
| 448 sb.Gradient = function(region, value) | |
| 449 print('|cFF8844FFGradient|r', region:GetName(), unpack(value)) | |
| 450 o = value[1] | |
| 451 a1, a2, a3, a4 = unpack(value.MinColor) | |
| 452 b1, b2, b3, b4 = unpack(value.MaxColor) | |
| 453 region:SetVertexColor(1,1,1) | |
| 454 region:SetTexture(1,1,1,1) | |
| 455 region:SetGradientAlpha(o, a1, a2, a3, a4, b1, b2, b3, b4) | |
| 456 end | |
| 457 | |
| 458 sb.Background = function(region, value) | |
| 459 print('|cFF0088FFBackground|r', unpack(value)) | |
| 460 region:SetVertexColor(1,1,1) -- reset | |
| 461 region:SetTexture(unpack(value)) | |
| 462 end | |
| 463 sb.BackgroundComplex = function (region, value) | |
| 464 local left, tile, right = value.Left, value.Tile, value.Right | |
| 465 | |
| 466 end | |
| 467 sb.Font = function(region, value) | |
| 468 f1, f2, f3 = unpack(value) | |
| 469 print('|cFFFFFF00Font|r', f1, f2, f3) | |
| 470 region:SetFont(f1, f2, f3) | |
| 471 end | |
| 472 | |
| 473 sb.Spacing = function(region, value) | |
| 474 print('FontSpacing', region:GetName(), value) | |
| 475 region:SetSpacing(value) | |
| 476 region.spacing = value | |
| 477 end | |
| 478 | |
| 479 sb.TextColor = function(region, value) | |
| 480 a1, a2, a3, a4 = unpack(value) | |
| 481 print('TextColor', a1, a2, a3, a4) | |
| 482 region:SetTextColor(a1, a2, a3, a4) | |
| 483 end | |
| 484 sb.Texture = function(region, value) | |
| 485 | |
| 486 p1, a1, a2, a3, a4 = unpack(value) | |
| 487 print('Texture', p1, a1, a2, a3, a4) | |
| 488 region:SetTexture(p1) | |
| 489 if a1 then | |
| 490 region:SetTexCoord(a1, a2, a3, a4) | |
| 491 end | |
| 492 end | |
| 493 sb.Width = function(region, value) | |
| 494 w1 = value | |
| 495 region:SetWidth(w1) | |
| 496 end | |
| 497 | |
| 498 sb.Height = function(region, value) | |
| 499 w2 = value | |
| 500 region:SetHeight(w2) | |
| 501 end | |
| 502 sb.Size = function(region, value) | |
| 503 w1, w2 = unpack(value) | |
| 504 region:SetSize(w1, w2) | |
| 505 end | |
| 506 |
