Commit Graph

12 Commits

Author SHA1 Message Date
Adrestie 5842eb7a2b ForeverUI : code en anglais, commentaires resserres, code mort retire
Traduction
- Identifiants en anglais dans tout le module : addon, ecrans d'accueil,
  outils Python, banc d'essai et patcheur C#.
- Fichiers au nom francais renommes (Gabarits.lua -> Templates.lua,
  Textes_*.lua -> Texts_*.lua, deployer.py -> deploy.py,
  tools/patcheur -> tools/patcher, etc.).
- Commandes /fui et options de deploy.py en anglais (--check, --server,
  --remove-dbc).
- Cles des variables sauvegardees et de data/dbc/statistics.json
  traduites, sans reprise des anciennes cles.
- API de la micro-barre : ForeverUI.AddMicroButton(def) avec les champs
  name, atlasSet, after, tooltip, onClick, ready, et
  ForeverUI.UpdateMicro(name, isOpen).
- Commentaires reecrits en anglais, courts, sans dates ni historique ;
  les fonctions au nom peu parlant et leurs parametres sont expliques.

Code mort
- Exports, fonctions et variables jamais lus retires.
- Retires a la demande des modules : ForeverUI.PvPJauge, les exports
  FondEntete / TuilerEntete / Polices de TradeSkill, l'art legacy-up-c60,
  honorfill(half)blue et inv_misc_book_09, leurs entrees d'atlas et les
  parties d'outils correspondantes.

Verifications : liaisons des noms comparees avant et apres, banc vert,
chemins de textures inchanges, generateurs reproduisant les fichiers,
patcheur identique octet pour octet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 09:15:52 +02:00
Adrestie 4628f3b4fb Social camelot (contacts, qui, guilde, raid, canaux), onglet PvP, cadres de groupe et de raid, bouton Social en tabard, fenetre de tabard camelot
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-26 14:00:12 +02:00
Adrestie 628cdb05e5 Gestionnaire : "New Set" en bouton tertiaire, comme les selecteurs
La recette du bouton tertiaire et ses mesures passent dans
ForeverUI.SkinTertiaryButton (AtlasUtil), employee par les selecteurs de
statistiques et par ce bouton. Son option auto fait suivre l'etat presse
au bouton de la souris ; sans elle l'appelant commande, ce que font les
selecteurs dont l'etat tient tant que leur liste est ouverte.

L'intitule est ecrit en dur : PAPERDOLL_NEWEQUIPMENTSET n'existe pas ici
et ce client ne porte aucune chaine equivalente.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 15:46:54 +02:00
Adrestie 4c705b6204 Feuille : encadrement jusqu'en bas, et monte d'1 px
camelot/NineSliceLayoutOverrides.lua repasse sur TOUTES les mises en
page apres les avoir definies, parce que son art ne fait pas la taille
de l'art standard : coin haut droit x += -2, coins du bas y = -8.

Nous prenions les valeurs non corrigees, d'ou deux coins du bas 5 px
trop haut -- l'encadrement n'allait pas jusqu'en bas de la fenetre -- et
deux coins de droite 2 px trop a droite.

SetPanelArt prend une option coins ; la feuille s'en sert, plus 1 px de
montee juge a l'ecran. La fenetre des sacs, qui est validee, n'est pas
touchee bien que la meme correction s'y applique.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 13:44:48 +02:00
Adrestie ef3955a9d9 Listes de menu : fond en neuf tranches, cale sur le bord du cadre
Camelot etire common-dropdown-bg d'un bord a l'autre. Mesure sur l'image
68 x 68 : le panneau n'occupe que x 9..58 et y 6..55, le reste est une
ombre de 9 / 6 / 9 / 12 et les angles sont coupes sur 6. Etiree sur une
liste de 200 x 130, cette ombre est multipliee par 3,3 en largeur et par
2 en hauteur -- le filet rentre d'une vingtaine de pixels, les angles
s'ecrasent et le bas du panneau remonte au-dessus de la derniere ligne.

ForeverUI.CreateNineSlice decoupe une image en neuf : coins a leur
taille, bords etires dans un seul sens, centre dans les deux. Coin de 18
(ombre la plus epaisse 12 + pan coupe 6), marges prises sur l'image pour
que le filet tombe sur le bord du cadre.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 09:09:32 +02:00
Adrestie 809f40c523 mod-forever-ui: le fond du panneau reste au dernier plan
En logeant l'art du panneau dans un cadre fils pour qu'il passe au-dessus
des volets, j'y ai emmene le FOND PLAT. C'est une surface opaque : montee
au-dessus, elle recouvre les volets a son tour.

Seul le metal monte desormais. Le fond reste une region du cadre, donc
sous tous ses cadres fils -- exactement la place qu'il lui faut. Les sacs
ne changent pas : sans l'option niveau, tout reste ou c'etait.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 03:06:27 +02:00
Adrestie 71618c8f63 mod-forever-ui: feuille du personnage, les six defauts du premier essai
QUATRE ONT LA MEME RACINE : les volets sont des cadres fils et recouvrent
toute region de leur parent, donc l'art du panneau pose sur le cadre
passait dessous. D'ou le contour qui ne collait pas aux fonds, le fond du
volet droit debordant sur le bord droit, celui du volet gauche mangeant
l'anneau, et le portrait vide. La source fait ce qu'il fallait faire : son
NineSlice est un cadre fils et son PortraitContainer un autre, a frameLevel
400. SetPanelArt accepte donc une option niveau, qui loge l'art dans un
cadre fils au-dessus.

Le coin haut gauche n'etait pas le bon : PortraitFrameBaseTemplate declare
layoutType = "PortraitFrameTemplate", qui ne differe de HeldBagLayout que
par lui -- un anneau plus large. SetPanelArt prend une option
coinHautGauche.

Le portrait etait vide parce que le balayage efface aussi celui du client.
On en pose un a nous, 44 centre sur le trou mesure de l'anneau (25 ; -22,5),
rempli par SetPortraitTexture. Le 44 vient du meme calcul que sur les sacs.

Le fond du volet droit ne remplissait pas : la source le declare SANS
ancrage, donc il remplit ; a sa taille d'atlas il laissait 81 px nus.

Le separateur s'etalait : common-framedivider porte un embout a chaque bout.
Il est decoupe en trois tranches par ses coordonnees de texture.

L'art d'epoque ne tient pas qu'au cadre : la feuille de 3.3.5 le repartit
sur ses sous-cadres, qui echappaient au balayage. La liste est balayee.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 02:51:11 +02:00
Adrestie 14c29b6e11 mod-forever-ui: l'icone tient dans l'anneau, et le coin du bas se rogne
Trois defauts vus sur la capture, trois causes.

L'ICONE RESTAIT CARREE. A 36 ses coins tombent a 25,5 du centre, au-dela du
metal de l'anneau qui s'arrete a 20,4 : ils depassaient. L'anneau est mesure
au pixel a la taille ou il est dessine -- trou net jusqu'a 10,3, degrade
jusqu'a 14,3, metal opaque de 14,3 a 20,4. Pour qu'un carre disparaisse il
faut demi-cote >= 14,3 et diagonale <= 20,4, soit un cote entre 28,6 et
28,8. 28 est la seule taille qui tienne, et elle donne le meme rond visible
que camelot, dont le disque mesure 28 sur la capture de reference.

LE TROUSSEAU AVAIT UNE BARRE DOREE EN TRAVERS DE SON ANNEAU. C'est
NineSliceUtil.UpdateCornerCropping qui manquait : sur une fenetre plus
courte que ses deux coins empiles -- 94 de haut contre 100 + 95 -- les coins
se chevauchent et le bord gauche, tendu entre eux, se dessine en travers.
La formule de ClipNineSliceBottomCorner est recopiee et rejouee a chaque
changement de hauteur, comme UpdateFrameSize le fait.

LE TROUSSEAU N'AVAIT PAS DE NOM. GetBagName(-2) ne rend rien ; on reprend
alors le titre que le client a pose lui-meme.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 00:39:33 +02:00
Adrestie 06ac79acf8 mod-forever-ui: HeldBagLayout au pixel pres, metal en OVERLAY
Les quatre coins prennent les decalages de la source -- TopLeft (-13, 16),
TopRight (4, 16), BottomLeft (-13, -3), BottomRight (4, -3) -- et les huit
morceaux passent en OVERLAY comme elle les declare. Les valeurs approchees
(2, 16) et (-13/2, -8), en BORDER, sont abandonnees.

En OVERLAY le metal couvre toute region du cadre lui-meme. La source s'en
accommode en rangeant ce qui doit rester visible dans des cadres fils
(TitleContainer a frameLevel 510, PortraitContainer), un cadre fils se
dessinant au-dessus des regions de son parent quel que soit leur calque. Le
titre est donc reproduit tel quel : un cadre de 20 de haut, de 35 a la
largeur moins 24, pose a -1, avec un FontString ancre TOP (0, -5), LEFT et
RIGHT. Le titre du client s'efface.

Le portrait reste sous le metal, qui lui sert de masque. Les boutons
d'objet, la bourse, le champ de recherche et le bouton de fermeture sont
deja des cadres fils : ils passent devant sans rien changer.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 00:09:51 +02:00
Adrestie 7a72cf649c mod-forever-ui: three differences the two captures gave up
Comparing my own bag with camelot's, side by side and pixel by pixel, named
what was wrong.

The panel let the world through. Camelot's interior is (16,14,12) and opaque:
the gaps between slots went blue on mine. The colour is now the measured one,
at full opacity.

The title and the bag icon were missing. The metal nine-slice sat in OVERLAY,
where the modern client can afford it because its portrait and title live in
child frames at high level; 3.3.5 keeps them as plain regions of the frame,
in BACKGROUND and ARTWORK, so the metal covered both. The nine-slice moves to
BORDER.

Every slot in camelot wears a frame, full or empty, dark grey: edges between
25 and 49, corners near 100, which is WhiteIconFrame at a tint of 0.39. Mine
showed it white and only on full slots. It is now on every slot at that tint,
and the quality colour takes over only from uncommon up -- the common items
of the capture keep the grey.

Both captures are kept in docs/reference/.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 22:47:50 +02:00
Adrestie e6dd4715b9 mod-forever-ui: the bag interface, with its search box and its sort button
The bag windows take the modern panel: the flat background and the metal
nine-slice border of HeldBagLayout, the portrait in the ring of the top left
corner, the title centred in the bar, and item slots on bags-item-slot64.
ForeverUI.SetPanelArt builds that panel and is written to serve every panel
still to come.

The search box and the sort button sit where the reference puts them, on the
backpack alone: the box 96 x 18 at (42, -37), the button 28 x 26 at (-9, -34).
Neither of the two things they call exists in 3.3.5, so both are written here:

- the search compares the typed text with the name, the type and the subtype
  of each item, and veils what does not match with the same black 80% overlay
  the reference uses;
- the sort merges partial stacks, then orders the items by the game's own
  category order (GetAuctionItemClasses), quality, name and stack size, one
  move every tenth of a second because each swap must be confirmed before the
  next.

tools/ajouter_feuilles.py brings a sheet into the workspace with its preview
and regenerates the atlas table; seven sheets came in this way. Previews are
now exported with the alpha channel, without which they cannot be judged.

docs/AMELIORATIONS.md lists what departs from the reference here, the sort
order first: it is decided inside the client and cannot be read.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 20:34:14 +02:00
Adrestie 115de7ed41 Add mod-forever-ui: the modern interface rebuilt for a 3.3.5a client
The addon and the art it needs, read from a modern client and served to
3.3.5 through texture coordinates, since that client has no atlas.

What is in place: player frame with its states, death knight runes, target
frame and its classification rings, cast bar, action bar with its page block
and end caps, micro menu, bags bar, experience and reputation bars. Every
piece registers itself as a movable system.

This folder is the workspace. The addon in a client and the art in patch-Z
are copies tools/deployer.py makes, and what sits under Interface\ForeverUI
in the patch is exactly what data/art holds -- the deployer removes from the
archive anything this folder no longer carries. Each .blp comes with the .png
that shows what it holds.

docs/AMELIORATIONS.md lists what is known to be improvable: where the
reproduction departs from the reference and why, what the 2010 client cannot
do, and the debts left in the tooling.

The repository README also gains the row for mod-limit-break, which was
written earlier and had not been committed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 20:12:09 +02:00