Les conditions permettent d'écrire un seul thème qui s'adapte à la machine, à l'écran et au système affiché, au lieu de multiplier les variantes. Elles s'écrivent avec l'attribut if="…" et s'évaluent à chaque chargement du thème, donc une fois par système.
L'attribut if s'applique à presque toutes les balises d'un thème.
<include> :<include if="crt" path="./crt/theme.xml" />
<view> :<view name="system" if="arcade">
...
</view>
<image name="deco" extra="true" if="favorite" path="./art/coeur.png" />
<image name="deco" extra="true" path="./art/fond.png">
<path if="crt">./art/fond-crt.png</path>
</image>
<variables> ou une <variable>, et sur un <subset>.Chaque identifiant est évalué à vrai ou faux, puis combiné avec les opérateurs booléens and, or et not. Les formes courtes &, | et ! sont équivalentes ; elles peuvent être collées à l'identifiant (qvga&!crt), alors que les formes longues exigent des espaces (qvga and not crt).
if="qvga and not crt"
if="qvga & !crt"
if="hd or fhd"
if="hd | fhd"
L'évaluation se fait de gauche à droite, sans priorité entre and et or : chaque nouvel identifiant est combiné avec le résultat accumulé jusque-là.
if="qvga or vga and not crt"
se lit donc (qvga ou vga) et pas crt, et n'est pas équivalent à :
if="not crt and qvga or vga"
qui se lit (pas crt et qvga) ou vga.
Pour lever toute ambiguïté, utilisez des parenthèses — le moteur de Recalbox 10 les gère :
if="(qvga or vga) and not crt"
if="console | (arcade & !virtual)"
Un identifiant inconnu est évalué à faux et une erreur est écrite dans
themes.log. C'est la première chose à vérifier quand un bloc conditionnel ne s'affiche jamais.
| Identifiant | Vrai quand… |
|---|---|
crt |
un adaptateur CRT est branché et actif |
jamma |
un adaptateur RGB JAMMA est branché et actif |
overscan |
équivalent à crt and not jamma |
tate |
l'écran est en mode vertical (TATE) |
tateleft |
l'écran est en TATE tourné à gauche |
tateright |
l'écran est en TATE tourné à droite |
qvga |
la hauteur d'écran est inférieure ou égale à 288 px |
vga |
la hauteur d'écran est comprise entre 289 et 576 px |
hd |
la hauteur d'écran est comprise entre 577 et 920 px |
fhd |
la hauteur d'écran dépasse 920 px |
| Identifiant | Vrai quand… |
|---|---|
ispc |
la machine est un PC x86_64 |
ispi |
la machine est un Raspberry Pi |
isodroid |
la machine est une Odroid Go Advance / RG351x |
isanbernic |
la machine est une Anbernic RG353x |
| Identifiant | Vrai quand… |
|---|---|
bartop |
Recalbox est en mode bartop (ou plus restrictif) |
nomenu |
Recalbox est en mode sans menu |
| Identifiant | Vrai quand… |
|---|---|
virtual |
le système est un système virtuel |
arcade |
le système est un système arcade |
port |
le système est le système des ports |
console |
le système est une console de salon |
handheld |
le système est une console portable |
computer |
le système est un micro-ordinateur |
fantasy |
le système est une console fantasy |
engine |
le système est un moteur de jeu |
favorite |
le système est celui des favoris |
lastplayed |
le système est celui des derniers jeux joués |
tateleft,tateright,ispc,ispi,isodroid,isanbernic,bartopetnomenuont été ajoutés en Recalbox 10.x.
Deux attributs supplémentaires testent la présence d'un fichier ou d'un dossier sur le disque. Ils s'utilisent seuls ou en complément de if, et acceptent les variables.
| Attribut | Effet |
|---|---|
ifexists="chemin" |
le bloc n'est retenu que si le chemin existe |
ifnotexists="chemin" |
le bloc n'est retenu que si le chemin n'existe pas |
<image name="logoLocal" extra="true" ifexists="${root}/${system.name}/logo-local.svg" path="${root}/${system.name}/logo-local.svg" />
<image name="logoDefaut" extra="true" ifnotexists="${root}/${system.name}/logo-local.svg" path="${system.logo}" />
Dans la vue detailed, l'attribut showIf restreint l'affichage d'un objet selon la nature de l'entrée sélectionnée. Il accepte une ou plusieurs valeurs séparées par des virgules.
| Valeur | L'objet n'est visible que sur… |
|---|---|
game |
un jeu |
folder |
un dossier |
header |
un en-tête de section |
<image name="cadreDossier" extra="true" showIf="folder" path="./art/dossier.png" />
<text name="infoJeu" extra="true" showIf="game,header" text="${game.name}" />
<!-- tous les systèmes arcade par constructeur -->
if="arcade & virtual"
<!-- tous les types de consoles -->
if="console | handheld | fantasy"
<!-- les systèmes sans existence physique -->
if="fantasy | engine"
<!-- petits écrans, hors CRT -->
if="(qvga | vga) & !crt"