pdulvp.fr

Écran titre, et le menu d'ouverture sur le tapis has been fixed.

See more details at : https://github.com/pdulvp/pdcartes-rami/issues/4

  • une page d'accueil avant le menu : le tapis du profil, des cartes au trait

d'or qui dérivent dessus, le logo PDCartes Rami en deux lignes décalées,
et « Cliquer pour commencer » qui respire ; un clic ou une touche mène au
menu

  • le menu d'ouverture passe sur le même tapis, en or et noir : plaques sombres

à filet d'or, pastilles de niveau creuses, et le logo en tête de page — où
il arrive en volant depuis l'écran titre pendant que la page paraît

  • le texte du menu fond : trois paragraphes d'aide et deux lignes de prose par

adversaire deviennent une seule ligne en bas de page, le reste étant déjà
dit par l'aperçu au survol et par la fiche de chacun

  • la fonte d'affichage ZenTokyoZoo voyage dans le binaire

(qt_add_resources, :/fonts/), sa licence OFL s'installe à côté du jeu ;
sans elle le logo se rabat sur le gras du système

  • la bande du haut devient sombre et perd son titre écrit, que le logo dit

mieux ; TileButton, RivalCard et ProfileChip reçoivent leur tenue de
tapis sur demande et gardent l'ancienne pour les dialogues

L'écran titre : PDCartes Rami sur le tapis

<sub>2026-10-23-1905-ecran-titre-pdcartes-rami.md — 2026-10-23-1905</sub>

Une page de plus avant le menu : le tapis vert du jeu, des cartes qui dérivent
dessus, le titre en grand dans une fonte d'affichage, et une ligne qui
respire — « Cliquer pour commencer ».

Décisions

  • La page est dessinée, pas composée. Comme le tapis et les cartes : le

titre est un bloc de deux lignes dont on décide au pixel où elles se posent,
ce qu'aucune disposition de QLabel ne donne. drawFelt() est appelée telle
quelle, pour que le vert soit exactement celui de la partie — et il suit la
teinte du profil comme le reste.

  • Deux lignes décalées, comme demandé : PDCartes en haut à gauche, posée

petite, et Rami dessous, deux fois plus haute et rentrée vers la droite.
Les deux lignes sortent alors à peu près de la même largeur (8 glyphes
étroits au-dessus, 4 larges en dessous) et le bloc se lit comme un logo.

  • La fonte voyage dans le binaire, par une ressource Qt (:/fonts/), et

non à côté de l'exe : le jeu est un fichier, le zip Windows n'a rien de plus
à emporter, et une fonte absente ne laisse pas l'écran titre en Sans. Si la
ressource manque quand même, le titre se rabat sur la fonte du système en
gras : dégradé, pas cassé.

  • La bande du haut s'efface sur l'écran titre. Elle n'a rien à y offrir —

pas de score, pas de table à quitter — et un titre plein cadre est ce qu'on
attend d'un écran titre. Réglages, Règles et le profil sont au menu,
à un clic.

  • Deux couches en cache, et des cartes entre elles. Huit cartes dérivent

sur le tapis, derrière le titre : ce sont de vraies cartes, celles du jeu que
le profil a choisi, et non une image d'accueil. Le tapis et son tissage sont
peints une fois dans un pixmap, le titre dans un second, transparent, pour
qu'il se pose sur les cartes ; seules les cartes et la ligne qui respire
sont refaites à chaque image.

  • Les cartes sont posées à la main, pas tirées au sort. Un écran titre se

regarde longtemps et toujours au même endroit : des places au hasard
finissent par en empiler trois sur le titre et laisser un coin vide. Leur
place et leur taille sont en parts de la fenêtre, si bien qu'un
redimensionnement déplace le tapis sous elles sans rebattre les cartes.

  • Le titre et la ligne portent leur ombre. Une carte qui passe dessous

mangerait l'or sur le vert clair du milieu, là où la lampe tombe.

  • Tout démarre : un clic n'importe où, une touche quelconque. Un écran

titre ne se cherche pas.

  • On n'y revient pas. Quitter une partie ramène au menu, non au titre : le

titre est le seuil de la séance, pas une page où l'on repasse.

Étapes

  1. [x] assets/ — la fonte y est déjà ; CMakeLists.txt la met en ressource

(qt_add_resources, préfixe /fonts) et compile src/TitlePage.*.

  1. [x] src/TitlePage.h / .cpp — la page : les deux couches en cache, le

bloc du titre mesuré et mis à l'échelle sur la fenêtre, les huit cartes
qui dérivent, la ligne qui respire, le clic et la touche qui émettent
start().

  1. [x] src/MainWindow.* — une troisième page en tête de la pile, la bande du

haut cachée tant qu'on y est, refresh() au changement de couleurs,
et start() qui mène au menu.

  1. [x] Bâtir, en série, et regarder l'écran : le vert, le bloc du titre à

plusieurs tailles de fenêtre, la ligne qui respire, le clic, la touche,
le bouton sombre une fois au menu puis le retour.

Vérifié

Rendu hors écran, la page bâtie seule contre la cartothèque de l'arbre
build : le tapis est bien celui du jeu, braid compris ; le bloc du titre
tient à 1220×800, 900×620 et 700×480 ; la teinte suit le profil (jade,
bordeaux) et la moitié sombre ; sept secondes plus tard les huit cartes ont
dérivé et tourné, chacune à son pas. Le jeu lui-même démarre sur l'écran
titre, sans bande du haut et sans un mot sur la sortie d'erreur.

Un piège rencontré

qt_add_resources sans BASE met le chemin du fichier sur disque dans la
ressource : la fonte serait arrivée à :/fonts/assets/ZenTokyoZoo-Regular.ttf
et addApplicationFont aurait rendu -1 — l'écran titre en Sans, sans un mot.
BASE assets est ce qui la met à :/fonts/ZenTokyoZoo-Regular.ttf.

Le menu sur le tapis, et le logo qui s'y pose

<sub>2026-10-23-2105-menu-sur-tapis-logo-en-vol.md — 2026-10-23-2105</sub>

L'écran titre a plu, le menu a déplu : fond pâle, trois paragraphes
d'explication, et un titre écrit en toutes lettres. On fait du menu la suite
de l'écran titre plutôt qu'une autre page — même tapis, même or, et le logo
qui vole de l'un à l'autre.

Décisions

  • Un seul fond pour les deux pages. drawFelt() sous le menu comme sous

le titre : passer de l'un à l'autre ne change plus le décor, seulement ce
qui est posé dessus. Les plaques deviennent sombres et translucides, bordées
d'un filet d'or — ce qui se lit sur un drap vert sombre est clair sur fond
sombre, pas l'inverse.

  • Or, noir, rouge. L'or pour les titres de section, les filets et ce qui

est choisi ; le noir du drap pour les plaques ; le rouge des cartes pour qui
est invité. Les trois couleurs d'un tapis de jeu, et non un dégradé de la
teinte du profil comme avant.

  • Le logo vole. drawTitleMark() sort de TitlePage dans une unité à

part : le bloc à deux lignes sait se mettre dans n'importe quelle boîte. Le
titre le dessine en grand, le menu le dessine petit en tête de page, et
entre les deux un calque le fait glisser de l'une à l'autre en une demi-
seconde pendant que le menu paraît. C'est la même chose dessinée trois fois,
pas trois dessins.

  • Le texte du menu fond. Trois paragraphes d'aide et deux lignes de prose

par adversaire, c'était un mode d'emploi, pas un menu. Il reste : le nom de
chaque chose, ce qu'elle coûte en manches ou en points, et une ligne en
bas de page pour les deux gestes qu'on ne devine pas. Ce qui disparaît n'est
pas perdu — l'aperçu au survol et la fiche de chaque adversaire le disent
déjà, et mieux.

  • Les cartes de l'écran titre deviennent un trait. Plus de figures

peintes, qui faisaient tache : des cartes au trait d'or, le rang et
l'enseigne, plus petites. Tirées de ce que le programme dessine lui-même et
non du jeu installé — un dos de tigre en PNG derrière le titre, c'était le
problème.

  • La bande du haut passe au sombre, et perd son titre écrit : le logo le

dit mieux, et une bande pâle au-dessus d'un tapis est une bande posée sur
une autre application. Elle garde ses boutons, sa ligne d'état et le score.

  • RivalCard garde ses deux tenues. La fiche d'un adversaire est une

boîte de dialogue sur fond pâle, et la même carte y paraît : le mode tapis
est demandé par le menu, et ne s'impose pas à elle.

Étapes

  1. [x] src/TitleMark.h / .cpp — le bloc du titre, mesuré et dessiné dans

une boîte quelconque ; TitlePage s'en sert au lieu du sien.

  1. [x] src/TitlePage.cpp — les cartes au trait d'or, plus petites, dessinées

ici plutôt que prises au jeu installé ; markRect() pour le vol.

  1. [x] src/TablePicker.* — le tapis en fond, le logo en tête, les plaques

sombres à filet d'or, et le texte réduit à une ligne.

  1. [x] src/TileButton.cpp, src/RivalCard.* — la tenue de tapis, et la

carte d'adversaire ramenée à ce qui se regarde.

  1. [x] src/MainWindow.* — le calque qui fait voler le logo, la bande sombre,

et son titre écrit en moins.

  1. [x] Bâtir en série, et regarder : l'écran titre, le menu, et l'image prise

au milieu du vol.

Vérifié

Rendu hors écran, la fenêtre entière bâtie contre la cartothèque de l'arbre
build et menée du titre au menu puis à la table par les mêmes gestes qu'un
joueur (une touche, un clic sur une tuile) :

  • l'écran titre, cartes au trait d'or et plus petites, le logo au milieu ;
  • le menu sur le tapis, sans galon, logo en tête, plaques sombres à filet

d'or, pastilles de niveau creuses et jauges d'or ;

  • deux images prises dans le vol, à 110 ms et à 260 ms : le logo descend en

rapetissant pendant que la page monte de transparente à pleine ;

  • clair et sombre, la bande du haut sombre dans les deux ;
  • la table, pour voir la bande au-dessus d'une partie : le score en or s'y

lit, et rien d'autre n'a bougé ;

  • 940×640, où les barres de défilement prennent la suite.

Le jeu lui-même démarre et tient, sans un mot sur la sortie d'erreur.

Deux pièges rencontrés

QGraphicsOpacityEffect fait passer tout le sous-arbre par un pixmap tant
qu'il est posé: il est retiré à la fin de la montée (setGraphicsEffect(nullptr))
et non laissé à un.

La feuille de style de la bande du haut fait redépolir tout ce qui est dedans
et rend à chacun la palette qu'il avait avant elle — c'est déjà pourquoi les
étiquettes y portent leur couleur en règle propre. ProfileChip se peint
elle-même : elle ne pouvait donc pas lire sa palette héritée pour savoir que
la bande est sombre, et on le lui dit (setOnDark), comme on le dit à
TileButton et à RivalCard pour le tapis.

<sub>Filed by prel from the completed plans at commit time.</sub>