Canvasで呼び出されたControl.redraw(int, int, int, int, boolean)
メソッドに関する次の問題が発生しました。私はダイアグラムエディタで作業しています。最近私は選択ツールを実装しました。これは図の四角い枠を示しています。問題は、マウスの助けを借りてこの選択ツールのサイズをすばやく変更すると、画面にアーティファクトが表示されることです。しかし、ツールのサイズをゆっくりと変更すると、すべてが正しく再描画されます。SWT再描画コマンドがスキップされて、画面にアーチファクトが表示されるようです。
SWT言語では、次のようになります。
マウスを使用して選択矩形のサイズを変更するたびに、最終的に対応する矩形領域を再描画するように指定するredraw
メソッドを呼び出します。それから私はPaintEvent
をキャッチし、フレームをペイントします。マウスの動きが遅い場合、すべてが期待どおりに機能します。
質問は、描画イベントをスキップするか、再描画コマンドをスキップすることができますか?誰も似たような問題で遭遇しましたか?多分、設定すべきフラグがありますか?
私はsetRedraw(true)
にしようとしましたが、何の効果もありませんでした。最後に、redraw(int, int, int, int, boolean)
メソッドをredraw()
に置き換えようとしましたが、アーティファクトが消えましたが、これは選択ツールのサイズ変更時に、特にWindows上で賢明な遅れが生じたため、許容できない解決策でした。
おかげ
あなたは正しいです。私の座標にはいくつかの問題があります。おそらく、アフィン変換が正しくない可能性があります。ありがとう。 –
申し訳ありませんが、それは完全に私の間違いでした。 SWTは正常に動作します。更新する前に領域を再描画するための信号を送信することを忘れてしまった...選択ツールを更新した後でのみ行ったのですが。方程式とアフィン変換は絶対に正しいです。 –