Icônes FreeDesktop
Constantes Kotlin typées pour les noms définis par la FreeDesktop Icon Naming Specification.
freedesktop-icons fournit les noms d'icônes standards de la
FreeDesktop Icon Naming Specification
sous forme de constantes Kotlin typées. Les thèmes d'icônes Linux résolvent les icônes par nom :
au lieu de livrer info.png, vous référencez dialog-information et le thème actif en rend sa propre
version. Les autres modules Linux de Nucleus acceptent ces constantes partout où ils attendent une icône.
Ajouter la dépendance
dependencies {
implementation("dev.nucleusframework:nucleus.freedesktop-icons:2.0.7")
}notification-linux et launcher-linux exposent freedesktop-icons via api(). Si vous dépendez
déjà de l'un d'eux, les constantes sont sur votre classpath sans déclaration séparée.
Référencer une icône
Chaque icône est une valeur de l'interface scellée FreedesktopIcon. Choisissez une constante dans
l'enum de catégorie qui correspond au contexte de l'icône :
import dev.nucleusframework.freedesktop.icons.FreedesktopIcon
val info = FreedesktopIcon.Status.DIALOG_INFORMATION
val open = FreedesktopIcon.Action.DOCUMENT_OPEN
val printer = FreedesktopIcon.Device.PRINTERPour un nom hors spec, un chemin de fichier ou une URI file://, utilisez FreedesktopIcon.Custom :
val named = FreedesktopIcon.Custom("my-app-icon") // recherche par nom dans le thème
val path = FreedesktopIcon.Custom("/home/user/icon.png") // chemin absolu
val uri = FreedesktopIcon.Custom("file:///home/user/icon.png")FreedesktopIcon.flag construit un nom de drapeau à partir d'un code ISO 3166-1 alpha-2 :
val flag = FreedesktopIcon.flag("fr") // FreedesktopIcon.Custom("flag-fr")Fonctionnement
Chaque constante porte une chaîne value qui contient son nom spec — DIALOG_INFORMATION donne
"dialog-information". Custom et flag enveloppent des chaînes arbitraires dans le même type,
si bien qu'un FreedesktopIcon est toujours un nom qu'un thème peut résoudre.
Quand vous passez un FreedesktopIcon à un module Linux — notifications, quicklists du launcher —
la value est envoyée sur D-Bus ou écrite en clair dans un fichier .desktop. Le thème d'icônes
actif du système transforme ce nom en image concrète au moment du rendu, donc l'application suit
le thème de l'utilisateur sans embarquer aucun bitmap.
Les constantes sont de simples chaînes et compilent donc sur toutes les plateformes. Hors Linux, elles ne produisent rien de visible, faute de thème FreeDesktop.
Référence de l'API
Catégories
FreedesktopIcon est une interface scellée. Chaque catégorie est un enum dont les entrées
correspondent à des noms spec ; Custom est une value class pour tout le reste.
| Catégorie | Exemples |
|---|---|
FreedesktopIcon.Action | DOCUMENT_OPEN, EDIT_COPY, MEDIA_PLAYBACK_START |
FreedesktopIcon.Animation | PROCESS_WORKING |
FreedesktopIcon.Application | ACCESSORIES_TEXT_EDITOR, MULTIMEDIA_VOLUME_CONTROL, UTILITIES_TERMINAL |
FreedesktopIcon.Category | APPLICATIONS_INTERNET, PREFERENCES_DESKTOP, SYSTEM_HELP |
FreedesktopIcon.Device | PRINTER, CAMERA_PHOTO, INPUT_KEYBOARD |
FreedesktopIcon.Emblem | IMPORTANT, FAVORITE, SHARED |
FreedesktopIcon.Emote | FACE_SMILE, FACE_SAD, FACE_WINK |
FreedesktopIcon.MimeType | TEXT_X_GENERIC, IMAGE_X_GENERIC, X_OFFICE_DOCUMENT |
FreedesktopIcon.Place | FOLDER, USER_HOME, NETWORK_SERVER |
FreedesktopIcon.Status | DIALOG_INFORMATION, DIALOG_WARNING, BATTERY_LOW |
FreedesktopIcon.Custom | value class pour noms bruts, chemins de fichier ou URIs file:// |
Construire une icône custom
FreedesktopIcon.Custom(value: String) est une value class inline. Sa value est utilisée telle
quelle, qu'il s'agisse d'un nom de thème, d'un chemin absolu ou d'une URI file://.
Construire un drapeau de pays
FreedesktopIcon.flag(countryCode: String) met le code en minuscules et retourne
Custom("flag-<code>") :
FreedesktopIcon.flag("us") // Custom("flag-us")
FreedesktopIcon.flag("jp") // Custom("flag-jp")Notes
- Tous les thèmes n'implémentent pas tous les noms d'icônes. Rester sur le set canonique FreeDesktop donne le meilleur taux de correspondance.
- Les drapeaux ne font pas partie de la spec FreeDesktop et dépendent d'un thème qui fournit des
noms
flag-<code>.
Et ensuite
- Notifications Linux — passez un
FreedesktopIconcomme icône de notification. - Launcher Linux — réutilisez les mêmes constantes dans les actions
.desktop. - Barre système — définissez une icône de tray par thème via son nom.