2017-12-02 139 views
0

SWT(或JFace)是否有一个公共便利的方法将常规单位转换为其缩放对象?我发现提到DPIUtil类,但这是内部命名空间的一部分您如何利用SWT的Hi-DPI支持小部件尺寸?

如果没有可用的便利方法,那么是否有可靠的方法来访问缩放级别?我看到有Device#getDeviceZoom()但这是受保护的。有Device#getDPI()这是公开的,所以它可能是有用的。这是否需要考虑扩大规模,还是天真的,只是宣布DPI为96?

我将默认大小提示应用于某些面板,我希望他们考虑监视器缩放设置。例如,在常规显示屏上说我想要默认为300像素,但在150%缩放比例下,我想将其计算为450像素。计算显然很简单,但我需要乘数。

注意:这与我之前的问题How do you utilize SWT's Hi-DPI support for icons?有关,但不同,因为SWT提供了专门用于处理图像的类。

+0

你通常不需要。指定300px的大小将被150缩放设备上的SWT自动缩放为450px(并且将使用您提供的任何150缩放图像)。我有一个iMac将两个屏幕 - 一个5k屏幕缩放在200和一个2,5k屏幕不缩放 - SWT应用程序在两个上显示相同的大小。 –

+0

@ greg-449我没有意识到它会自动转换。 SWT文档是否在某处存在,或者它是大多数实现遵守的那些未记录的功能之一?我一直没能找到有关使用SWT进行DPI缩放的全面信息。 – cpburnz

+0

它不是真的SWT,它是OS(至少它是如何在macOS上工作的)。操作系统放大尺寸,以更高的分辨率呈现字体,并使用高分辨率图像(如果可用)。因此,除了提供高分辨率图像之外,程序不需要做任何事情。 –

回答

1

我还没有发现除DPIUtil以外的任何用于确定缩放比例的因素。

但您通常不需要此信息。指定300px的大小将被150缩放设备上的SWT自动缩放为450px(并且将使用您提供的任何150缩放图像)。我有一个带有两个屏幕的iMac - 一个5k屏幕缩放到200,一个2.5k屏幕缩放 - SWT应用在两个屏幕上显示的尺寸相同。

缩放实际上是在OS而不是SWT中完成的(至少它是如何在macOS上工作的)。操作系统放大尺寸,以更高的分辨率呈现字体,并使用高分辨率图像(如果可用)。因此,除了提供高分辨率图像之外,程序不需要做任何事情。

这种方式即使是旧的程序,不知道放大显示仍然显示在一个合理的大小。