问题
在 JMP 中创建用户界面时,您可能希望为显示添加一些背景色或前景色。 但是,随着 JMP 15 对 macOS 深色模式和 Windows 高对比度模式的新支持,您需要一种方法来检测用户是处于深色还是浅色外观模式,以便获得清晰的内容。 例如,您不希望在深色模式下将浅色设置为背景色或深色前景色,因为这样会难以阅读。
解决方案
要检测用户是处于深色模式还是浅色模式,我们可以检查背景颜色首选项。 通过计算背景颜色的亮度,我们大致可以判断出当前操作系统是否运行在深色外观模式下。
/* 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" );
);
实际上,您可以在脚本的开头调用此函数(或每次都调用),并在需要时使用它。
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>