Nucleus
OS integration

SF Symbols

Constantes Kotlin typées pour les noms de symboles SF Symbols d'Apple utilisés par les API macOS.

sf-symbols fournit les noms des SF Symbols d'Apple sous forme de constantes Kotlin typées. Les API macOS qui dessinent un symbole prennent son nom sous forme de chaîne ; au lieu d'écrire "scissors" à la main, vous référencez SFSymbolObjectsAndTools.SCISSORS et le compilateur le vérifie. Les autres modules macOS de Nucleus acceptent ces constantes partout où ils attendent une icône.

Ajouter la dépendance

build.gradle.kts
dependencies {
    implementation("dev.nucleusframework:nucleus.sf-symbols:2.0.5")
}

menu-macos expose sf-symbols via api(). Si vous dépendez déjà de menu-macos, les constantes sont sur votre classpath sans déclaration séparée.

Référencer un symbole

Chaque symbole est une valeur de l'interface scellée SFSymbol. Choisissez une constante dans l'enum de catégorie qui correspond au contexte du symbole :

import dev.nucleusframework.sfsymbols.SFSymbolGeneral
import dev.nucleusframework.sfsymbols.SFSymbolMedia
import dev.nucleusframework.sfsymbols.SFSymbolObjectsAndTools

val gear = SFSymbolGeneral.GEAR
val play = SFSymbolMedia.PLAY
val scissors = SFSymbolObjectsAndTools.SCISSORS

Chaque constante porte son nom SF Symbols dans symbolName. Passez la constante directement à une API macOS qui attend un symbole — par exemple l'icône d'un élément de menu natif :

import dev.nucleusframework.menu.macos.NsMenuItemImage
import dev.nucleusframework.sfsymbols.SFSymbolObjectsAndTools

val icon = NsMenuItemImage.SystemSymbol(SFSymbolObjectsAndTools.SCISSORS)

Pour un nom non couvert par les constantes, ou pour viser un symbole d'une version plus récente de SF Symbols, utilisez SFSymbol.Custom :

import dev.nucleusframework.sfsymbols.SFSymbol

val custom = SFSymbol.Custom("my.custom.symbol")

Fonctionnement

Chaque constante expose une chaîne symbolName qui contient son nom SF Symbols — GEAR donne "gear", PLAY donne "play". Custom enveloppe une chaîne arbitraire dans le même type, si bien qu'un SFSymbol est toujours un nom que macOS peut résoudre avec NSImage.imageWithSystemSymbolName.

Quand vous passez un SFSymbol à un module macOS, seul le symbolName atteint la couche native. Le système résout ce nom en glyphe SF Symbols installé au moment du rendu, donc le symbole suit l'apparence système de l'utilisateur sans embarquer aucun asset image.

Les constantes sont de simples chaînes, donc le module compile sur toutes les plateformes. Les SF Symbols eux-mêmes requièrent macOS 11 ou une version ultérieure ; sur un macOS antérieur ou un autre système d'exploitation, un nom ne produit rien.

Référence de l'API

Catégories

SFSymbol est une interface scellée. Chaque catégorie est un enum dont les entrées correspondent à des noms SF Symbols ; Custom est une value class pour tout le reste. Les 21 enums de catégorie implémentent SFSymbol, donc n'importe quelle constante est utilisable là où un SFSymbol est attendu.

CatégorieSymbolesExemples
SFSymbolGeneral1362GEAR, GEARSHAPE
SFSymbolHuman596ACCESSIBILITY, BRAIN
SFSymbolShapes542APP, APP_BADGE
SFSymbolArrows535ARROW_LEFT, ARROW_CLOCKWISE
SFSymbolTransportation417AIRPLANE, AIRPLANE_ARRIVAL
SFSymbolObjectsAndTools358SCISSORS, FOLDER, TRASH
SFSymbolDevices349DESKTOPCOMPUTER, KEYBOARD
SFSymbolNumbers301_0_CIRCLE, _0_CIRCLE_FILL
SFSymbolWeather286CLOUD, SUN_MAX, BOLT
SFSymbolStatus273CHECKMARK, INFO_CIRCLE
SFSymbolCommerce264BAG, BAG_BADGE_PLUS
SFSymbolMedia238PLAY, PAUSE, STOP
SFSymbolLetters142A_CIRCLE, A_SQUARE
SFSymbolTextFormatting117BOLD, CHARACTER
SFSymbolCommunication101ENVELOPE, PHONE, MESSAGE
SFSymbolPower76POWER, POWER_CIRCLE
SFSymbolSecurity62KEY, KEY_FILL
SFSymbolHealth57ALLERGENS, BASEBALL
SFSymbolLocation47FLAG, COMPASS_DRAWING
SFSymbolTime45ALARM, ALARM_FILL
SFSymbolConnectivity27CABLE_COAXIAL, CABLE_CONNECTOR

Les symboles de nombres commencent par un chiffre, ce qui n'est pas un identifiant Kotlin valide : leurs constantes sont donc préfixées d'un underscore. SFSymbolNumbers._0_CIRCLE correspond à "0.circle".

Construire un symbole custom

SFSymbol.Custom(symbolName: String) est une value class inline. Son symbolName est utilisé tel quel ; utilisez-le pour les symboles hors des constantes prédéfinies ou issus d'une version plus récente de SF Symbols :

SFSymbol.Custom("bird.fill")
SFSymbol.Custom("my.custom.symbol")

Utiliser un symbole avec menu-macos

NsMenuItemImage.SystemSymbol a une surcharge qui prend directement un SFSymbol, si bien qu'une constante devient l'icône d'un élément de menu sans toucher à son symbolName :

import dev.nucleusframework.menu.macos.NsMenuItemImage
import dev.nucleusframework.sfsymbols.SFSymbolGeneral

NsMenuItemImage.SystemSymbol(SFSymbolGeneral.GEAR)

Et ensuite