79 lines
4.3 KiB
Markdown
79 lines
4.3 KiB
Markdown
# Appearance 17F — Mode Soleil
|
|
|
|
Le profil Soleil augmente la visibilité de QuickShell et SwayFX. Il ne modifie
|
|
ni le fond d'écran, ni la luminosité, ni les thèmes GTK, Qt, Kitty, Neovim et
|
|
Firefox. Ces cinq familles d'applications relèvent obligatoirement de 17G ;
|
|
17F ne constitue donc pas une intégration complète du bureau clair.
|
|
|
|
## État et priorité
|
|
|
|
`preferences.json` et `effective.json` utilisent le schéma 4. Les anciennes
|
|
préférences migrent vers `sunMode=false`, `sunVariant=light`,
|
|
`sunDarkFlavor=mocha`. Seuls `frappe`, `macchiato` et `mocha` sont admis pour
|
|
`sunDarkFlavor`. Les coordonnées Night Light restent locales et intactes.
|
|
|
|
`themeMode`, `manualFlavor` et `wallpaperAnalysis` décrivent le choix normal.
|
|
La résolution centrale calcule d'abord ce flavor normal, puis applique la
|
|
priorité Soleil : `sun-light` donne Latte ; `sun-dark` donne
|
|
`sunDarkFlavor` ; Soleil désactivé restitue le flavor normal. Aucun instantané
|
|
des préférences normales n'est utilisé. `effectiveDark` dérive du flavor,
|
|
`effectiveHighContrast` vaut exactement `sunMode`, et `effectiveAccent` reste
|
|
Lavender. `effectiveMode` vaut `normal`, `sun-light` ou `sun-dark`.
|
|
|
|
Une modification effective du profil ou du flavor augmente `revision` une
|
|
fois. Un changement de `sunDarkFlavor` lorsque Soleil est désactivé est
|
|
persisté sans révision visuelle. Les consommateurs 17G devront utiliser
|
|
`effectiveFlavor`, `effectiveAccent`, `effectiveDark`,
|
|
`effectiveHighContrast`, `effectiveMode` et `revision` comme source unique.
|
|
Un futur `AppThemeSynchronizer` distribuera cet état à ses adaptateurs GTK,
|
|
Qt, Kitty, Neovim et Firefox ; aucune logique spécifique à ces applications
|
|
n'appartient à `Theme.qml`.
|
|
|
|
## Transaction et reprise
|
|
|
|
`wallpaper-manager.py` tient le verrou Appearance commun. Il résout l'état,
|
|
écrit atomiquement `generated/theme.conf` et éventuellement
|
|
`generated/wallpaper.conf`, valide Sway, recharge SwayFX, vérifie le fond si
|
|
nécessaire, publie `effective.json`, réconcilie le service Night Light,
|
|
réapplique les opacités existantes par `--refresh`, écrit les préférences,
|
|
puis publie l'état QuickShell via IPC. En cas d'échec, il restaure les octets
|
|
précédents des fichiers et de l'état, recharge Sway, rétablit Night Light et
|
|
les opacités, puis renvoie une erreur. Les transitions sont sérialisées ; les
|
|
contrôles QML attendent la fin de la transaction.
|
|
|
|
Le listener d'opacité lit l'état uniquement à chaque événement fenêtre ;
|
|
`--refresh` lit une fois lors d'un changement de profil. Normal utilise
|
|
focused `1.0`, inactive `0.85` ; Soleil utilise `1.0` pour les deux. SwayFX
|
|
consomme les variables du générateur dans son unique bloc `layer_effects` :
|
|
blur de la barre `enable` en normal, `disable` en Soleil. Le rayon d'ombre
|
|
passe de 10 à 4 et les couleurs d'ombre sont renforcées en Soleil. Les
|
|
bordures restent de 2 px.
|
|
|
|
Le lanceur de `wlsunset.service` lit `effective.json` avant tout démarrage :
|
|
en Soleil, il ne lance pas de correction gamma. La préférence Off, Auto ou On
|
|
reste intacte ; en sortie de Soleil le service est réconcilié selon cette
|
|
préférence. Au redémarrage de QuickShell, Appearance se réconcilie avant Night
|
|
Light et reprend la révision persistée. Le repli versionné Mocha reste valide
|
|
sans fichiers générés.
|
|
|
|
## Contraste et limites
|
|
|
|
La barre QuickShell passe de `235/255` en normal à `1,0` en Soleil ; les popups
|
|
restent opaques (`1,0`) dans les deux profils. Les rôles `border`,
|
|
`strongBorder`, `outline`, `emphasisBackground`, `separator`,
|
|
`buttonBackground`, `buttonHover`, `secondaryForeground`, `inputBorder`
|
|
et `shadow` dérivent de la palette
|
|
Catppuccin et du contraste effectif. L'accent Lavender et `onAccent` suivent
|
|
le moteur 17B. Les ratios WCAG des paires principales sont :
|
|
|
|
| Flavor Soleil | texte/panel | secondaire/panel | texte/popup | onAccent/accent | texte/input |
|
|
| --- | ---: | ---: | ---: | ---: | ---: |
|
|
| Latte | 7,06 | 7,06 | 7,06 | 6,60 | 5,17 |
|
|
| Frappé | 8,06 | 8,06 | 8,06 | 11,47 | 6,19 |
|
|
| Macchiato | 9,92 | 9,92 | 9,92 | 11,65 | 7,55 |
|
|
| Mocha | 11,34 | 11,34 | 11,34 | 11,74 | 8,69 |
|
|
|
|
La paire sélectionnée reprend `onAccent/accent`. Les bordures et séparateurs
|
|
sont décoratifs ; le seuil de texte AA de 4,5:1 ne s'y applique pas. Les
|
|
icônes colorées des applications dans le tray ne sont pas recolorées.
|
|
La lisibilité réelle en plein soleil exige une validation sur l'écran physique.
|