2

Xlib では、XDefineCursor 関数を使用して、マウス ポインターを、XCreatePixmapCursor 関数から生成しているさまざまなカーソルに変更しています。カーソルが実際に期待どおりに変化することがわかりましたが、その場合、カーソルの変化の間に奇妙な点滅/ちらつきが発生し、カーソルが適切な位置に再表示される前にすばやく不規則にジッターします。それは非常に速く起こりますが、かなり目立ちます。カーソルの変化の間をスムーズに移行することは可能ですか? それとも私は何か間違ったことをしていますか?ありがとう!

アップデート:

Pixmap カーソルの定義中に使用されるホットスポットは、この問題に関連していると思います。私が使用している各カーソルには、カーソルの外観に応じて、それ自体に関連付けられた独自のホットスポットがあります。すべてのホットスポット値を単純に (0, 0) に設定すると、ちらつきがなくなることがわかりました。残念ながら、これはカーソルのホットスポットが正しくないことを意味します。元:

// before, causes flicker
cursor1_pointer = XCreatePixmapCursor(dpy, cursor1_source, cursor1_source,
  &foreground_color, &background_color, 16, 15);

// after, no flicker
cursor1_pointer = XCreatePixmapCursor(dpy, cursor1_source, cursor1_source,
  &foreground_color, &background_color, 0, 0);

Xlib は、変更中に新しいホットスポットに基づいてカーソルを再配置しようとしていると推測しています。残念ながら、視覚的に優雅な方法でそうしているようには見えません。何か案は?

アップデート:

このちらつきを防ぐためのやや不格好なトリックを見つけました。基本的に、すべてのカーソル画像ファイルを編集して十分な大きさのキャンバス サイズを共有し、プログラムで使用されるすべてのカーソルが共通のホットスポット ピクセル座標 (16, 16) を共有できるように、このスペース内で各カーソル画像を再配置しました。そうすれば、Xlib がカーソルを更新するときに、新しい画像のホットスポットに従ってカーソルを再配置する必要がなくなり、半滑らかな視覚的遷移が可能になります。

最もエレガントなソリューションではありませんが、機能します。

4

0 に答える 0