2017-10-10 8 views
0

スケーリングされたモニタでPaperclips(SWTの印刷ライブラリ)を使用する際に問題がありますが、フレームワークやEclipse環境とは関係ありません。JavaとEclipseフレームワークで異なるスケーリングが処理される

の例を見てみましょう:

enter image description here

左スケーリング(または100%)なしでのプリントでは、右の同じ印刷は175%のスケーリングとモニター上で開始されます。私はあなたが考えていることを知っています:モニターとその解像度/スケーリングはプリントに影響を与えてはなりません。右はです。

これは悲しいことですが、それは大した問題ではありません。しかし、キッカーが来る:上記のプリントは、プラグインテストとして実行されたJUnitテストケースによって生成されたものです。私が定期的なユニットテストとして実行する場合両方仕事。

明らかに、Eclipse環境では、OSGiコンテキストで起動したときに、別のものが動作していることがわかりました。私はそれが何であるかを調べようとしています。

これは素晴らしいパズルだと思います。

SWTクラスのヒントが必要な場合は、テーブルのファイルScalePrint.javaに絞り込みます(つまり、デモからScalePrintのインスタンスを削除すると、テーブルが正しく表示され、ヘッダーはまだ間違っています)。

エラーは、4.6または4.5ではなく、Eclipse 4.6にのみ存在することが確認できます(これは、スケーリングをサポートする最初のバージョンであるため、全く驚くことではありません)。スケーリングを無効にするためにVMオプションに-Dswt.autoScale=100を追加すると、期待通りに機能します。

私はテストケースを追加することができますが、私が言ったように、それはペーパークリップ自体とは関係がないとは本当に思いません。

Eclipseのフレームワーク全体がプレーンJavaアプリケーションで同じコードを実行するのと比較して開始されたときのスケーリングを破ることができますか?

答えて

0

問題は、それ自体が静的フィールドDPIUtil.deviceZoom(形式:DPIUtil.autoScaleUp(float dx))を使用するクラスTransformの使用です。

DPIUtil.deviceZoomは静的フィールドなので、スケーリングを持つプライマリモニタで使用するとすべてが失敗します(プリンタはそうでないため)。

関連する問題