Java 和 Eclipse 框架中的缩放处理方式不同
Scaling Handled Differently in Java and Eclipse Framework
我们在缩放显示器上使用 Paperclips(SWT 打印库)时遇到问题,但我认为这与框架无关,而且与 Eclipse 环境无关。
让我们看一个例子:
左边是没有缩放(或 100%)的打印,右边是在 175% 缩放的显示器上开始的相同打印。我知道您在想什么:显示器及其分辨率/缩放比例应该对打印没有影响。对,应该。
虽然这很令人难过,但这也不是什么大问题。但问题来了:上面的打印是由 JUnit 测试用例 运行 作为 plug-in 测试生成的。如果我 运行 它们作为常规单元测试 两者 工作。
很明显,在 OSGi 上下文中启动时,Eclipse 环境中的某些东西会有所不同,我正试图找出它是什么(这样我也许可以阻止它)。
而且我认为这是一个很好的谜题。
如果您需要有关 SWT class 可能是什么的提示,我将其缩小到 table 的文件 ScalePrint.java
(即如果我删除 table 的实例=12=] 在我的演示中,table 显示正确;但是 header 仍然是错误的)。
我可以确认该错误仅存在于 Eclipse 4.6 中,而不存在于 4.5 或 3.7 中(这并不奇怪,因为 4.6 是第一个支持缩放的版本)。如果我将 -Dswt.autoScale=100
添加到 VM 选项以禁用缩放,它也会按预期工作。
我可以附加我的测试用例,但正如我所说,我真的不认为它与 Paperclips 本身有任何关系。
那么...与 运行在普通 Java 应用程序中使用相同代码相比,当整个 Eclipse 框架启动时,什么会破坏缩放?
问题是 class Transform
的使用,它本身使用静态字段 DPIUtil.deviceZoom
(以 DPIUtil.autoScaleUp(float dx)
的形式)。
因为 DPIUtil.deviceZoom
是一个静态字段,所以当与具有缩放功能的主显示器一起使用时一切都会失败(因为打印机没有)。
我们在缩放显示器上使用 Paperclips(SWT 打印库)时遇到问题,但我认为这与框架无关,而且与 Eclipse 环境无关。
让我们看一个例子:
左边是没有缩放(或 100%)的打印,右边是在 175% 缩放的显示器上开始的相同打印。我知道您在想什么:显示器及其分辨率/缩放比例应该对打印没有影响。对,应该。
虽然这很令人难过,但这也不是什么大问题。但问题来了:上面的打印是由 JUnit 测试用例 运行 作为 plug-in 测试生成的。如果我 运行 它们作为常规单元测试 两者 工作。
很明显,在 OSGi 上下文中启动时,Eclipse 环境中的某些东西会有所不同,我正试图找出它是什么(这样我也许可以阻止它)。
而且我认为这是一个很好的谜题。
如果您需要有关 SWT class 可能是什么的提示,我将其缩小到 table 的文件 ScalePrint.java
(即如果我删除 table 的实例=12=] 在我的演示中,table 显示正确;但是 header 仍然是错误的)。
我可以确认该错误仅存在于 Eclipse 4.6 中,而不存在于 4.5 或 3.7 中(这并不奇怪,因为 4.6 是第一个支持缩放的版本)。如果我将 -Dswt.autoScale=100
添加到 VM 选项以禁用缩放,它也会按预期工作。
我可以附加我的测试用例,但正如我所说,我真的不认为它与 Paperclips 本身有任何关系。
那么...与 运行在普通 Java 应用程序中使用相同代码相比,当整个 Eclipse 框架启动时,什么会破坏缩放?
问题是 class Transform
的使用,它本身使用静态字段 DPIUtil.deviceZoom
(以 DPIUtil.autoScaleUp(float dx)
的形式)。
因为 DPIUtil.deviceZoom
是一个静态字段,所以当与具有缩放功能的主显示器一起使用时一切都会失败(因为打印机没有)。