Problema
Al crear interfaces de usuario en JMP, es posible que desee agregar algunos colores de fondo o de primer plano a sus pantallas. Sin embargo, con la nueva compatibilidad de JMP 15 con el modo oscuro de macOS y el modo de contraste alto de Windows, necesita una forma de detectar si el usuario está en un modo de apariencia oscuro o claro para tener contenido legible. Por ejemplo, no querrá establecer un color claro como color de fondo o un color de primer plano oscuro en el modo oscuro, ya que sería difícil de leer.
Solución
Para detectar si el usuario está en un modo oscuro o claro, podemos verificar la preferencia Color de fondo. Al calcular la luminancia del color de fondo, generalmente podemos determinar si el sistema operativo actual se ejecuta en un modo de apariencia oscura.
/* 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 la práctica, puede llamar a esta función al comienzo de su secuencia de comandos (o llamarla cada vez) y usarla cuando sea necesario.
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>