4.8 KiB
4.8 KiB
Synthèse — Mettre en place une roue chromatique (HSV) dans GNOME Shell 48
Contexte
- GNOME Shell 48 (GJS) utilise St/Clutter (pas GTK dans le Shell).
- Il n’existe pas de composant natif « roue chromatique » (type
GtkColorChooser) directement exploitable dans une extension GNOME Shell. - Objectif : offrir une roue HSV pour choisir une couleur (H, S) + un contrôle d’intensité (V), puis produire un RGB (0–255) utilisable pour piloter un matériel (ex. clavier RGB).
Options possibles (du plus recommandé au plus “hybride”)
Option A — Roue HSV native GNOME Shell (recommandée)
Principe
- Créer un widget custom basé sur
Clutter.Canvas. - Dessiner une roue HSV (visualisation en V=1 pour lisibilité).
- Capturer les interactions souris :
- angle → Hue (H)
- rayon → Saturation (S)
- Ajouter un slider pour Value (V) (intensité).
- Convertir HSV → RGB (0–255) et déclencher un callback.
Avantages
- 100% intégré au Shell (look & feel cohérent extension).
- Dépendances minimales (GJS uniquement).
- Utilisable dans un menu top-bar, Quick Settings, ou popup.
- Contrôle immédiat (idéal pour piloter des LED).
Inconvénients
- Code à maintenir (rendu + interaction).
- Optimisation possible nécessaire pour performance (cache image).
Recommandation
- C’est la meilleure solution pour une extension GNOME 48, surtout si l’usage cible est le pilotage hardware RGB.
Option B — Sliders RGB (solution la plus robuste)
Principe
- Ne pas faire de roue.
- 3 sliders
St.SliderouPopupSliderMenuItem:- R (0–255)
- G (0–255)
- B (0–255)
- Afficher un carré d’aperçu (preview)
St.Widgetdont la couleur suit les sliders.
Avantages
- Très simple, très stable, très maintenable.
- Exact pour piloter des LED (RGB natif).
- Peu de code, faible coût performance.
Inconvénients
- Moins intuitif qu’une roue HSV.
- Expérience utilisateur moins “graphique”.
Recommandation
- Excellent si priorité = fiabilité et précision LED.
- Peut être combiné avec la roue (Option A) pour affiner.
Option C — Hybride : application GTK externe (GtkColorChooser) + DBus
Principe
- Créer une petite app GTK (hors Shell) utilisant
GtkColorChooser(roue native GNOME). - L’extension GNOME Shell lance l’app ou communique via DBus.
- L’app renvoie la couleur choisie (RGB/HSV) à l’extension.
Avantages
- UI GNOME native parfaite (roue GTK).
- Moins de code côté Shell pour le rendu.
Inconvénients
- Architecture plus lourde (extension + service/app).
- Gestion DBus, packaging, cycle de vie de l’app.
- Moins fluide pour un usage “réglage instantané”.
Recommandation
- À considérer si tu veux absolument la roue GTK standard et acceptes la complexité.
Option D — Réutiliser du code existant (extensions / libs)
Principe
- S’inspirer d’une extension existante (Color Picker, etc.) ou porter un widget JS déjà implémenté.
- Intégrer le code (Canvas, HSV->RGB, interactions) dans ton extension.
Avantages
- Gain de temps si un code de roue HSV est déjà éprouvé.
- Possibilité de reprendre des patterns Shell (PopupMenu, Quick Settings, etc.).
Inconvénients
- Variabilité de qualité et compatibilité GNOME 48.
- Nécessite vérification licence / maintenance.
Recommandation
- Très efficace si tu trouves un code déjà aligné GJS/Clutter moderne.
Rendu “fidèle” vs LED (point important)
- Une roue à l’écran (sRGB) ne correspond pas parfaitement au rendu des LED de clavier.
- Recommandé :
- afficher RGB 0–255 et/ou HEX
- prévoir un slider d’intensité (V) + luminosité matériel
- optionnel : appliquer une correction empirique (ex. réduire le bleu) pour coller au rendu réel.
UX conseillée (pragmatique)
MVP (simple et efficace)
- Roue HSV (H,S) + slider V
- Aperçu (carré couleur)
- Affichage RGB (0–255) + HEX
- Bouton “Appliquer” (ou appliquer en live)
Version “confort”
- Roue HSV + sliders RGB (affinage)
- Presets (palette)
- Historique des dernières couleurs
- “Appliquer au démarrage” (persist)
Recommandation finale
Pour GNOME Shell 48, le meilleur choix est :
- Option A (roue HSV custom via
Clutter.Canvas) + slider V - compléter par Option B (sliders RGB) si tu veux une précision LED maximale
Option C (GTK externe) est valable mais plus lourde et moins adaptée à un réglage rapide dans le Shell.
Livrables possibles (si on passe à l’implémentation)
- Widget
HsvWheelréutilisable (Canvas + interaction) - Intégration top-bar (PopupMenu) ou Quick Settings
- Callback standard
onColor({r,g,b,h,s,v}) - Module utilitaire HSV<->RGB
- (Option) pipeline d’application : sysfs / asusctl / DBus service s