Mercurial > wow > reaction
comparison Overlay.lua @ 103:890e4c4ab143
- added alpha settings (base and stateful)
- added scale settings (stateful only)
- updated overlay to work with stateful anchor/scale (though when in a state with scale, the button size/spacing can't be manipulated)
author | Flick <flickerstreak@gmail.com> |
---|---|
date | Thu, 06 Nov 2008 01:28:07 +0000 |
parents | f200bcb193d6 |
children |
comparison
equal
deleted
inserted
replaced
102:ad49739d110d | 103:890e4c4ab143 |
---|---|
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 SetSize = Bar.SetSize | |
11 local GetButtonSize = Bar.GetButtonSize | 12 local GetButtonSize = Bar.GetButtonSize |
12 local GetButtonGrid = Bar.GetButtonGrid | 13 local GetButtonGrid = Bar.GetButtonGrid |
13 local SetSize = Bar.SetSize | |
14 local SetAnchor = Bar.SetAnchor | |
15 local SetButtonSize = Bar.SetButtonSize | 14 local SetButtonSize = Bar.SetButtonSize |
16 local SetButtonGrid = Bar.SetButtonGrid | 15 local SetButtonGrid = Bar.SetButtonGrid |
17 local ApplyAnchor = Bar.ApplyAnchor | 16 local ApplyAnchor = Bar.ApplyAnchor |
18 local GameTooltipTextRight1 = GameTooltipTextRight1 | 17 local GameTooltipTextRight1 = GameTooltipTextRight1 |
19 local GameTooltipTextRight2 = GameTooltipTextRight2 | 18 local GameTooltipTextRight2 = GameTooltipTextRight2 |
21 | 20 |
22 local KB = LibStub("LibKeyBound-1.0") | 21 local KB = LibStub("LibKeyBound-1.0") |
23 | 22 |
24 ReAction:UpdateRevision("$Revision$") | 23 ReAction:UpdateRevision("$Revision$") |
25 | 24 |
25 | |
26 -- | |
27 -- Wrap some of the bar manipulators to make them state-aware | |
28 -- | |
29 local function SetAnchor( bar, point, frame, relPoint, x, y ) | |
30 local state = bar:GetState() | |
31 if state then | |
32 local anchorstate = bar:GetStateProperty(state, "anchorEnable") | |
33 if anchorstate then | |
34 bar:SetStateProperty(state, "anchorFrame", frame) | |
35 bar:SetStateProperty(state, "anchorPoint", point) | |
36 bar:SetStateProperty(state, "anchorRelPoint", relPoint) | |
37 bar:SetStateProperty(state, "anchorX", x or 0) | |
38 bar:SetStateProperty(state, "anchorY", y or 0) | |
39 bar:SetAnchor(bar:GetAnchor()) | |
40 return | |
41 end | |
42 end | |
43 bar:SetAnchor(point, frame, relPoint, x, y) | |
44 end | |
45 | |
46 local function GetStateScale( bar ) | |
47 local state = bar:GetState() | |
48 if state and bar:GetStateProperty(state, "enableScale") then | |
49 return bar:GetStateProperty(state, "scale") | |
50 end | |
51 end | |
52 | |
53 local function SetStateScale( bar, scale ) | |
54 local state = bar:GetState() | |
55 if state and bar:GetStateProperty(state, "enableScale") then | |
56 bar:SetStateProperty(state, "scale", scale) | |
57 end | |
58 end | |
59 | |
60 | |
26 -- | 61 -- |
27 -- Bar config overlay | 62 -- Bar config overlay |
28 -- | 63 -- |
29 | 64 |
30 local function GetNormalTextColor() | 65 local function GetNormalTextColor() |
49 end | 84 end |
50 | 85 |
51 local function StoreExtents(bar) | 86 local function StoreExtents(bar) |
52 local f = bar:GetFrame() | 87 local f = bar:GetFrame() |
53 local p, fr, rp, x, y = f:GetPoint(1) | 88 local p, fr, rp, x, y = f:GetPoint(1) |
54 fr = fr or UIParent | 89 fr = fr and fr:GetName() or "UIParent" |
55 SetAnchor( bar, p, fr, rp, x, y ) | 90 SetAnchor( bar, p, fr, rp, x, y ) |
56 SetSize( bar, f:GetWidth(), f:GetHeight() ) | 91 SetSize( bar, f:GetWidth(), f:GetHeight() ) |
57 end | 92 end |
58 | 93 |
59 local function RecomputeButtonSize(bar) | 94 local function RecomputeButtonSize(bar) |
64 local scaleW = (floor(w/c) - s) / bw | 99 local scaleW = (floor(w/c) - s) / bw |
65 local scaleH = (floor(h/r) - s) / bh | 100 local scaleH = (floor(h/r) - s) / bh |
66 local scale = min(scaleW, scaleH) | 101 local scale = min(scaleW, scaleH) |
67 | 102 |
68 SetButtonSize(bar, scale * bw, scale * bh, s) | 103 SetButtonSize(bar, scale * bw, scale * bh, s) |
104 end | |
105 | |
106 local function ComputeBarScale(bar) | |
107 local w, h = bar.controlFrame:GetWidth() - 8, bar.controlFrame:GetHeight() - 8 | |
108 local bw, bh = GetButtonSize(bar) | |
109 local r, c, s = GetButtonGrid(bar) | |
110 | |
111 local scaleW = w / (c*(bw+s)) | |
112 local scaleH = h / (r*(bh+s)) | |
113 local scale = min(scaleW, scaleH) | |
114 | |
115 if scale > 2.5 then | |
116 scale = 2.5 | |
117 elseif scale < 0.25 then | |
118 scale = 0.25 | |
119 end | |
120 | |
121 return scale | |
69 end | 122 end |
70 | 123 |
71 local function RecomputeButtonSpacing(bar) | 124 local function RecomputeButtonSpacing(bar) |
72 local w, h = GetSize(bar) | 125 local w, h = GetSize(bar) |
73 local bw, bh = GetButtonSize(bar) | 126 local bw, bh = GetButtonSize(bar) |
405 local f = bar:GetFrame() | 458 local f = bar:GetFrame() |
406 | 459 |
407 f:SetMovable(true) | 460 f:SetMovable(true) |
408 f:SetResizable(true) | 461 f:SetResizable(true) |
409 | 462 |
410 local overlay = CreateFrame("Button", nil, f) | 463 -- child of UIParent so that alpha and scale doesn't propagate to it |
464 local overlay = CreateFrame("Button", nil, UIParent) | |
411 overlay:EnableMouse(true) | 465 overlay:EnableMouse(true) |
412 overlay:SetFrameLevel(3) -- set it above the buttons | 466 overlay:SetFrameLevel(3) -- set it above the buttons |
413 overlay:SetPoint("TOPLEFT", -4, 4) | 467 overlay:SetPoint("TOPLEFT", f, "TOPLEFT", -4, 4) |
414 overlay:SetPoint("BOTTOMRIGHT", 4, -4) | 468 overlay:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", 4, -4) |
415 overlay:SetBackdrop({ | 469 overlay:SetBackdrop({ |
416 edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", | 470 edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", |
417 tile = true, | 471 tile = true, |
418 tileSize = 16, | 472 tileSize = 16, |
419 edgeSize = 16, | 473 edgeSize = 16, |
471 f:StopMovingOrSizing() | 525 f:StopMovingOrSizing() |
472 f.isMoving = false | 526 f.isMoving = false |
473 f:SetScript("OnUpdate",nil) | 527 f:SetScript("OnUpdate",nil) |
474 StoreSize(bar) | 528 StoreSize(bar) |
475 ClampToButtons(bar) | 529 ClampToButtons(bar) |
476 --ApplyAnchor(bar) | |
477 ReAction:RefreshOptions() | 530 ReAction:RefreshOptions() |
478 end | 531 end |
479 | 532 |
480 local function CornerUpdate() | 533 local function CornerUpdate() |
481 local bw, bh = GetButtonSize(bar) | 534 local bw, bh = GetButtonSize(bar) |
482 local r, c, s = GetButtonGrid(bar) | 535 local r, c, s = GetButtonGrid(bar) |
536 local ss = GetStateScale(bar) | |
483 if IsShiftKeyDown() then | 537 if IsShiftKeyDown() then |
484 f:SetMinResize( (s+12)*c+1, (s+12)*r+1 ) | 538 if ss then |
485 RecomputeButtonSize(bar) | 539 f:SetMinResize( ((s+bw)*c*0.25)/ss, ((s+bh)*r*0.25)/ss ) |
486 elseif IsAltKeyDown() then | 540 f:SetMaxResize( ((s+bw)*c*2.5 + 1)/ss, ((s+bh)*r*2.5 + 1)/ss ) |
541 scale = ComputeBarScale(bar) | |
542 else | |
543 f:SetMinResize( (s+12)*c+1, (s+12)*r+1 ) | |
544 f:SetMaxResize( (s+128)*c+1, (s+128)*r+1 ) | |
545 RecomputeButtonSize(bar) | |
546 end | |
547 elseif not ss and IsAltKeyDown() then | |
487 f:SetMinResize( bw*c, bh*r ) | 548 f:SetMinResize( bw*c, bh*r ) |
549 f:SetMaxResize( 2*bw*c, 2*bh*r ) | |
488 RecomputeButtonSpacing(bar) | 550 RecomputeButtonSpacing(bar) |
489 else | 551 else |
490 f:SetMinResize( bw+s+1, bh+s+1 ) | 552 f:SetMinResize( bw+s+1, bh+s+1 ) |
553 f:SetMaxResize( 50*(bw+s)+1, 50*(bh+s)+1 ) | |
491 RecomputeGrid(bar) | 554 RecomputeGrid(bar) |
492 end | 555 end |
493 local size = (bw == bh) and tostring(bw) or format("%d x %d",bw,bh) | 556 GameTooltipTextRight2:SetText(format("%d x %d",r,c)) |
494 GameTooltipTextRight1:SetText(format("%d x %d",r,c)) | 557 |
495 GameTooltipTextRight2:SetText(size) | 558 local ss = GetStateScale(bar) |
496 GameTooltipTextRight3:SetText(tostring(s)) | 559 local state = bar:GetState() |
560 if ss then | |
561 GameTooltipTextRight4:SetText(format("%d%%", scale*100)) | |
562 else | |
563 local size = (bw == bh) and tostring(bw) or format("%d x %d",bw,bh) | |
564 GameTooltipTextRight3:SetText(size) | |
565 GameTooltipTextRight4:SetText(tostring(s)) | |
566 end | |
497 end | 567 end |
498 | 568 |
499 -- corner drag handles | 569 -- corner drag handles |
500 for _, point in pairs({"BOTTOMLEFT","TOPLEFT","BOTTOMRIGHT","TOPRIGHT"}) do | 570 for _, point in pairs({"BOTTOMLEFT","TOPLEFT","BOTTOMRIGHT","TOPRIGHT"}) do |
501 local corner = CreateFrame("Frame",nil,overlay) | 571 local corner = CreateFrame("Frame",nil,overlay) |
509 tex:SetTexCoord(unpack(cornerTexCoords[point])) | 579 tex:SetTexCoord(unpack(cornerTexCoords[point])) |
510 tex:SetBlendMode("ADD") | 580 tex:SetBlendMode("ADD") |
511 tex:SetAlpha(0.6) | 581 tex:SetAlpha(0.6) |
512 tex:SetAllPoints() | 582 tex:SetAllPoints() |
513 | 583 |
514 --corner:RegisterForDrag("LeftButton") | |
515 | |
516 corner:SetScript("OnMouseDown", | 584 corner:SetScript("OnMouseDown", |
517 function(_,btn) | 585 function(_,btn) |
518 f:SetScript("OnUpdate", CornerUpdate) | 586 f:SetScript("OnUpdate", CornerUpdate) |
519 f:StartSizing(point) | 587 f:StartSizing(point) |
520 end | 588 end |
521 ) | 589 ) |
522 corner:SetScript("OnMouseUp",StopResize) | 590 corner:SetScript("OnMouseUp", |
591 function() | |
592 local ss = GetStateScale(bar) | |
593 if ss then | |
594 local state = bar:GetState() | |
595 SetStateScale(bar, ComputeBarScale(bar)) | |
596 end | |
597 StopResize() | |
598 end) | |
523 corner:SetScript("OnEnter", | 599 corner:SetScript("OnEnter", |
524 function() | 600 function() |
525 local bw, bh = GetButtonSize(bar) | 601 local bw, bh = GetButtonSize(bar) |
526 local r, c, s = bar:GetButtonGrid() | 602 local r, c, s = bar:GetButtonGrid() |
527 local size = (bw == bh) and tostring(bw) or format("%d x %d",bw,bh) | 603 local size = (bw == bh) and tostring(bw) or format("%d x %d",bw,bh) |
604 local ss = GetStateScale(bar) | |
605 local state = bar:GetState() | |
528 GameTooltip:SetOwner(f, "ANCHOR_"..point) | 606 GameTooltip:SetOwner(f, "ANCHOR_"..point) |
607 if ss then | |
608 GameTooltip:AddLine(format("%s (%s: %s)", bar:GetName(), L["State"], state)) | |
609 else | |
610 GameTooltip:AddLine(bar:GetName()) | |
611 end | |
529 GameTooltip:AddDoubleLine(format("|cffcccccc%s|r %s",L["Drag"],L["to add/remove buttons:"]), format("%d x %d",r,c)) | 612 GameTooltip:AddDoubleLine(format("|cffcccccc%s|r %s",L["Drag"],L["to add/remove buttons:"]), format("%d x %d",r,c)) |
530 GameTooltip:AddDoubleLine(format("|cff00ff00%s|r %s",L["Hold Shift"],L["to resize buttons:"]), size) | 613 if ss then |
531 GameTooltip:AddDoubleLine(format("|cff0033cc%s|r %s",L["Hold Alt"],L["to change spacing:"]), tostring(s)) | 614 GameTooltip:AddLine(L["State Scale Override"]) |
615 GameTooltip:AddDoubleLine(format("|cff00ff00%s|r %s",L["Hold Shift"],L["to change scale:"]), format("%d%%", bar:GetStateProperty(state,"scale")*100)) | |
616 else | |
617 GameTooltip:AddDoubleLine(format("|cff00ff00%s|r %s",L["Hold Shift"],L["to resize buttons:"]), tostring(floor(size))) | |
618 GameTooltip:AddDoubleLine(format("|cff0033cc%s|r %s",L["Hold Alt"], L["to change spacing:"]), tostring(floor(s))) | |
619 end | |
532 GameTooltip:Show() | 620 GameTooltip:Show() |
533 end | 621 end |
534 ) | 622 ) |
535 corner:SetScript("OnLeave", | 623 corner:SetScript("OnLeave", |
536 function() | 624 function() |
560 end | 648 end |
561 ) | 649 ) |
562 | 650 |
563 local function UpdateDragTooltip() | 651 local function UpdateDragTooltip() |
564 GameTooltip:SetOwner(f, "ANCHOR_TOPRIGHT") | 652 GameTooltip:SetOwner(f, "ANCHOR_TOPRIGHT") |
565 GameTooltip:AddLine(bar.name) | 653 local ss = GetStateScale(bar) |
654 local state = bar:GetState() | |
655 if ss then | |
656 GameTooltip:AddLine(format("%s (%s: %s)", bar:GetName(), L["State"], state)) | |
657 else | |
658 GameTooltip:AddLine(bar:GetName()) | |
659 end | |
566 GameTooltip:AddLine(format("|cffcccccc%s|r %s",L["Drag"],L["to move"])) | 660 GameTooltip:AddLine(format("|cffcccccc%s|r %s",L["Drag"],L["to move"])) |
567 GameTooltip:AddLine(format("|cff00ff00%s|r %s",L["Hold Shift"],L["to anchor to nearby frames"])) | 661 GameTooltip:AddLine(format("|cff00ff00%s|r %s",L["Hold Shift"],L["to anchor to nearby frames"])) |
568 GameTooltip:AddLine(format("|cff00cccc%s|r %s",L["Right-click"],L["for options..."])) | 662 GameTooltip:AddLine(format("|cff00cccc%s|r %s",L["Right-click"],L["for options..."])) |
569 local point, anchor, relpoint, x, y = bar:GetAnchor() | 663 local point, frame, relpoint, x, y = bar:GetFrame():GetPoint(1) |
570 if point then | 664 if point then |
571 local ofsx, ofsy = insidePointOffsetFuncs[point](x,y) | 665 local ofsx, ofsy = insidePointOffsetFuncs[point](x,y) |
572 if (anchor and anchor ~= "UIParent") or (ofsx == 0 and ofsy == 0) then | 666 if (frame and frame ~= UIParent) or (ofsx == 0 and ofsy == 0) then |
573 --anchor = anchor or "UIParent" | 667 frame = frame or UIParent |
574 GameTooltip:AddLine(format("%s <%s>",L["Currently anchored to"],anchor)) | 668 GameTooltip:AddLine(format("%s <%s>",L["Currently anchored to"],frame:GetName())) |
575 end | 669 end |
576 end | 670 end |
577 GameTooltip:Show() | 671 GameTooltip:Show() |
578 end | 672 end |
579 | 673 |
620 | 714 |
621 function overlay:LIBKEYBOUND_DISABLED(evt) | 715 function overlay:LIBKEYBOUND_DISABLED(evt) |
622 self:SetFrameLevel(3) | 716 self:SetFrameLevel(3) |
623 end | 717 end |
624 | 718 |
719 function overlay:RefreshControls() | |
720 UpdateAnchorDecoration() | |
721 end | |
722 | |
723 overlay:SetScript("OnShow", overlay.RefreshControls) | |
724 | |
625 KB.RegisterCallback(overlay,"LIBKEYBOUND_ENABLED") | 725 KB.RegisterCallback(overlay,"LIBKEYBOUND_ENABLED") |
626 KB.RegisterCallback(overlay,"LIBKEYBOUND_DISABLED") | 726 KB.RegisterCallback(overlay,"LIBKEYBOUND_DISABLED") |
627 | 727 |
628 if ReAction:GetKeybindMode() then | 728 if ReAction:GetKeybindMode() then |
629 overlay:SetFrameLevel(1) | 729 overlay:SetFrameLevel(1) |
650 elseif f then | 750 elseif f then |
651 f:Hide() | 751 f:Hide() |
652 end | 752 end |
653 end | 753 end |
654 | 754 |
755 function Bar:RefreshControls() | |
756 if self.controlFrame and self.controlFrame:IsShown() then | |
757 self.controlFrame:RefreshControls() | |
758 end | |
759 end | |
760 | |
655 function Bar:SetLabel(name) | 761 function Bar:SetLabel(name) |
656 self.labelName = name | 762 self.labelName = name |
657 UpdateLabelString(self) | 763 UpdateLabelString(self) |
658 end | 764 end |
659 | 765 |