在Java和Eclipse框架中处理的缩放比例不同

问题描述:

我们在缩放的监视器上使用Paperclips(SWT打印库)时遇到问题,但我认为这与框架和Eclipse环境无关。在Java和Eclipse框架中处理的缩放比例不同

让我们看一个例子:

enter image description here

左是没有调整(或100%)的打印,右边是相同的打印开始与175%缩放比例在监视器上。我知道你在想什么:显示器及其分辨率/缩放应该对打印没有影响。对,应该。

尽管这很令人伤心,但它并不是什么大问题。但是出现了踢球者:上述印刷品是由作为插件测试运行的JUnit测试用例生成的。如果我运行它们作为常规单元测试工作。

很显然,在Eclipse环境中,当在OS​​Gi上下文中启动时,某些东西的工作方式不同,我试图找出它是什么(所以我可以阻止它)。

我认为这是一个很好的谜题。

如果你需要什么SWT类可能是一个暗示,我把范围缩小到该文件ScalePrint.java为表(即,如果我从我的演示中删除的ScalePrint实例,正确显示表,标题是尽管如此,仍然错误)。

我可以确认仅在Eclipse 4.6中存在错误时,而不是4.5或3.7(这并不完全令人惊讶,因为4.6是支持缩放所述第一版本)。如果我将-Dswt.autoScale=100添加到VM选项以禁用缩放,则它也可以按预期工作。

我可以附加我的测试用例,但正如我所说,我真的不认为它与回形针本身有任何关系。

那么......在整个Eclipse框架启动时,与在普通Java应用程序中运行相同的代码相比,什么会打破扩展?

问题是使用类Transform,它本身使用静态字段DPIUtil.deviceZoom(形式为DPIUtil.autoScaleUp(float dx))。

由于DPIUtil.deviceZoom是与已经缩放(因为打印机不)一个主监视器中使用时的静态字段都失败。