ElvUI WindTools

ElvUI WindTools

5M Downloads

bug: Rematch Skin

Closed this issue · 8 comments

commented

Did you check these before submitting?

  • I have updated ElvUI to the latest version before submitting this issue
  • I have updated ElvUI_WindTools to the latest version before submitting this issue
  • I have not read any of these steps, please close my issue when you see it.
  • I have tested the issue with /wtdebug on before

ElvUI Version

14.02

ElvUI_WindTools Version

4.01

Describe the bug

I'm aware that the rematch skin is a work in progress, and I'm sorry if this should've been 3 separate bug reports.

I've found 3 problems with the rematch skin:

  1. The primary color is wrong with the Rematch UI.
    Image

  2. When switching tabs in the standalone Rematch window, the whole Rematch window move one pixel. It doesnt in the attached window.
    https://github.com/user-attachments/assets/17507578-89bb-40e1-949e-bf8cac4c13c2

  3. When opening the standalone Rematch window, before the regular Pet Journal, I get the following error:

BugSack error
4x WindTools [ERROR]
Failed to proxy function: frame is nil. 
 funcName: HandleCheckBox
[ElvUI_WindTools/Core/Functions/Developer.lua]:73: in function 'ThrowError'
[ElvUI_WindTools/Modules/Skins/Core.lua]:612: in function 'Proxy'
[ElvUI_WindTools/Modules/Skins/Addons/Rematch.lua]:1425: in function <...Ons/ElvUI_WindTools/Modules/Skins/Addons/Rematch.lua:1423>
[tail call]: ?
[C]: in function 'Show'
[Rematch/layout/frame.lua]:108: in function 'Toggle'
[REMATCH_WINDOW]:1: in function <[string "REMATCH_WINDOW"]:1>

Locals:
message = "Failed to proxy function: frame is nil. 
 funcName: HandleCheckBox"
_G = <table> {
 ERR_OUT_OF_CHI = "Not enough chi"
 DH_HAVOC_CORE_ABILITY_2 = "Strong melee attack that consumes Fury. If it critical strikes, some Fury is refunded."
 MultiCastActionButton6Cooldown = MultiCastActionButton6Cooldown {
 }
 MerchantItem9ItemButtonStock = MerchantItem9ItemButtonStock {
 }
 UNIT_NAMES_COMBATLOG_TOOLTIP = "Color unit names."
 ElvUI_Bar5Button11Count = ElvUI_Bar5Button11Count {
 }
 HUD_EDIT_MODE_SETTING_ACTION_BAR_HIDE_BAR_ART = "Hide Bar Art"
 LE_GAME_ERR_CHAT_RAID_RESTRICTED_TRIAL = 799
 SPELL_FAILED_CUSTOM_ERROR_71 = "This partygoer wants to dance with you."
 LE_GAME_ERR_PET_SPELL_TARGETS_DEAD = 435
 ERROR_CLUB_TICKET_COUNT_AT_MAX_COMMUNITY = "Can't create any more invite links for this community."
 RecruitAFriendFrame = RecruitAFriendFrame {
 }
 TutorialFrameLeft19 = TutorialFrameLeft19 {
 }
 MultiCastActionButton2Cooldown = MultiCastActionButton2Cooldown {
 }
 ERR_TRADE_EQUIPPED_BAG = "You can't trade equipped bags."
 PVP_RANK_6_1 = "Corporal"
 MultiBarLeftButton7 = MultiBarLeftButton7 {
 }
 OPTION_TOOLTIP_SHOW_MULTIBAR4 = "Attached to the left side of Right Action Bar 1 by default"
 LE_GAME_ERR_INVALID_FOLLOW_PVP_COMBAT = 389
 MerchantItem3AltCurrencyFrameItem1Text = MerchantItem3AltCurrencyFrameItem1Text {
 }
 PROFESSIONS_COLUMN_REAGENTS_NONE = "None"
 OPTION_SHOW_ACTION_BAR5_TOOLTIP = "Attached to the left side of Action Bar 4 by default"
 BINDING_NAME_NAMEPLATES = "Show Enemy Nameplates"
 CHAT_HEADER_SUFFIX = ": "
 COVENANT_MISSIONS_HEALTH = "Health"
 MAIL_LETTER_TOOLTIP = "Click to make a permanent
copy of this letter."
 PVPReadyDialogBottomArt = PVPReadyDialogBottomArt {
 }
 MultiBar6Button4Flash = MultiBar6Button4Flash {
 }
 MANA = "Mana"
 CHAT_CONFIG_OTHER_COMBAT = <table> {
 }
 RematchGameTooltipTexture13 = RematchGameTooltipTexture13 {
 }
 ClassNameplateBarPaladinFrameRune5 = ClassNameplateBarPaladinFrameRune5 {
 }
 TutorialFrameRight19 = TutorialFrameRight19 {
 }
 BN_UNABLE_TO_RESOLVE_NAME = "Unable to whisper '%s'. Blizzard services may be unavailable."
 AddonListClearButton = AddonListClearButton {
 }
 LE_GAME_ERR_ONLY_ONE_QUIVER = 36
 INT_SPELL_DURATION_HOURS = "%d |4hour:hrs;"
 LOSS_OF_CONTROL_DISPLAY_FEAR = "Feared"
 POWERBAR_PREDICTION_COLOR_MAELSTROM_CODE = "|cff003366"
 ElvUI_Bar6Button6 = ElvUI_Bar6Button6 {
 }
 DMG_LCD = "DMG"
 ACTION_SPELL_MISSED_POSSESSIVE = "1"
 RaidUtility_CloseButton = RaidUtility_CloseButton {
 }
 SLASH_STOPATTACK1 = "/stopattack"
 MAP_LEGEND_RARE_TOOLTIP = "A special creature that provides various rewards"
 MultiCastActionButton4HotKey = MultiCastActionButton4HotKey {
 }
 MINIMAP_TRACKING_TRAINER_CLASS = "Class Trainer"
 SLASH_DISMOUNT2 = "/dismount"
 DUNGEON_FLOOR_DRAGONBLIGHTCHROMIESCENARIO2 = "Andorhal"
 EMOTE69_CMD1 = "/nosepick"
 WowTokenRedemptionFrameBg = WowTokenRedemptionFrameBg {
 }
 ElvUF_PartyGroup1UnitButton6AurasButton2 = ElvUF_PartyGroup1UnitButton6AurasButton2 {
 }
 SHIELD_BLOCK_TEMPLATE = "%s Block"
 AutoFollowStatus = AutoFollowStatus {
 }
 ARENA_CASUAL = "Skirmish"
 STABLE_PET_ABILITIES_LIST_HEADER = "Special Abilities"
 SendStationeryBackgroundRight = SendStationeryBackgroundRight {
 }
 MultiBarLeftButton11Name = MultiBarLeftButton11Name {
 }
 KEY_ABBR_PADLSTICK = "|A:Gamepad_Gen_LStickIn_32:14:14|a"
 CONQUEST_BAR = "Conquest %d / %d"
 MultiBarLeftButton9Border = MultiBarLeftButton9Border {
 }
 POSTMASTER_PIPE_KALIMDOR = "Kalimdor"
 UIWidgetCenterDisplayFrameText = UIWidgetCenterDisplayFrameText {
 }
 OPTION_TOOLTIP_SHOW_ACCOUNT_ACHIEVEMENTS = "Turning this option on will only display your character achievements when people inspect you or use the Blizzard website."
 SPIRIT_HEALER_RELEASE_RED = "|cffff2020Spirit Healer|r"
 OPTION_TOOLTIP_FIX_LAG = "Enabling this reduces user interface lag, but may drastically reduce frame rates."
 ARTIFACT_XP_FULL = "%s is at max level."
 VOICEMACRO_8_Tr_1_FEMALE = "Cure me!"
 ElvUI_Bar3Button7Name = ElvUI_Bar3Button7Name {
 }
 RAF_REMOVE_RECRUIT_CONFIRM = "Are you sure you want to remove|n|cffffd200%s|r|n from your

Steps To Reproduce

  1. Open standalone Window, and change tabs. (Pets / Teams / Targets / Queue / Options)
  2. Open standalone Window before Blizzard Pet Journal

Expected Behavior

  1. I expect the colors to match rest of the ElvUI colors.
  2. I expect windows to not move.
  3. Bugs are bag.
commented
  1. The background is by design. Because Rematch actually overlays on top of the original pet panel rather than replacing it, hiding the original pet panel is also risky as it might cause it to not show up anymore. So to avoid the underlying Blizzard pet panel content overlapping with Rematch, we have to use an opaque texture. The color used here is from the ElvUI skinning system, which you can adjust yourself. (ElvUI skinning always has two categories for backgrounds: "default" and "transparent" - both should be considered as usable for background colors)
  2. The standalone mode is not tested during development because I don't know how to trigger it.
commented
  1. The background is by design. Because Rematch actually overlays on top of the original pet panel rather than replacing it, hiding the original pet panel is also risky as it might cause it to not show up anymore. So to avoid the underlying Blizzard pet panel content overlapping with Rematch, we have to use an opaque texture.

I do see that Rematch does place itself on top of the PetJournal via: /run RematchFrame:Hide() but that also made me notice they do hide the original PetJournal frame. I checked the source to confirm. So maybe if you undo/hide/change the CollectionsJournal skin when rematch is visible, it might be possible to make use of the faded background color. 🤔

  1. The standalone mode is not tested during development because I don't know how to trigger it.

Keybind or /rematch

commented
Capturer_2025-10-17_205306_628.mp4
commented

You can use /run RematchFrame:SetTemplate("Transparent") to preview the transparent background.

Image
commented

And I have already tried do some modification on the original one, but it may cause taint and bring much more bugs.
considering it just a skin, use /run RematchFrame:SetTemplate("Default") (which is ElvUI default background color) is more better.

commented

The other 2 bugs now fixed, and I also add the missing skin to mini loadout
try 4.02-alpha-1

commented

I checked the alpha build, All good👍

As for the skinning, if you're still interested in being able to use the transparent template, I got working a script that seems to well for me.

If not, I'll gladly close this issue. 😉Either way, Thank you for a great addon!

The Script
local rematch

local function HideSkin()
	if not rematch.journal:IsActive() then return end
	CollectionsJournal.backdrop:SetTemplate('NoBackdrop')
	CollectionsJournalCloseButton:Hide()
	CollectionsJournalTitleText:Hide()
end
local function RestoreSkin()
	if not rematch.journal:IsActive() then return end
	CollectionsJournal.backdrop:SetTemplate('Transparent')
	CollectionsJournalCloseButton:Show()
	CollectionsJournalTitleText:Show()
end

ZoeyUI:RegisterInitAddonCallback('Rematch', function()
	rematch = _G.Rematch

	-- Node: Secure hooks are executed after the original script
	ZoeyUI:SecureHook(rematch.journal, 'PLAYER_REGEN_ENABLED', HideSkin)
	ZoeyUI:SecureHook(rematch.journal, 'PetJournalOnShow', HideSkin)

	ZoeyUI:Hook(rematch.journal, 'PLAYER_REGEN_DISABLED', RestoreSkin)
	ZoeyUI:Hook(rematch.journal, 'PetJournalOnHide', RestoreSkin)

	-- This button removes rematch from the collections journal
	ZoeyUI:HookScript(rematch.bottombar.UseRematchCheckButton, 'OnClick', RestoreSkin)

	rematch.frame:SetTemplate("Transparent")
end)

The timing of when the hooks execute is important due to rematch.journal:IsActive() and how Rematch sets it's parent when it hides and shows when attached to the Collections Journal.

Note: ZoeyUI.RegisterInitAddonCallback is my own creation that works very similarly to your S.AddCallbackForAddon,

commented

Looks good~

Added in 97b0092