Mercurial > wow > reaction
comparison Overlay.lua @ 99:f200bcb193d6
- Added corner icon image
- removed edge drag handles. Changed corner drag semantics (re-grid, shift:resize, alt:spacing)
- updated tooltip displays
- fixed bug with anchoring off the edge of a target
| author | Flick <flickerstreak@gmail.com> |
|---|---|
| date | Fri, 24 Oct 2008 23:23:42 +0000 |
| parents | a44173c7a82c |
| children | 890e4c4ab143 |
comparison
equal
deleted
inserted
replaced
| 98:a44173c7a82c | 99:f200bcb193d6 |
|---|---|
| 1 local ReAction = ReAction | 1 local ReAction = ReAction |
| 2 local L = ReAction.L | 2 local L = ReAction.L |
| 3 local CreateFrame = CreateFrame | 3 local CreateFrame = CreateFrame |
| 4 local InCombatLockdown = InCombatLockdown | 4 local InCombatLockdown = InCombatLockdown |
| 5 local floor = math.floor | 5 local floor = math.floor |
| 6 local min = math.min | 6 local min = math.min |
| 7 local format = string.format | 7 local format = string.format |
| 8 local GameTooltip = GameTooltip | 8 local GameTooltip = GameTooltip |
| 9 local Bar = ReAction.Bar | 9 local Bar = ReAction.Bar |
| 10 local GetSize = Bar.GetSize | 10 local GetSize = Bar.GetSize |
| 11 local GetButtonSize = Bar.GetButtonSize | 11 local GetButtonSize = Bar.GetButtonSize |
| 12 local GetButtonGrid = Bar.GetButtonGrid | 12 local GetButtonGrid = Bar.GetButtonGrid |
| 13 local SetSize = Bar.SetSize | 13 local SetSize = Bar.SetSize |
| 14 local SetAnchor = Bar.SetAnchor | 14 local SetAnchor = Bar.SetAnchor |
| 15 local SetButtonSize = Bar.SetButtonSize | 15 local SetButtonSize = Bar.SetButtonSize |
| 16 local SetButtonGrid = Bar.SetButtonGrid | 16 local SetButtonGrid = Bar.SetButtonGrid |
| 17 local ApplyAnchor = Bar.ApplyAnchor | 17 local ApplyAnchor = Bar.ApplyAnchor |
| 18 local GameTooltipTextRight1 = GameTooltipTextRight1 | |
| 19 local GameTooltipTextRight2 = GameTooltipTextRight2 | |
| 20 local GameTooltipTextRight3 = GameTooltipTextRight3 | |
| 18 | 21 |
| 19 local KB = LibStub("LibKeyBound-1.0") | 22 local KB = LibStub("LibKeyBound-1.0") |
| 20 | 23 |
| 21 ReAction:UpdateRevision("$Revision$") | 24 ReAction:UpdateRevision("$Revision$") |
| 22 | 25 |
| 162 BOTTOM = function(f) return f:GetLeft(), f:GetRight() end, | 165 BOTTOM = function(f) return f:GetLeft(), f:GetRight() end, |
| 163 LEFT = function(f) return f:GetBottom(), f:GetTop() end | 166 LEFT = function(f) return f:GetBottom(), f:GetTop() end |
| 164 } | 167 } |
| 165 edgeBoundsFuncs.TOP = edgeBoundsFuncs.BOTTOM | 168 edgeBoundsFuncs.TOP = edgeBoundsFuncs.BOTTOM |
| 166 edgeBoundsFuncs.RIGHT = edgeBoundsFuncs.LEFT | 169 edgeBoundsFuncs.RIGHT = edgeBoundsFuncs.LEFT |
| 167 | 170 local cornerTexCoords = { |
| 171 -- ULx, ULy, LLx, LLy, URx, URy, LRx, LRy | |
| 172 TOPLEFT = { 1, 1, 1, 0, 0, 1, 0, 0 }, | |
| 173 TOPRIGHT = { 1, 0, 0, 0, 1, 1, 0, 1 }, | |
| 174 BOTTOMLEFT = { 0, 1, 1, 1, 0, 0, 1, 0 }, | |
| 175 BOTTOMRIGHT = { 0, 0, 0, 1, 1, 0, 1, 1 }, | |
| 176 } | |
| 168 | 177 |
| 169 -- Returns absolute coordinates x,y of the named point 'p' of frame 'f' | 178 -- Returns absolute coordinates x,y of the named point 'p' of frame 'f' |
| 170 local function GetPointCoords( f, p ) | 179 local function GetPointCoords( f, p ) |
| 171 local x, y = pointCoordFuncs[p](f) | 180 local x, y = pointCoordFuncs[p](f) |
| 172 if not(x and y) then | 181 if not(x and y) then |
| 292 local coordFunc = p and pointCoordFuncs[p] | 301 local coordFunc = p and pointCoordFuncs[p] |
| 293 if not insideOffsetFunc or not coordFunc then | 302 if not insideOffsetFunc or not coordFunc then |
| 294 return | 303 return |
| 295 end | 304 end |
| 296 | 305 |
| 297 local sx, sy = insidePointOffsetFuncs[p](xOff or 0, yOff or 0) | 306 local sx, sy = insideOffsetFunc(xOff or 0, yOff or 0) |
| 298 local xx, yy = pointCoordFuncs[p](f1) | 307 local xx, yy = coordFunc(f1) |
| 299 if xx and yy then | 308 if xx and yy then |
| 300 if math.abs(x) <= rx then | 309 if math.abs(x) <= rx then |
| 301 x = sx | 310 if math.abs(y) <= ry then |
| 302 s = true | 311 x = sx |
| 303 end | 312 y = sy |
| 304 if math.abs(y) <= ry then | 313 s = true |
| 314 elseif CheckEdgeOverlap(f1,o,"LEFT") then | |
| 315 x = sx | |
| 316 s = true | |
| 317 end | |
| 318 elseif math.abs(y) <= ry and CheckEdgeOverlap(f1,o,"TOP") then | |
| 305 y = sy | 319 y = sy |
| 306 s = true | 320 s = true |
| 307 end | 321 end |
| 308 elseif xx then | 322 elseif xx then |
| 309 if math.abs(x) <= rx then | 323 if math.abs(x) <= rx then |
| 321 x = sx | 335 x = sx |
| 322 end | 336 end |
| 323 end | 337 end |
| 324 end | 338 end |
| 325 | 339 |
| 340 -- correct for some Lua oddities with doubles | |
| 326 if x == -0 then x = 0 end | 341 if x == -0 then x = 0 end |
| 327 if y == -0 then y = 0 end | 342 if y == -0 then y = 0 end |
| 328 | 343 |
| 329 if s then | 344 if s then |
| 330 return o, p, rp, math.floor(x), math.floor(y) | 345 return o, p, rp, math.floor(x), math.floor(y) |
| 460 ClampToButtons(bar) | 475 ClampToButtons(bar) |
| 461 --ApplyAnchor(bar) | 476 --ApplyAnchor(bar) |
| 462 ReAction:RefreshOptions() | 477 ReAction:RefreshOptions() |
| 463 end | 478 end |
| 464 | 479 |
| 465 -- edge drag handles | 480 local function CornerUpdate() |
| 466 for _, point in pairs({"LEFT","TOP","RIGHT","BOTTOM"}) do | 481 local bw, bh = GetButtonSize(bar) |
| 467 local edge = CreateFrame("Frame",nil,overlay) | 482 local r, c, s = GetButtonGrid(bar) |
| 468 edge:EnableMouse(true) | 483 if IsShiftKeyDown() then |
| 469 edge:SetWidth(8) | 484 f:SetMinResize( (s+12)*c+1, (s+12)*r+1 ) |
| 470 edge:SetHeight(8) | 485 RecomputeButtonSize(bar) |
| 471 if point == "TOP" or point == "BOTTOM" then | 486 elseif IsAltKeyDown() then |
| 472 edge:SetPoint(point.."LEFT") | 487 f:SetMinResize( bw*c, bh*r ) |
| 473 edge:SetPoint(point.."RIGHT") | 488 RecomputeButtonSpacing(bar) |
| 474 else | 489 else |
| 475 edge:SetPoint("TOP"..point) | 490 f:SetMinResize( bw+s+1, bh+s+1 ) |
| 476 edge:SetPoint("BOTTOM"..point) | 491 RecomputeGrid(bar) |
| 477 end | 492 end |
| 478 local tex = edge:CreateTexture(nil,"HIGHLIGHT") | 493 local size = (bw == bh) and tostring(bw) or format("%d x %d",bw,bh) |
| 479 tex:SetTexture(1.0,0.82,0,0.7) | 494 GameTooltipTextRight1:SetText(format("%d x %d",r,c)) |
| 495 GameTooltipTextRight2:SetText(size) | |
| 496 GameTooltipTextRight3:SetText(tostring(s)) | |
| 497 end | |
| 498 | |
| 499 -- corner drag handles | |
| 500 for _, point in pairs({"BOTTOMLEFT","TOPLEFT","BOTTOMRIGHT","TOPRIGHT"}) do | |
| 501 local corner = CreateFrame("Frame",nil,overlay) | |
| 502 corner:EnableMouse(true) | |
| 503 corner:SetWidth(16) | |
| 504 corner:SetHeight(16) | |
| 505 corner:SetPoint(point) | |
| 506 | |
| 507 local tex = corner:CreateTexture(nil,"HIGHLIGHT") | |
| 508 tex:SetTexture("Interface\\AddOns\\ReAction\\img\\corner") | |
| 509 tex:SetTexCoord(unpack(cornerTexCoords[point])) | |
| 480 tex:SetBlendMode("ADD") | 510 tex:SetBlendMode("ADD") |
| 511 tex:SetAlpha(0.6) | |
| 481 tex:SetAllPoints() | 512 tex:SetAllPoints() |
| 482 edge:RegisterForDrag("LeftButton") | 513 |
| 483 edge:SetScript("OnMouseDown", | 514 --corner:RegisterForDrag("LeftButton") |
| 484 function() | 515 |
| 485 local bw, bh = GetButtonSize(bar) | |
| 486 local r, c, s = GetButtonGrid(bar) | |
| 487 f:SetMinResize( bw+s+1, bh+s+1 ) | |
| 488 f:StartSizing(point) | |
| 489 f:SetScript("OnUpdate", | |
| 490 function() | |
| 491 RecomputeGrid(bar) | |
| 492 end | |
| 493 ) | |
| 494 end | |
| 495 ) | |
| 496 edge:SetScript("OnMouseUp", StopResize) | |
| 497 edge:SetScript("OnEnter", | |
| 498 function() | |
| 499 GameTooltip:SetOwner(f, "ANCHOR_"..point) | |
| 500 GameTooltip:AddLine(L["Drag to add/remove buttons"]) | |
| 501 GameTooltip:Show() | |
| 502 end | |
| 503 ) | |
| 504 edge:SetScript("OnLeave", HideGameTooltip) | |
| 505 edge:Show() | |
| 506 end | |
| 507 | |
| 508 -- corner drag handles, nested in an anonymous frame so that they are on top | |
| 509 local foo = CreateFrame("Frame",nil,overlay) | |
| 510 foo:SetAllPoints(true) | |
| 511 for _, point in pairs({"BOTTOMLEFT","TOPLEFT","BOTTOMRIGHT","TOPRIGHT"}) do | |
| 512 local corner = CreateFrame("Frame",nil,foo) | |
| 513 corner:EnableMouse(true) | |
| 514 corner:SetWidth(12) | |
| 515 corner:SetHeight(12) | |
| 516 corner:SetPoint(point) | |
| 517 local tex = corner:CreateTexture(nil,"HIGHLIGHT") | |
| 518 tex:SetTexture(1.0,0.82,0,0.7) | |
| 519 tex:SetBlendMode("ADD") | |
| 520 tex:SetAllPoints() | |
| 521 corner:RegisterForDrag("LeftButton","RightButton") | |
| 522 local function UpdateTooltip() | |
| 523 local size, size2 = bar:GetButtonSize() | |
| 524 local rows, cols, spacing = bar:GetButtonGrid() | |
| 525 size = (size == size2) and tostring(size) or format("%dx%d",size,size2) | |
| 526 GameTooltipTextRight4:SetText(size) | |
| 527 GameTooltipTextRight5:SetText(tostring(spacing)) | |
| 528 end | |
| 529 corner:SetScript("OnMouseDown", | 516 corner:SetScript("OnMouseDown", |
| 530 function(_,btn) | 517 function(_,btn) |
| 531 local bw, bh = GetButtonSize(bar) | 518 f:SetScript("OnUpdate", CornerUpdate) |
| 532 local r, c, s = GetButtonGrid(bar) | |
| 533 if btn == "LeftButton" then -- button resize | |
| 534 f:SetMinResize( (s+12)*c+1, (s+12)*r+1 ) | |
| 535 f:SetScript("OnUpdate", | |
| 536 function() | |
| 537 RecomputeButtonSize(bar) | |
| 538 UpdateTooltip() | |
| 539 end | |
| 540 ) | |
| 541 elseif btn == "RightButton" then -- spacing resize | |
| 542 f:SetMinResize( bw*c, bh*r ) | |
| 543 f:SetScript("OnUpdate", | |
| 544 function() | |
| 545 RecomputeButtonSpacing(bar) | |
| 546 UpdateTooltip() | |
| 547 end | |
| 548 ) | |
| 549 end | |
| 550 f:StartSizing(point) | 519 f:StartSizing(point) |
| 551 end | 520 end |
| 552 ) | 521 ) |
| 553 corner:SetScript("OnMouseUp",StopResize) | 522 corner:SetScript("OnMouseUp",StopResize) |
| 554 corner:SetScript("OnEnter", | 523 corner:SetScript("OnEnter", |
| 555 function() | 524 function() |
| 525 local bw, bh = GetButtonSize(bar) | |
| 526 local r, c, s = bar:GetButtonGrid() | |
| 527 local size = (bw == bh) and tostring(bw) or format("%d x %d",bw,bh) | |
| 556 GameTooltip:SetOwner(f, "ANCHOR_"..point) | 528 GameTooltip:SetOwner(f, "ANCHOR_"..point) |
| 557 GameTooltip:AddLine(L["Drag to resize buttons"]) | 529 GameTooltip:AddDoubleLine(format("|cffcccccc%s|r %s",L["Drag"],L["to add/remove buttons:"]), format("%d x %d",r,c)) |
| 558 GameTooltip:AddLine(L["Right-click-drag"]) | 530 GameTooltip:AddDoubleLine(format("|cff00ff00%s|r %s",L["Hold Shift"],L["to resize buttons:"]), size) |
| 559 GameTooltip:AddLine(L["to change spacing"]) | 531 GameTooltip:AddDoubleLine(format("|cff0033cc%s|r %s",L["Hold Alt"],L["to change spacing:"]), tostring(s)) |
| 560 local size, size2 = bar:GetButtonSize() | |
| 561 local rows, cols, spacing = bar:GetButtonGrid() | |
| 562 size = (size == size2) and tostring(size) or format("%dx%d",size,size2) | |
| 563 GameTooltip:AddDoubleLine(L["Size:"], size) | |
| 564 GameTooltip:AddDoubleLine(L["Spacing:"], tostring(spacing)) | |
| 565 GameTooltip:Show() | 532 GameTooltip:Show() |
| 566 end | 533 end |
| 567 ) | 534 ) |
| 568 corner:SetScript("OnLeave", | 535 corner:SetScript("OnLeave", |
| 569 function() | 536 function() |
| 570 GameTooltip:Hide() | 537 GameTooltip:Hide() |
| 571 f:SetScript("OnUpdate",nil) | 538 f:SetScript("OnUpdate",nil) |
| 572 end | 539 end |
| 573 ) | 540 ) |
| 574 | |
| 575 end | 541 end |
| 576 | 542 |
| 577 overlay:RegisterForDrag("LeftButton") | 543 overlay:RegisterForDrag("LeftButton") |
| 578 overlay:RegisterForClicks("RightButtonUp") | 544 overlay:RegisterForClicks("RightButtonUp") |
| 579 | 545 |
| 595 ) | 561 ) |
| 596 | 562 |
| 597 local function UpdateDragTooltip() | 563 local function UpdateDragTooltip() |
| 598 GameTooltip:SetOwner(f, "ANCHOR_TOPRIGHT") | 564 GameTooltip:SetOwner(f, "ANCHOR_TOPRIGHT") |
| 599 GameTooltip:AddLine(bar.name) | 565 GameTooltip:AddLine(bar.name) |
| 600 GameTooltip:AddLine(L["Drag to move"]) | 566 GameTooltip:AddLine(format("|cffcccccc%s|r %s",L["Drag"],L["to move"])) |
| 601 GameTooltip:AddLine(("|cff00ff00%s|r %s"):format(L["Shift-drag"],L["to anchor to nearby frames"])) | 567 GameTooltip:AddLine(format("|cff00ff00%s|r %s",L["Hold Shift"],L["to anchor to nearby frames"])) |
| 602 GameTooltip:AddLine(("|cff00cccc%s|r %s"):format(L["Right-click"],L["for options"])) | 568 GameTooltip:AddLine(format("|cff00cccc%s|r %s",L["Right-click"],L["for options..."])) |
| 603 local _, a = bar:GetAnchor() | 569 local point, anchor, relpoint, x, y = bar:GetAnchor() |
| 604 if a and a ~= "UIParent" then | 570 if point then |
| 605 GameTooltip:AddLine(L["Currently anchored to <%s>"]:format(a)) | 571 local ofsx, ofsy = insidePointOffsetFuncs[point](x,y) |
| 572 if (anchor and anchor ~= "UIParent") or (ofsx == 0 and ofsy == 0) then | |
| 573 --anchor = anchor or "UIParent" | |
| 574 GameTooltip:AddLine(format("%s <%s>",L["Currently anchored to"],anchor)) | |
| 575 end | |
| 606 end | 576 end |
| 607 GameTooltip:Show() | 577 GameTooltip:Show() |
| 608 end | 578 end |
| 609 | 579 |
| 610 overlay:SetScript("OnDragStop", | 580 overlay:SetScript("OnDragStop", |
