Python と gnomecanvas を使用して簡単な描画アプリケーションを作成しようとしています。残念ながら、gnomecanvas の Python バインディングに関するドキュメントはまったくないようです。したがって、私はコード サンプルを使用して、C バインディングから推測しようとしています。
現状では、ストローク内の現在のポイントのリストを保持し、新しいアイテムごとにこのリストから新しいパス オブジェクトを生成することによって、コードが機能しています。
def get_pointer_coords(self, event):
return self.window_to_world(event.x, event.y)
def render_path(self):
path_def = gnomecanvas.path_def_new(self.cur_path)
self.current_item.set_bpath(path_def)
def button_press(self, event):
is_core = event.device is gdk.device_get_core_pointer()
if is_core:
return
self.drawing = True
(x, y) = self.get_pointer_coords(event)
self.cur_path = [(gnomecanvas.MOVETO_OPEN, x, y)]
self.current_item = self.root().add( gnomecanvas.CanvasBpath
, outline_color="#A6E22E"
, width_pixels=1
, cap_style=gdk.CAP_ROUND
)
def button_release(self, event):
self.drawing = False
def motion_notify(self, event):
is_core = event.device is gdk.device_get_core_pointer()
if not is_core and self.drawing:
(x, y) = self.get_pointer_coords(event)
self.cur_path.append((gnomecanvas.LINETO, x, y))
self.render_path()
これはかなり非効率的な方法のように思えます。ポインターが移動するたびに新しいオブジェクトを生成します。タブレットからサブピクセル精度を取得していることを考えると、これはかなり頻繁です。
私の質問は、このライブラリの C バージョンのように、ポインタの動きごとに既存の bpath に簡単に追加できる方法はありますか?
関連する注意事項として、この API に関するドキュメントはありますか?何時間もグーグルで検索しましたが、見返りはありませんでした。