Problème
Lors de la création d'interfaces utilisateur dans JMP, vous souhaiterez peut-être ajouter des couleurs d'arrière-plan ou de premier plan à vos affichages. Cependant, avec la nouvelle prise en charge de JMP 15 pour le mode sombre de macOS et le mode de contraste élevé de Windows, vous avez besoin d'un moyen de détecter si l'utilisateur est dans un mode d'apparence sombre ou clair afin d'avoir un contenu lisible. Par exemple, vous ne voudriez pas définir une couleur claire comme couleur d'arrière-plan ou une couleur de premier plan sombre en mode sombre, car cela serait difficile à lire.
Solution
Pour détecter si l'utilisateur est en mode sombre ou clair, nous pouvons vérifier la préférence Couleur d'arrière-plan. En calculant la luminance de la couleur d'arrière-plan, nous pouvons généralement déterminer si le système d'exploitation actuel fonctionne dans un mode d'apparence sombre.
/* 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" );
);
En pratique, vous pouvez appeler cette fonction au début de votre script (ou l'appeler à chaque fois), et l'utiliser au besoin.
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>