在Java和Eclipse框架中处理的缩放比例不同
我们在缩放的监视器上使用Paperclips(SWT打印库)时遇到问题,但我认为这与框架和Eclipse环境无关。在Java和Eclipse框架中处理的缩放比例不同
让我们看一个例子:
左是没有调整(或100%)的打印,右边是相同的打印开始与175%缩放比例在监视器上。我知道你在想什么:显示器及其分辨率/缩放应该对打印没有影响。对,应该。
尽管这很令人伤心,但它并不是什么大问题。但是出现了踢球者:上述印刷品是由作为插件测试运行的JUnit测试用例生成的。如果我运行它们作为常规单元测试都工作。
很显然,在Eclipse环境中,当在OSGi上下文中启动时,某些东西的工作方式不同,我试图找出它是什么(所以我可以阻止它)。
我认为这是一个很好的谜题。
如果你需要什么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
是与已经缩放(因为打印机不)一个主监视器中使用时的静态字段都失败。