Problema
Quando crei interfacce utente in JMP, potresti voler aggiungere alcuni colori di sfondo o di primo piano ai tuoi display. Tuttavia, con il nuovo supporto di JMP 15 per macOS Dark Mode e Windows High Contrast Mode, è necessario un modo per rilevare se l'utente si trova in una modalità di aspetto scura o chiara per avere contenuti leggibili. Ad esempio, non vorrai impostare un colore chiaro come colore di sfondo o un colore di primo piano scuro in modalità scura, poiché sarebbe difficile da leggere.
Soluzione
Per rilevare se l'utente è in modalità scura o chiara, possiamo controllare la preferenza Colore di sfondo. Calcolando la luminanza del colore di sfondo, possiamo generalmente capire se il sistema operativo corrente è in esecuzione in una modalità di aspetto scuro.
/* Function: getCurrentAppearance
Returns the current appearance based on the background
color for reports, either 'Light' or 'Dark'.
*/
getCurrentAppearance = Function({},
{backgroundColor, hue, luminance, saturation},
backgroundColor = Arg( Arg( Get Preference( BackgroundColor ), 1 ), 1 );
{hue, luminance, saturation} = Color To HLS( backgroundColor );
If( luminance < 0.5, "Dark", "Light" );
);
In pratica, puoi chiamare questa funzione all'inizio del tuo script (o chiamarla ogni volta) e usarla quando necessario.
isLightMode = getCurrentAppearance() == "Light";
New Window("Appearance Mode",
Text Box("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
<<BACKGROUND color=""></BACKGROUND>