71 Commits

Author SHA1 Message Date
Brues 06b3ae8d22 cooldown: stop shadowing the global time()
`local time = time()` bound the timestamp over the top of the time function
inside that branch, so any later call in the same scope would have indexed a
number. Nothing did, but the name is a trap. Call it currentTime.
2026-09-07 18:39:28 -05:00
Brues 879d7afe83 cooldown: throttle before the work, not after
The 0.1s gate sat below the hidden-cooldown check, so every frame, for every
ticking cooldown, the update built "<parent>Cooldown" twice and did two _G
lookups with it. Lua 5.0 interns on every concat -- it allocates and hashes
even when the string already exists -- so this was allocating garbage at the
frame rate times the number of live cooldowns. A profiler run had it at 24s
of accumulated CPU.

Move the gate to the top so a non-tick frame costs one GetTime() and a
compare. The name lookup goes away entirely: pfCreateCoolDown already has the
cooldown frame, so it stashes the reference instead. That is also more
correct than deriving it from the parent's name, which silently skipped the
check for any cooldown not named "<parent>Cooldown".

The text frame and its fontstring were both created with a fixed name, so
every one of the hundreds in a UI clobbered _G.pfCooldownFrame and left it
pointing at whichever was made last. Name them after the cooldown they render
for, falling back to a counter for anonymous ones.

One behavior change: the hidden-cooldown check is now throttled too, so text
can linger up to 100ms after its cooldown frame hides. It only refreshes at
0.1s anyway, and expiry still runs through the remaining < 0 branch.
2026-09-07 18:14:33 -05:00
roby-brok 69d778d6d6 Fix two dangling skin includes and four error paths (#39)
* skins: drop includes for two files that were never committed

init/skins.xml referenced custom_merchant.lua and arena_score.lua, neither of
which is tracked in git. Every install -- release zips included, since the
release workflow packages the repo -- throws two 'Error loading' lines at
login and ships without those two skins.

(cherry picked from commit b338b4a16d0def4ae89fde5c6026e58a796b8c00)

* map: don't re-anchor the world map to the frame GetPoint returned

Ctrl+scroll rescales the map and repositions it to keep the top-left fixed, but
it re-anchored using the relative frame GetPoint handed back. Once anything else
is anchored to WorldMapFrame that throws

  WorldMapFrame:SetPoint(): <unnamed> is dependent on this

and the error aborts the rest of the zoom handler, so SetScale never runs.

Anchor to the parent instead. That is what the rest of pfUI's movable system
already assumes -- LoadMovable uses the 3-arg form and SaveMovable stores only
xpos/ypos with no relative frame.

(cherry picked from commit bf055d87fc0a04ac912c13fa874a4331f47bdfa8)

* firstrun: return after bailing on a disabled chat module

All three chat setup steps printed 'Chat module is disabled' and then carried on
into the nil pfUI.chat they had just tested for.

(cherry picked from commit 1af427e3b38bb7c13f645ae7a48b8ade3e7455a9)

* unitxp: stop the free-frame distance poller on logout

The PLAYER_LOGOUT handler stops the indicators to avoid the UnitXP crash on
exit, but in free-frame distance mode the polling runs on a separate scanner
frame that was never exposed, so the handler could not reach it and its
OnUpdate kept calling into UnitXP during teardown.

Exposes the frame as pfUI.uf.target.distanceScanner and stops it alongside the
others.

* roll: bail out on an item the client has not cached

C_Item.GetItemInfo returns nil for an item that is not cached yet, and the next
line assigns pfUI.roll.cache[itemName], which throws "table index is nil" on a
nil key. Easy to hit on a fresh login when someone rolls on an item you have
never seen.

* cooldown: return after hiding on a nil parent

Without the return it falls straight through to parent:GetName() on the nil it
just tested for.
2026-08-10 01:00:47 -05:00
Brues fe0ec82ede Route config color strings through GetStringColor cache
Replace raw strsplit(",", ...) color parsing across action bars, chat,
nameplates, third-party skins, player, and roll with the cached
GetStringColor / GetStringColorObject helpers, dropping the per-build
string-table allocations they created.
2026-08-04 22:27:43 -05:00
Brues 13a08b0ea3 Restore hooksecurefunc 2026-07-09 23:01:52 -05:00
Brues 3fe072c594 Route hooksecurefunc callers through pfUI.hooksecurefunc; global belongs to ClassicAPI
pfUI's Lua hooksecurefunc lived in pfUI.env and shadowed ClassicAPI's C
global for all pfUI code. Replace it with a thin pfUI.hooksecurefunc shim
that keeps the missing-target no-op our call sites rely on (ClassicAPI
errors on a nil target) and delegates the actual hook to _G.hooksecurefunc.

Migrated all 70 internal call sites (modules/libs/skins) to
pfUI.hooksecurefunc; bare hooksecurefunc now resolves to ClassicAPI's C
version everywhere. Dropped the unused prepend path and the orphaned
pfUI.hooks table.
2026-07-05 14:58:26 -05:00
Brues 710be52f35 phase 3 removing tbc
Drop the now-vestigial expansion plumbing.

- Delete modules/thirdparty-tbc.lua + its xml Include
- Strip 10 tbc-tagged CreateConfig calls in modules/gui.lua
- Drop the expansion arg from CreateConfig() signature + the disabled-
  entry rendering path that depended on it
- Drop the showdisabled GUI toggle + its default
- Simplify pfUI:RegisterModule / pfUI:RegisterSkin to (name, func) only
- Strip the leading version arg ("vanilla:tbc", etc.) from all 114
  Register call sites
- Delete the pfUI.expansion variable
2026-05-25 18:50:53 -05:00
Brues ba566cdd53 phase 2 removing tbc
Strip dead pfUI.client > 11200 and pfUI.expansion == "tbc" branches now
that vanilla is the only supported client.

- pfUI.lua: hardcode expansion = "vanilla"; collapse force_region matrix
- compat/vanilla.lua, libs/{libcast,libdebuff,libtotem,libunitscan,
  focus}: drop always-false early-returns
- api/unitframes.lua: delete TargetBuffOnUpdate poller + tbc visibility
  and secure-template branches; click-cast keeps only vanilla path
- api/ui-widgets.lua: unconditional EffectiveScale divide
- env/tables.lua: drop unused focus/focustarget pfValidUnits entries
- modules/actionbar.lua: simplify EnablePaging, drop ButtonSwitch/
  petvisibility, unwrap prowl block, single keybind-remap path
- modules/{castbar,chat,cooldown,loot,questitem,totems}: unwrap
  always-true conditionals
- modules/nameplates.lua: cfg-only fake-cooldown gate, unwrap overlap/
  clickthrough + mouselook blocks
- modules/friends.lua + skins/blizzard/friends.lua: maxtab = 4
- skins/blizzard/{help,game_menu,questlog}: drop tbc-only branches
2026-05-25 18:40:17 -05:00
Meow 1e459db21a hide CooldownStyleAnimation fix
hide CooldownStyleAnimation  fix
2026-01-25 08:44:16 +01:00
Meow 7898895cf4 timer animation fix
timer animation fix
2026-01-24 02:33:17 +01:00
Meow 34f5c3eb02 Version 6.1.0 - Raid/Party Frame Fixes
Bugfixes:
- Fixed 40-yard range check not working for raid/party frames
- Fixed aggro indicator not displaying properly on raid/party frames
- Improved aggro cache to only cache positive results for instant detection
- Fixed HP/Mana not updating with "Use Raid Frames for group" enabled
- Added SuperWoW nil-check for SpellInfo
- Added missing events: PARTY_MEMBER_ENABLE, PARTY_MEMBER_DISABLE, PLAYER_UPDATE_RESTING

UI Improvements:
- Share/Hoverbind buttons now show warning when module is disabled
2026-01-08 12:25:18 +01:00
Meow 5d0e195d1e performance update
performance update
2026-01-03 12:58:31 +01:00
shagu e277c501e6 cooldown: add tbc support for custom cooldown font
introduced via: https://github.com/shagu/pfUI/pull/1480
2025-06-24 11:46:44 +02:00
shagu c80830df1f cooldown: slightly increase text layer 2025-06-05 21:04:59 +02:00
dbulatovicx32 85998d81c7 cooldown: add option for custom cooldown fonts 2025-05-25 14:13:08 +02:00
shagu 810fc3ea24 cooldown: allow gcd disabled timers to reset duration 2025-04-21 06:52:21 +02:00
shagu 02443592cd cooldown: use the regular one-line throttle 2024-05-14 08:44:04 +02:00
shagu 0006b9c5d7 cooldown: cache parent name if existing 2024-05-14 08:37:33 +02:00
shagu 70653c7dcf cooldown: only update own alpha if parent changed 2024-05-14 08:35:38 +02:00
shagu f8316228d7 cooldown: a weird fix for weird cooldown issues
Some items with huge cooldowns (like Salt Shaker) send remaining
cooldown times that are way higher than they should be. You often
see a cooldown of 52d and alike. This seems to have "reasons" and
is fixed by this commit. All credits to the guys at:
https://github.com/Stanzilla/WoWUIBugs/issues/47
2022-07-02 21:38:32 +02:00
shagu a6c7b2d6e4 cooldown: use gcd threshold for other frames 2020-12-08 22:31:30 +01:00
shagu 8ce1baf00d cooldown: add option to use dynamic cooldown sizes 2020-10-04 19:45:27 +02:00
shagu 2d78824d06 cooldown: add option to hide foreign animations 2020-10-04 18:56:28 +02:00
shagu e192ccc8f3 cooldown: add support for omnicc disable flag 2020-10-04 18:35:03 +02:00
shagu b558cf7bc2 cooldown: align text to the actual cooldown frame 2020-10-04 18:33:34 +02:00
shagu 6bfd09d0d6 cooldown: use cached parent variable 2020-09-20 20:09:29 +02:00
shagu 5c403d8cc1 cooldown: inherit parent alpha values 2020-09-20 20:00:39 +02:00
shagu 4263e6e292 cooldown: hide cooldown text on hidden cooldowns 2020-09-20 13:45:22 +02:00
shagu 8df9f03436 cooldown: read variables to hide text or animation 2020-09-20 12:46:10 +02:00
shagu d28fe114a3 cooldown: cache parent frame to scoped variable 2020-09-20 12:44:51 +02:00
shagu 7669e64173 core: remove leftover semicolons 2020-08-15 19:29:24 +02:00
shagu e1317763ac cooldown: use different hook destination for tbc 2020-08-14 12:35:27 +02:00
shagu d5a9869417 cooldown: add possibility to use custom font sizes 2020-06-21 18:45:34 +02:00
shagu c90c0ea8ba cooldown: add fontsize option for frametypes 2019-12-04 17:29:07 +01:00
shagu e9237b59b2 core: use concrete string based client checks 2019-06-10 17:06:31 +02:00
shagu 7bc60e723d core: whitelist a bunch of modules for tbc 2019-04-07 14:48:58 +02:00
shagu bc5a659470 cooldown: add option to draw on foreign addons 2018-04-09 22:51:43 +02:00
shagu 95dafe25eb cooldown: enhance detection logic 2018-04-08 19:09:51 +02:00
shagu 41e2400bcb cooldown: only draw cd on known frames 2018-04-08 19:04:43 +02:00
shagu 0f7fd4a7b0 api: rework of color api functions 2018-03-18 00:20:17 +01:00
shagu d98c368c38 cooldown: small cooldown position adjustments 2017-07-29 21:16:57 +02:00
shagu 9a2993450e cooldown: add option to change fontsize 2017-06-18 23:24:46 +02:00
shagu bf35a4b982 fonts: integrate upgrade paths 2017-06-08 19:25:53 +02:00
shagu 0754244ee3 cooldown: make use of the new fontsize 2017-06-08 19:25:53 +02:00
shagu c4d5c1902f cooldown: color configuration and caching 2017-06-03 14:14:41 +02:00
shagu 3ef3113a8e cooldown: change color for cd lower than 3 sec 2017-03-01 20:20:39 +01:00
shagu 6402e29b1b api: rename to hooksecurefunc 2017-03-01 19:48:48 +01:00
shagu c83141ee68 cooldown: no break required 2017-02-27 20:14:28 +01:00
shagu 6f7a665ffe api: merge api calls into environment 2017-02-26 20:55:22 +01:00
shagu 1766dd4ba0 api: use C for config 2017-02-26 20:42:08 +01:00