|
From: Seiya N. <se...@ku...> - 2002-08-03 02:35:50
|
西澤です。 > > > 最新の CVS に対するパッチを作りました。場所は、 > > > http://www.jiubao.org/tmp/art-affine.dif.gz > > > です。 > > 結局、むとうさんがおっしゃるように、 > > ・文字列をGdk::Imageにして自前でaffine変換かます > > ・CVS版のGnomeCanvasでもって全面的に書き直す。 > > のどちらかしかないでしょう。 > GnomeCanvasをつかってやってみようと思います。 アンチエリアス(Gnome::Canvas.new_aa)だと CanvasTextをmoveするとeventがとれなくなります。 (正確には元の場所と移動先が重なった場所以外はeventがとれません) Gnome::Canvas.newだと問題ありません。 またアンチエリアスでもGnome::CanvasRectだと問題ありません。 サンプルをつけます require "gnome" #canvas = Gnome::Canvas.new canvas = Gnome::Canvas.new_aa canvas.set_usize(300,300) 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) rect = canvas.root.item_new(Gnome::CanvasRect, "x1",50,"y1",50,"x2",100,"y2",100, "fill_color","white") text.signal_connect("event"){|widget,event| events(widget,event) } rect.signal_connect("event"){|widget,event| events(widget,event) } def events(widget,event) case event.event_type when Gdk::BUTTON_PRESS item_x, item_y = widget.parent.w2i(event.x, event.y) @x = item_x @y = item_y widget.grab(Gdk::POINTER_MOTION_MASK | Gdk::BUTTON_RELEASE_MASK, nil, event.time) fleur.destroy @dragging = true when Gdk::MOTION_NOTIFY item_x, item_y = widget.parent.w2i(event.x,event.y) if @dragging then widget.move(item_x-@x, item_y-@y) @x = item_x @y = item_y end when Gdk::BUTTON_RELEASE widget.ungrab(event.time) @dragging = false end end window = Gtk::Window.new(Gtk::WINDOW_TOPLEVEL) window.add(canvas) window.show_all Gtk.main ---------- Seiya Nishizawa se...@ku... |