您如何利用SWT的Hi-DPI支持小部件大小调整?

时间:2017-12-02 22:34:29

标签: java swt jface

SWT(或JFace)是否有公共便利方法将常规单位转换为缩放对应单位?我发现提到了一个DPIUtil类,但它是内部命名空间的一部分

如果没有可用的便利方法,那么有可靠的方法来访问缩放级别吗?我看到有Device#getDeviceZoom()但是受到了保护。 Device#getDPI()是公开的,因此可能有用。这是否需要考虑扩展,或者它是天真的,只是声明DPI对于一切都是96?

我正在对某些面板应用默认的大小调整提示,我希望他们考虑监视器缩放设置。例如,在常规显示器上说我希望默认值为300px,但在150%缩放时我想将其计算为450px。计算显然很简单,但我需要乘数。

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

1 个答案:

答案 0 :(得分:1)

我没有找到DPIUtil以外的任何东西来确定比例(缩放)系数。

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

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

这种方式,即使是不知道缩放显示的旧程序,仍然会以合理的尺寸显示。