|
From: KUBO T. <ku...@ji...> - 2002-08-03 04:08:56
|
久保@茅ヶ崎市です。
Seiya Nishizawa <se...@ku...> writes:
>> GnomeCanvasをつかってやってみようと思います。
> アンチエリアス(Gnome::Canvas.new_aa)だと
> CanvasTextをmoveするとeventがとれなくなります。
> (正確には元の場所と移動先が重なった場所以外はeventがとれません)
> Gnome::Canvas.newだと問題ありません。
> またアンチエリアスでもGnome::CanvasRectだと問題ありません。
test-gnome.rb のサンプルでも同様だし、C で書かれたオリジナルの
test-gnome でも同様でした。
canvas-primitives.c でどうして make_anchor があるのか謎に思いつつ、
canvas-primitives.rb でも同じ関数を用意していたのですが、CanvasText に
対するイベントが取れなくなることがあるので、イベントを取るための把手が
必要だったのでしょう。
とりあえず、透明な CanvasRect を貼りつけて、CanvasRect のほうでイベン
トを取るようにしてみました。
西澤さんのサンプルの
text = canvas.root.item_new(Gnome::CanvasText,
"text", "Hello",
"fill_color","black",
"font","-b&h-lucida-bold-r-normal-*-14-*-*-*-p-*-iso8859-1",
"anchor",Gtk::ANCHOR_WEST)
を
text = canvas.root.item_new(Gnome::CanvasGroup)
text.item_new(Gnome::CanvasText,
"text", "Hello",
"fill_color","black",
"font","-b&h-lucida-bold-r-normal-*-14-*-*-*-p-*-iso8859-1",
"anchor",Gtk::ANCHOR_WEST)
text.item_new(Gnome::CanvasRect,
"x1", 0,
"y1", -10,
"x2", 40,
"y2", 10,
"fill_color_rgba", 0x00000000)
にしてみてください。
fill_color_rgba の最後の1バイトを 0x00 にするのが肝要です。
上の例では GanvasRect の幅を試行錯誤で決めてます。本当は CanvasText の
幅を取得して、それを使用するのが良いんですが、まだ実装されてません。実
装するとしたら、
Gnome::CanvasText#get("text_width")
Gnome::CanvasText#get("text_height")
という API になるでしょう。
では、再見
--
神奈川県茅ヶ崎市在住 久保 健洋
email: ku...@ji...
web: http://www.jiubao.org
GnuPG fingerprint = 5F7B C8EF CA16 57D0 FDE1 9F47 C001 1F93 AC08 2262
|