vrtc / chorus (public) (License: CC0) (since 2023-08-12) (hash sha1)
World of Warcraft add-on stub. The overall goal is to create a specialized raid frame.
List of commits:
Subject Hash Author Date (UTC)
feat!: Update raid frame layout ad51f7e37e8babd30ee45c5b87d931a09c1fc0f3 Vladyslav Bondarenko 2023-08-20 14:45:38
fix: Do not show range to oneself c055a76806c5646e4027698c6a105f06199be4ae Vladyslav Bondarenko 2023-08-20 04:29:32
feat!: Add raid targeting icons 53121d5d75fb55d745734337ab70283496e46e7c Vladyslav Bondarenko 2023-08-19 23:22:01
feat!: Add general threat situation widget a002db1c9c810f21fe1e1c042a435875bbe5f317 Vladyslav Bondarenko 2023-08-19 22:20:58
fix!: Highlight offline players 7c28b6efa34f6e5450d2999acfd5a54880aa6df0 Vladyslav Bondarenko 2023-08-19 21:06:38
fix!: Change aura sorting ba249c7309ccbcb14fea727b347c3dd532af73ee Vladyslav Bondarenko 2023-08-19 20:40:31
feat: Show player in party 198e8c86b9b93dd9c3edf7045d5bbcb9142d76d6 Vladyslav Bondarenko 2023-08-19 20:38:40
feat(doc)!: Add project description 4b406a549e83dda3845104e8a6a233eae481a3c8 Vladyslav Bondarenko 2023-08-19 05:58:50
fix: Typo in ChorusRaidFrame 61fb4f93c227e3b94a52df26eeffece12fe86e55 Vladyslav Bondarenko 2023-08-18 21:00:34
feat(build): Document build validation scripts d19d03c4a20c8c02fee8b4c1c00241c58baa12eb Vladyslav Bondarenko 2023-08-18 20:57:35
feat: Update raid frame ff5ad9619c6af14f7e1719cbaaf34fa0465c1f12 Vladyslav Bondarenko 2023-08-18 20:54:29
feat: Update add-on loading mechanism 2d8df81c17fbfcaf8d0bb966a3373503bb32a585 Vladyslav Bondarenko 2023-08-18 19:59:39
feat: Update progress frames on demand only 7c18488e61b5889eca4b057602fbc41883fc53f1 Vladyslav Bondarenko 2023-08-18 19:50:41
feat: Add basic font customization 321c2e6251e2e619101f8d57b4d4b1ef10a79694 Vladyslav Bondarenko 2023-08-18 17:29:12
fix: Improve range indicator accuracy 17ee7011ae6bdd3e28bae4694d40a68ea799d001 Vladyslav Bondarenko 2023-08-17 23:52:43
feat!: Add target range indicator 83b3fae1f675042b7d9e89c09aedc864e8fcaa27 Vladyslav Bondarenko 2023-08-17 22:41:08
feat: Add class color code to target frame 990cdf1d9f44c9916948697e74f86d6490d83304 Vladyslav Bondarenko 2023-08-17 20:59:28
feat: Add solo unit buttons 4658af2b5142ff2ca86c2c4b48577879117a9ecc Vladyslav Bondarenko 2023-08-17 20:38:10
feat: Add power bar to raid unit button b25bd8d28c30cb003bf8cfe2886e2cfd8442d32f Vladyslav Bondarenko 2023-08-17 18:48:29
feat!: Add basic raid frame stub 66e27810a396b564cf7cd737e1f402f4f433b879 Vladyslav Bondarenko 2023-08-17 17:40:08
Commit ad51f7e37e8babd30ee45c5b87d931a09c1fc0f3 - feat!: Update raid frame layout
When playtasting it turned out that frames are tedious to parse. Add
more empty space to distinguish information. Also remove obtrusive
backgrounds.
Author: Vladyslav Bondarenko
Author date (UTC): 2023-08-20 14:45
Committer name: Vladyslav Bondarenko
Committer date (UTC): 2023-08-20 14:45
Parent(s): c055a76806c5646e4027698c6a105f06199be4ae
Signer:
Signing key: EFF9624877D25D02
Signing status: E
Tree: f9e67807bff2c2c1c7ba45ed4b45e480bf36915c
File Lines added Lines deleted
etc/luacheckrc.lua 3 2
src/Chorus.xml 0 1
src/ChorusAuraButtonTemplate.lua 15 66
src/ChorusAuraButtonTemplate.xml 8 13
src/ChorusAuraFrameTemplate.lua 0 4
src/ChorusAuraFrameTemplate.xml 5 5
src/ChorusRaidFrame.xml 15 27
src/ChorusRaidUnitButtonTemplate.xml 24 27
src/ChorusTestFrame.xml 0 35
src/ChorusUnitNameFrameTemplate.lua 1 0
File etc/luacheckrc.lua changed (mode: 100644) (index 218577d..420f278)
1 1 --[[ http://luacheck.readthedocs.io/en/stable/config.html ]]-- --[[ http://luacheck.readthedocs.io/en/stable/config.html ]]--
2 2 stds.wow = { stds.wow = {
3 3 read_globals = { read_globals = {
4 'GetRaidTargetIndex',
5 'SetRaidTargetIconTexture',
6 4 'CreateFrame', 'CreateFrame',
7 5 'DebuffTypeColor', 'DebuffTypeColor',
8 6 'GetPlayerInfoByGUID', 'GetPlayerInfoByGUID',
7 'GetRaidTargetIndex',
9 8 'GetSpellInfo', 'GetSpellInfo',
10 9 'GetSpellTexture', 'GetSpellTexture',
11 10 'GetThreatStatusColor', 'GetThreatStatusColor',
 
... ... stds.wow = {
13 12 'IsSpellInRange', 'IsSpellInRange',
14 13 'PowerBarColor', 'PowerBarColor',
15 14 'RAID_CLASS_COLORS', 'RAID_CLASS_COLORS',
15 'SetRaidTargetIconTexture',
16 16 'UIParent', 'UIParent',
17 17 'UnitAura', 'UnitAura',
18 18 'UnitClass', 'UnitClass',
 
... ... stds.wow = {
27 27 'UnitIsFriend', 'UnitIsFriend',
28 28 'UnitIsGhost', 'UnitIsGhost',
29 29 'UnitIsPlayer', 'UnitIsPlayer',
30 'UnitIsUnit',
30 31 'UnitName', 'UnitName',
31 32 'UnitPower', 'UnitPower',
32 33 'UnitPowerMax', 'UnitPowerMax',
File src/Chorus.xml changed (mode: 100644) (index 873ba45..a890a88)
13 13 <Include file="ChorusRaidTargetIconFrameTemplate.xml"/> <Include file="ChorusRaidTargetIconFrameTemplate.xml"/>
14 14 <Include file="ChorusRaidUnitButtonTemplate.xml"/> <Include file="ChorusRaidUnitButtonTemplate.xml"/>
15 15 <Include file="ChorusRaidFrame.xml"/> <Include file="ChorusRaidFrame.xml"/>
16 <Include file="ChorusTestFrame.xml"/>
17 16 </Ui> </Ui>
File src/ChorusAuraButtonTemplate.lua changed (mode: 100644) (index 006aed5..10e7c58)
... ... local function auraButtonValidate(auraButton)
21 21 assert(auraButton.artwork ~= nil) assert(auraButton.artwork ~= nil)
22 22 assert(auraButton.label ~= nil) assert(auraButton.label ~= nil)
23 23 assert(auraButton.overlay ~= nil) assert(auraButton.overlay ~= nil)
24 assert(auraButton.background ~= nil)
25 24 end end
26 25
27 local function applyArtwork(auraButton, artworkFile, owner)
26 local function applyArtwork(auraButton, artworkFile)
28 27 auraButtonValidate(auraButton) auraButtonValidate(auraButton)
29 28
30 29 if not artworkFile then if not artworkFile then
 
... ... local function applyArtwork(auraButton, artworkFile, owner)
39 38 local artwork = auraButton.artwork local artwork = auraButton.artwork
40 39 assert(artwork ~= nil) assert(artwork ~= nil)
41 40 artwork:SetTexture(artworkFile) artwork:SetTexture(artworkFile)
42
43 local background = auraButton.background
44 if 'player' == owner then
45 background:SetTexture(1, 0.85, 0, 0.6)
46 else
47 background:SetTexture(0, 0, 0, 1)
48 end
49 41 end end
50 42
51 local function applyOverlay(auraButton, category)
43 local function applyOverlay(auraButton, category, owner)
52 44 auraButtonValidate(auraButton) auraButtonValidate(auraButton)
53 45
54 46 if not category then if not category then
 
... ... local function applyOverlay(auraButton, category)
86 78 local fontSize = 12 local fontSize = 12
87 79 auraButton:SetScale(label:GetStringHeight() / fontSize) auraButton:SetScale(label:GetStringHeight() / fontSize)
88 80 end end
81
82 if owner and 'player' == owner then
83 label:SetTextColor(1, 225 / 255, 0)
84 else
85 label:SetTextColor(1, 1, 1)
86 end
89 87 end end
90 88
91 89 local function formatDuration(durationSec) local function formatDuration(durationSec)
 
... ... local function formatDuration(durationSec)
97 95 t = string.format("%.0f", durationSec) t = string.format("%.0f", durationSec)
98 96 elseif durationSec < 3600 then elseif durationSec < 3600 then
99 97 t = string.format("%.0f m", durationSec / 60) t = string.format("%.0f m", durationSec / 60)
100 else
98 elseif durationSec < 3600 * 24 then
101 99 t = string.format("%.0f h", durationSec / 60 / 60) t = string.format("%.0f h", durationSec / 60 / 60)
100 else
101 t = string.format("%.0f d", durationSec / 60 / 60 / 24)
102 102 end end
103 103 return t return t
104 104 end end
 
... ... local function applyDuration(auraButton, now, totalDurationSec, expirationInstan
126 126 durationRemainingSec = expirationInstance - now durationRemainingSec = expirationInstance - now
127 127 end end
128 128
129 local isButtonLarge = auraButton:GetHeight() >= 24
130
131 --[[ User readability tweaks. ]]--
132 129 local t = nil local t = nil
133 if isButtonLarge then
134 --[[ Given large button, separate text from artwork. ]]--
135 label:SetJustifyV('BOTTOM')
136 if durationRemainingSec then
137 t = formatDuration(durationRemainingSec)
138 end
139 else
140 --[[ Given small button, overlap text with artwork. Additionally, only show short durations. ]]--
141 label:SetJustifyV('CENTER')
142 if durationRemainingSec and durationRemainingSec < 60 then
143 t = formatDuration(durationRemainingSec)
144 end
130 if durationRemainingSec then
131 t = formatDuration(durationRemainingSec)
145 132 end end
146 133
147 134 label:SetText(t) label:SetText(t)
 
... ... local function auraButtonUpdateProcessor(self)
166 153 applyDuration(self, GetTime(), durationSec, expirationInstance) applyDuration(self, GetTime(), durationSec, expirationInstance)
167 154 end end
168 155
169 local function applySize(auraButton)
170 assert(auraButton ~= nil)
171
172 local p = auraButton:GetParent()
173 if not p then
174 auraButton:SetSize(36, 36)
175 return
176 end
177
178 local minSize = 12
179 local maxSize = 64
180
181 local a = auraButton:GetWidth()
182 a = math.min(a, p:GetWidth())
183 a = math.min(math.max(minSize, a), maxSize)
184
185 local b = auraButton:GetWidth()
186 b = math.min(b, p:GetHeight())
187 b = math.min(math.max(minSize, b), maxSize)
188
189 local c = math.min(a, b)
190 auraButton:SetSize(c, c)
191
192 local t = {auraButton.artwork, auraButton.overlay}
193 local i = 0
194 while (i < #t) do
195 i = i + 1
196 local e = t[i]
197 assert(e ~= nil)
198 local d = math.min(e:GetWidth(), e:GetHeight())
199 d = math.min(math.max(minSize, d), maxSize)
200 e:SetSize(d, d)
201 e:SetPoint('BOTTOMLEFT', (auraButton:GetWidth() - d) / 2, 0)
202 end
203 end
204
205 156 local function apply(auraButton, unitDesignation, auraIndex, filter) local function apply(auraButton, unitDesignation, auraIndex, filter)
206 157 auraButtonValidate(auraButton) auraButtonValidate(auraButton)
207 158
 
... ... local function apply(auraButton, unitDesignation, auraIndex, filter)
239 190 return return
240 191 end end
241 192
242 applySize(auraButton)
243 applyArtwork(auraButton, artworkFile, owner)
193 applyArtwork(auraButton, artworkFile)
244 194 applyDuration(auraButton, GetTime(), durationSec, expirationInstance) applyDuration(auraButton, GetTime(), durationSec, expirationInstance)
245 applyOverlay(auraButton, category)
195 applyOverlay(auraButton, category, owner)
246 196 end end
247 197
248 198 local function auraButtonEventProcessor(self, eventCategory) local function auraButtonEventProcessor(self, eventCategory)
 
... ... function Chorus.auraButtonMain(self)
295 245 self.artwork = _G[n .. 'Artwork'] self.artwork = _G[n .. 'Artwork']
296 246 self.label = _G[n .. 'Text'] self.label = _G[n .. 'Text']
297 247 self.overlay = _G[n .. 'Overlay'] self.overlay = _G[n .. 'Overlay']
298 self.background = _G[n .. 'Background']
299 248 end end
300 249 self:SetScript('OnEvent', auraButtonEventProcessor) self:SetScript('OnEvent', auraButtonEventProcessor)
301 250 self:RegisterEvent('ADDON_LOADED') self:RegisterEvent('ADDON_LOADED')
File src/ChorusAuraButtonTemplate.xml changed (mode: 100644) (index fbfb35c..cfaaec2)
3 3 <Script file="ChorusAuraButtonTemplate.lua"/> <Script file="ChorusAuraButtonTemplate.lua"/>
4 4 <Frame name="ChorusAuraButtonTemplate" virtual="true"> <Frame name="ChorusAuraButtonTemplate" virtual="true">
5 5 <Size> <Size>
6 <AbsDimension x="36" y="36" />
6 <AbsDimension x="30" y="30" />
7 7 </Size> </Size>
8 8 <Layers> <Layers>
9 9 <Layer level="ARTWORK"> <Layer level="ARTWORK">
 
12 12 <AbsDimension x="24" y="24"/> <AbsDimension x="24" y="24"/>
13 13 </Size> </Size>
14 14 <Anchors> <Anchors>
15 <Anchor point="BOTTOMLEFT">
15 <Anchor point="TOPLEFT">
16 16 <Offset> <Offset>
17 <AbsDimension x="6" y="12"/>
17 <AbsDimension x="3" y="0"/>
18 18 </Offset> </Offset>
19 19 </Anchor> </Anchor>
20 20 </Anchors> </Anchors>
 
26 26 <AbsDimension x="24" y="24"/> <AbsDimension x="24" y="24"/>
27 27 </Size> </Size>
28 28 <Anchors> <Anchors>
29 <Anchor point="BOTTOMLEFT">
29 <Anchor point="TOPLEFT">
30 30 <Offset> <Offset>
31 <AbsDimension x="6" y="12"/>
31 <AbsDimension x="3" y="0"/>
32 32 </Offset> </Offset>
33 33 </Anchor> </Anchor>
34 34 </Anchors> </Anchors>
 
38 38 <Anchors> <Anchors>
39 39 <Anchor point="BOTTOMLEFT"> <Anchor point="BOTTOMLEFT">
40 40 <Offset> <Offset>
41 <AbsDimension x="-6" y="0"/>
41 <AbsDimension x="0" y="0"/>
42 42 </Offset> </Offset>
43 43 </Anchor> </Anchor>
44 <Anchor point="TOPRIGHT">
44 <Anchor point="TOPRIGHT" relativeTo="$parent" relativePoint="BOTTOMRIGHT">
45 45 <Offset> <Offset>
46 <AbsDimension x="6" y="0"/>
46 <AbsDimension x="0" y="24"/>
47 47 </Offset> </Offset>
48 48 </Anchor> </Anchor>
49 49 </Anchors> </Anchors>
50 50 </FontString> </FontString>
51 51 </Layer> </Layer>
52 <Layer level="BACKGROUND">
53 <Texture name="$parentBackground" nonBlocking="true" setAllPoints="true">
54 <Color r="0" g="0" b="0" a="1"/>
55 </Texture>
56 </Layer>
57 52 </Layers> </Layers>
58 53 <Scripts> <Scripts>
59 54 <OnLoad>Chorus.auraButtonMain(self);</OnLoad> <OnLoad>Chorus.auraButtonMain(self);</OnLoad>
File src/ChorusAuraFrameTemplate.lua changed (mode: 100644) (index 703e773..89ca844)
... ... end
206 206 function Chorus.auraFrameMain(self) function Chorus.auraFrameMain(self)
207 207 assert(self ~= nil) assert(self ~= nil)
208 208
209 local background = self:CreateTexture(self:GetName() .. 'Background', 'BACKGROUND')
210 background:SetAllPoints()
211 background:SetTexture(0, 0, 0, 0.6)
212
213 209 self:RegisterEvent('PLAYER_FOCUS_CHANGED') self:RegisterEvent('PLAYER_FOCUS_CHANGED')
214 210 self:RegisterEvent('PLAYER_LOGIN') self:RegisterEvent('PLAYER_LOGIN')
215 211 self:RegisterEvent('PLAYER_TARGET_CHANGED') self:RegisterEvent('PLAYER_TARGET_CHANGED')
File src/ChorusAuraFrameTemplate.xml changed (mode: 100644) (index 7e4b82f..9f643a5)
19 19 <Anchors> <Anchors>
20 20 <Anchor point="BOTTOMLEFT" relativeTo="$parentButton1" relativePoint="BOTTOMRIGHT"> <Anchor point="BOTTOMLEFT" relativeTo="$parentButton1" relativePoint="BOTTOMRIGHT">
21 21 <Offset> <Offset>
22 <AbsDimension x="0" y="0"/>
22 <AbsDimension x="4" y="0"/>
23 23 </Offset> </Offset>
24 24 </Anchor> </Anchor>
25 25 </Anchors> </Anchors>
 
28 28 <Anchors> <Anchors>
29 29 <Anchor point="BOTTOMLEFT" relativeTo="$parentButton2" relativePoint="BOTTOMRIGHT"> <Anchor point="BOTTOMLEFT" relativeTo="$parentButton2" relativePoint="BOTTOMRIGHT">
30 30 <Offset> <Offset>
31 <AbsDimension x="0" y="0"/>
31 <AbsDimension x="4" y="0"/>
32 32 </Offset> </Offset>
33 33 </Anchor> </Anchor>
34 34 </Anchors> </Anchors>
 
37 37 <Anchors> <Anchors>
38 38 <Anchor point="BOTTOMLEFT" relativeTo="$parentButton3" relativePoint="BOTTOMRIGHT"> <Anchor point="BOTTOMLEFT" relativeTo="$parentButton3" relativePoint="BOTTOMRIGHT">
39 39 <Offset> <Offset>
40 <AbsDimension x="0" y="0"/>
40 <AbsDimension x="4" y="0"/>
41 41 </Offset> </Offset>
42 42 </Anchor> </Anchor>
43 43 </Anchors> </Anchors>
 
46 46 <Anchors> <Anchors>
47 47 <Anchor point="BOTTOMLEFT" relativeTo="$parentButton4" relativePoint="BOTTOMRIGHT"> <Anchor point="BOTTOMLEFT" relativeTo="$parentButton4" relativePoint="BOTTOMRIGHT">
48 48 <Offset> <Offset>
49 <AbsDimension x="0" y="0"/>
49 <AbsDimension x="4" y="0"/>
50 50 </Offset> </Offset>
51 51 </Anchor> </Anchor>
52 52 </Anchors> </Anchors>
 
55 55 <Anchors> <Anchors>
56 56 <Anchor point="BOTTOMLEFT" relativeTo="$parentButton5" relativePoint="BOTTOMRIGHT"> <Anchor point="BOTTOMLEFT" relativeTo="$parentButton5" relativePoint="BOTTOMRIGHT">
57 57 <Offset> <Offset>
58 <AbsDimension x="0" y="0"/>
58 <AbsDimension x="4" y="0"/>
59 59 </Offset> </Offset>
60 60 </Anchor> </Anchor>
61 61 </Anchors> </Anchors>
File src/ChorusRaidFrame.xml changed (mode: 100644) (index 8f1d450..f6303bd)
2 2 <Ui xmlns="http://www.blizzard.com/wow/ui/"> <Ui xmlns="http://www.blizzard.com/wow/ui/">
3 3 <Frame name="ChorusRaidFrameGroupFrameTemplate" inherits="SecureRaidGroupHeaderTemplate" virtual="true" hidden="false"> <Frame name="ChorusRaidFrameGroupFrameTemplate" inherits="SecureRaidGroupHeaderTemplate" virtual="true" hidden="false">
4 4 <Size> <Size>
5 <AbsDimension x="768" y="144"/>
5 <AbsDimension x="1024" y="128"/>
6 6 </Size> </Size>
7 7 <Attributes> <Attributes>
8 8 <Attribute name="columnAnchorPoint" type="string" value="LEFT"/> <Attribute name="columnAnchorPoint" type="string" value="LEFT"/>
 
12 12 <Attribute name="maxColumns" type="number" value="5"/> <Attribute name="maxColumns" type="number" value="5"/>
13 13 <Attribute name="template" type="string" value="ChorusRaidUnitButtonTemplate"/> <Attribute name="template" type="string" value="ChorusRaidUnitButtonTemplate"/>
14 14 <Attribute name="unitsPerColumn" type="number" value="1"/> <Attribute name="unitsPerColumn" type="number" value="1"/>
15 <Attribute name="columnSpacing" type="number" value="12"/>
15 16 </Attributes> </Attributes>
16 17 </Frame> </Frame>
17 18 <Frame name="ChorusRaidFrame"> <Frame name="ChorusRaidFrame">
18 19 <Size> <Size>
19 <AbsDimension x="768" y="512"/>
20 <AbsDimension x="1024" y="512"/>
20 21 </Size> </Size>
21 22 <Anchors> <Anchors>
22 23 <Anchor point="TOPLEFT"> <Anchor point="TOPLEFT">
23 24 <Offset> <Offset>
24 <AbsDimension x="0" y="0"/>
25 <AbsDimension x="0" y="-360"/>
25 26 </Offset> </Offset>
26 27 </Anchor> </Anchor>
27 28 </Anchors> </Anchors>
28 29 <Frames> <Frames>
29 30 <Frame name="$parentGroupFrame1" inherits="ChorusRaidFrameGroupFrameTemplate" id="1"> <Frame name="$parentGroupFrame1" inherits="ChorusRaidFrameGroupFrameTemplate" id="1">
30 <Size>
31 <AbsDimension x="800" y="144"/>
32 </Size>
33 31 <Anchors> <Anchors>
34 32 <Anchor point="BOTTOMLEFT" relativeTo="$parent" relativePoint="BOTTOMLEFT"> <Anchor point="BOTTOMLEFT" relativeTo="$parent" relativePoint="BOTTOMLEFT">
35 33 <Offset> <Offset>
 
48 46 </Attributes> </Attributes>
49 47 </Frame> </Frame>
50 48 <Frame name="$parentGroupFrame2" inherits="ChorusRaidFrameGroupFrameTemplate" id="2"> <Frame name="$parentGroupFrame2" inherits="ChorusRaidFrameGroupFrameTemplate" id="2">
51 <Size>
52 <AbsDimension x="800" y="144"/>
53 </Size>
54 49 <Anchors> <Anchors>
55 50 <Anchor point="BOTTOMLEFT" relativeTo="$parentGroupFrame1" relativePoint="TOPLEFT"> <Anchor point="BOTTOMLEFT" relativeTo="$parentGroupFrame1" relativePoint="TOPLEFT">
56 51 <Offset> <Offset>
 
63 58 </Attributes> </Attributes>
64 59 </Frame> </Frame>
65 60 <Frame name="$parentGroupFrame3" inherits="ChorusRaidFrameGroupFrameTemplate" id="3"> <Frame name="$parentGroupFrame3" inherits="ChorusRaidFrameGroupFrameTemplate" id="3">
66 <Size>
67 <AbsDimension x="800" y="144"/>
68 </Size>
69 61 <Anchors> <Anchors>
70 62 <Anchor point="BOTTOMLEFT" relativeTo="$parentGroupFrame2" relativePoint="TOPLEFT"> <Anchor point="BOTTOMLEFT" relativeTo="$parentGroupFrame2" relativePoint="TOPLEFT">
71 63 <Offset> <Offset>
 
78 70 </Attributes> </Attributes>
79 71 </Frame> </Frame>
80 72 <Frame name="$parentGroupFrame4" inherits="ChorusRaidFrameGroupFrameTemplate" id="4"> <Frame name="$parentGroupFrame4" inherits="ChorusRaidFrameGroupFrameTemplate" id="4">
81 <Size>
82 <AbsDimension x="800" y="144"/>
83 </Size>
84 73 <Anchors> <Anchors>
85 74 <Anchor point="BOTTOMLEFT" relativeTo="$parentGroupFrame3" relativePoint="TOPLEFT"> <Anchor point="BOTTOMLEFT" relativeTo="$parentGroupFrame3" relativePoint="TOPLEFT">
86 75 <Offset> <Offset>
 
93 82 </Attributes> </Attributes>
94 83 </Frame> </Frame>
95 84 <Frame name="$parentGroupFrame5" inherits="ChorusRaidFrameGroupFrameTemplate" id="5"> <Frame name="$parentGroupFrame5" inherits="ChorusRaidFrameGroupFrameTemplate" id="5">
96 <Size>
97 <AbsDimension x="800" y="144"/>
98 </Size>
99 85 <Anchors> <Anchors>
100 86 <Anchor point="BOTTOMLEFT" relativeTo="$parentGroupFrame4" relativePoint="TOPLEFT"> <Anchor point="BOTTOMLEFT" relativeTo="$parentGroupFrame4" relativePoint="TOPLEFT">
101 87 <Offset> <Offset>
 
108 94 </Attributes> </Attributes>
109 95 </Frame> </Frame>
110 96 <Frame name="$parentGroupFrame6" inherits="ChorusRaidFrameGroupFrameTemplate" id="6"> <Frame name="$parentGroupFrame6" inherits="ChorusRaidFrameGroupFrameTemplate" id="6">
111 <Size>
112 <AbsDimension x="800" y="144"/>
113 </Size>
114 97 <Anchors> <Anchors>
115 98 <Anchor point="BOTTOMLEFT" relativeTo="$parentGroupFrame5" relativePoint="TOPLEFT"> <Anchor point="BOTTOMLEFT" relativeTo="$parentGroupFrame5" relativePoint="TOPLEFT">
116 99 <Offset> <Offset>
 
123 106 </Attributes> </Attributes>
124 107 </Frame> </Frame>
125 108 <Frame name="$parentGroupFrame7" inherits="ChorusRaidFrameGroupFrameTemplate" id="7"> <Frame name="$parentGroupFrame7" inherits="ChorusRaidFrameGroupFrameTemplate" id="7">
126 <Size>
127 <AbsDimension x="800" y="144"/>
128 </Size>
129 109 <Anchors> <Anchors>
130 110 <Anchor point="BOTTOMLEFT" relativeTo="$parentGroupFrame6" relativePoint="TOPLEFT"> <Anchor point="BOTTOMLEFT" relativeTo="$parentGroupFrame6" relativePoint="TOPLEFT">
131 111 <Offset> <Offset>
 
138 118 </Attributes> </Attributes>
139 119 </Frame> </Frame>
140 120 <Frame name="$parentGroupFrame8" inherits="ChorusRaidFrameGroupFrameTemplate" id="8"> <Frame name="$parentGroupFrame8" inherits="ChorusRaidFrameGroupFrameTemplate" id="8">
141 <Size>
142 <AbsDimension x="800" y="144"/>
143 </Size>
144 121 <Anchors> <Anchors>
145 122 <Anchor point="BOTTOMLEFT" relativeTo="$parentGroupFrame7" relativePoint="TOPLEFT"> <Anchor point="BOTTOMLEFT" relativeTo="$parentGroupFrame7" relativePoint="TOPLEFT">
146 123 <Offset> <Offset>
 
153 130 </Attributes> </Attributes>
154 131 </Frame> </Frame>
155 132 </Frames> </Frames>
133 <Scripts>
134 <OnLoad>
135 self:RegisterEvent('PLAYER_LOGIN');
136 self:SetScript('OnEvent', function(f)
137 f:UnregisterAllEvents()
138 local p = self:GetParent() or UIParent;
139 f:SetPoint('TOPLEFT', p, 'TOPLEFT', (p:GetWidth() - f:GetWidth()) / 2, p:GetHeight() / -3);
140 f:SetPoint('BOTTOMRIGHT', p, 'TOPLEFT', p:GetWidth() / 3, p:GetHeight() / -3 * 2);
141 end)
142 </OnLoad>
143 </Scripts>
156 144 </Frame> </Frame>
157 145 </Ui> </Ui>
File src/ChorusRaidUnitButtonTemplate.xml changed (mode: 100644) (index f5c692a..16db61a)
3 3 <Script file="ChorusRaidUnitButtonTemplate.lua"/> <Script file="ChorusRaidUnitButtonTemplate.lua"/>
4 4 <Button name="ChorusRaidUnitButtonTemplate" toplevel="true" inherits="SecureUnitButtonTemplate" virtual="true" enableMouse="true"> <Button name="ChorusRaidUnitButtonTemplate" toplevel="true" inherits="SecureUnitButtonTemplate" virtual="true" enableMouse="true">
5 5 <Size> <Size>
6 <AbsDimension x="144" y="84"/>
6 <AbsDimension x="204" y="126"/>
7 7 </Size> </Size>
8 <Layers>
9 <Layer level="BACKGROUND">
10 <Texture name="$parentBackground">
11 <Color r="0" g="0" b="0"/>
12 </Texture>
13 </Layer>
14 </Layers>
15 8 <Frames> <Frames>
16 9 <Frame name="$parentUnitNameFrame" inherits="ChorusUnitNameFrameTemplate"> <Frame name="$parentUnitNameFrame" inherits="ChorusUnitNameFrameTemplate">
17 10 <Anchors> <Anchors>
 
36 29 </Anchor> </Anchor>
37 30 <Anchor point="BOTTOMRIGHT" relativeTo="$parent" relativePoint="TOPRIGHT"> <Anchor point="BOTTOMRIGHT" relativeTo="$parent" relativePoint="TOPRIGHT">
38 31 <Offset> <Offset>
39 <AbsDimension x="0" y="-36"/>
32 <AbsDimension x="0" y="-48"/>
40 33 </Offset> </Offset>
41 34 </Anchor> </Anchor>
42 35 </Anchors> </Anchors>
 
55 48 </Anchor> </Anchor>
56 49 </Anchors> </Anchors>
57 50 </StatusBar> </StatusBar>
58 <Frame name="$parentRaidTargetIconFrame" inherits="ChorusRaidTargetIconFrameTemplate">
51 <Frame name="$parentRaidTargetIconFrame" inherits="ChorusRaidTargetIconFrameTemplate" frameStrata="TOOLTIP">
59 52 <Anchors> <Anchors>
60 <Anchor point="TOPLEFT" relativeTo="$parentPowerFrame" relativePoint="BOTTOMLEFT">
53 <Anchor point="TOPLEFT" relativeTo="$parent" relativePoint="TOPLEFT">
61 54 <Offset> <Offset>
62 <AbsDimension x="0" y="0"/>
55 <AbsDimension x="94" y="-36"/>
63 56 </Offset> </Offset>
64 57 </Anchor> </Anchor>
65 58 </Anchors> </Anchors>
66 59 </Frame> </Frame>
67 <Frame name="$parentThreatFrame" inherits="ChorusThreatFrameTemplate">
60 <Frame name="$parentThreatFrame" inherits="ChorusThreatFrameTemplate" frameStrata="TOOLTIP">
68 61 <Anchors> <Anchors>
69 <Anchor point="TOPLEFT" relativeTo="$parentPowerFrame" relativePoint="BOTTOMLEFT">
62 <Anchor point="TOPLEFT" relativeTo="$parent" relativePoint="TOPLEFT">
70 63 <Offset> <Offset>
71 <AbsDimension x="16" y="0"/>
64 <AbsDimension x="0" y="-36"/>
72 65 </Offset> </Offset>
73 66 </Anchor> </Anchor>
74 67 </Anchors> </Anchors>
75 68 </Frame> </Frame>
76 <Frame name="$parentRangeFrame" inherits="ChorusRangeFrameTemplate">
69 <Frame name="$parentRangeFrame" inherits="ChorusRangeFrameTemplate" frameStrata="TOOLTIP">
77 70 <Anchors> <Anchors>
78 <Anchor point="TOPRIGHT" relativeTo="$parentPowerFrame" relativePoint="BOTTOMRIGHT">
71 <Anchor point="TOPRIGHT" relativeTo="$parent" relativePoint="TOPLEFT">
79 72 <Offset> <Offset>
80 <AbsDimension x="0" y="0"/>
73 <AbsDimension x="0" y="-36"/>
81 74 </Offset> </Offset>
82 75 </Anchor> </Anchor>
83 76 </Anchors> </Anchors>
84 77 </Frame> </Frame>
85 78 <Frame name="$parentBuffFrame" inherits="ChorusAuraFrameTemplate"> <Frame name="$parentBuffFrame" inherits="ChorusAuraFrameTemplate">
86 <Size>
87 <AbsDimension x="144" y="24"/>
88 </Size>
89 79 <Anchors> <Anchors>
90 <Anchor point="TOPLEFT" relativeTo="$parentPowerFrame" relativePoint="BOTTOMLEFT">
80 <Anchor point="BOTTOMLEFT">
91 81 <Offset> <Offset>
92 <AbsDimension x="0" y="-16"/>
82 <AbsDimension x="0" y="36"/>
83 </Offset>
84 </Anchor>
85 <Anchor point="TOPRIGHT" relativeTo="$parent" relativePoint="BOTTOMLEFT">
86 <Offset>
87 <AbsDimension x="0" y="66"/>
93 88 </Offset> </Offset>
94 89 </Anchor> </Anchor>
95 90 </Anchors> </Anchors>
96 91 </Frame> </Frame>
97 92 <Frame name="$parentDebuffFrame" inherits="ChorusAuraFrameTemplate"> <Frame name="$parentDebuffFrame" inherits="ChorusAuraFrameTemplate">
98 <Size>
99 <AbsDimension x="144" y="24"/>
100 </Size>
101 93 <Anchors> <Anchors>
102 <Anchor point="TOPLEFT" relativeTo="$parentBuffFrame" relativePoint="BOTTOMLEFT">
94 <Anchor point="BOTTOMLEFT">
103 95 <Offset> <Offset>
104 96 <AbsDimension x="0" y="0"/> <AbsDimension x="0" y="0"/>
105 97 </Offset> </Offset>
106 98 </Anchor> </Anchor>
99 <Anchor point="TOPRIGHT" relativeTo="$parent" relativePoint="BOTTOMLEFT">
100 <Offset>
101 <AbsDimension x="0" y="30"/>
102 </Offset>
103 </Anchor>
107 104 </Anchors> </Anchors>
108 105 </Frame> </Frame>
109 106 </Frames> </Frames>
File src/ChorusTestFrame.xml deleted (index 58ab00f..0000000)
1 <?xml version="1.0" encoding="UTF-8"?>
2 <Ui xmlns="http://www.blizzard.com/wow/ui/">
3 <Frame name="ChorusPartyFrame" inherits="ChorusRaidFrameGroupFrame">
4 <Size>
5 <AbsDimension x="800" y="600"/>
6 </Size>
7 <Anchors>
8 <Anchor point="CENTER">
9 <Offset>
10 <AbsDimension x="0" y="0"/>
11 </Offset>
12 </Anchor>
13 <Anchor point="BOTTOM">
14 <Offset>
15 <AbsDimension x="0" y="96"/>
16 </Offset>
17 </Anchor>
18 </Anchors>
19 <Attributes>
20 <Attribute name="showParty" type="boolean" value="true"/>
21 </Attributes>
22 </Frame>
23 <Frame name="ChorusTestFrame">
24 <Size>
25 <AbsDimension x="800" y="600"/>
26 </Size>
27 <Anchors>
28 <Anchor point="CENTER">
29 <Offset>
30 <AbsDimension x="0" y="0"/>
31 </Offset>
32 </Anchor>
33 </Anchors>
34 </Frame>
35 </Ui>
File src/ChorusUnitNameFrameTemplate.lua changed (mode: 100644) (index 48bbe16..a27b822)
... ... function Chorus.unitNameFrameMain(self)
67 67
68 68 self.unit = 'none' self.unit = 'none'
69 69
70 --[[ FIXME Sometimes some unit buttons in raid frames cannot be clicked. ]]--
70 71 self:SetScript('OnEvent', unitNameEventProcessor) self:SetScript('OnEvent', unitNameEventProcessor)
71 72
72 73 self:RegisterEvent('PARTY_CONVERTED_TO_RAID') self:RegisterEvent('PARTY_CONVERTED_TO_RAID')
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/vrtc/chorus

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/vrtc/chorus

Clone this repository using git:
git clone git://git.rocketgit.com/user/vrtc/chorus

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main