私は、クリックアンドドラッグ機能を備えたHaskellプログラムを作成しています。そのため、各マウス移動イベントで更新がウィンドウに描画されます。現時点では私が使用していますGtk2hsでカイロのアップデートを行う正しい方法は何ですか?
renderWithDrawable myCanvas update
しかし、これは多くのちらつきです。私は、別のドロウアブル(「サーフェス」?)を作成してそれにレンダリングし、それをスクリーンウィンドウに1回の操作でblitする必要があると私は理解しています。しかし、私はこれを行う正しい方法について混乱しています。
私はdrawWindowBeginPaintRegion
を見つけました。これは、ちらつきをなくすことについて話しています。 しかし、Gtk3で削除されたのはです。 Haddockドキュメントだから私はこれを使うべきかどうか分からない。それは非難されるようだ。
私はまた、カイロでrenderWithSimilarSurface
を見つけました。これは、何か類似しているようです。
また、これらの機能がrenderWithDrawable
にどのように関係しているかわかりません:その機能の中でそれらを使用する必要がありますか?
これを行う正しい方法は何ですか?
編集
これは、カイロで既知のものだそうです。私はHaskellでこれを処理する方法を理解しようとしています。
最小限の自己完結型の例を投稿できますか? – Cactus
@Cactus、簡単にはありません。フリッカー問題のデモでは、アニメーションやマウスイベントハンドラが何度か繰り返されて再描画が必要になるため、小さくならないでしょう。また、ちらつきの程度はプラットフォームによって異なるようです。代わりに私は他の言語での問題の議論へのポインタでポストを更新します。PixMapに描画し、それをスクリーンに描画することは、他の言語では標準的なようです。そのため、Haskellで標準的な方法があることを期待していました。 –
'clip'関数を見たいかもしれません。それはあなたが必要なもの(あなたの場合、ドラッグされたオブジェクトの最初の矩形(古い位置)と新しい矩形(新しい位置))だけを再描画することができます。 – antoyo