派生元のクラスに定義されているdrawメソッドを呼んだ後に,一度ウェジット内 部をクリアし,そして,描画色を黒(FLTK::BLACK)に設定してからそれぞれの線 を描画しています.こうすることで,MyCanvasというウェジットが再描画される ときには常にこのメソッドが呼び出されます. 同様に,イベントを処理するための関数handleは次の通りです.def draw super() clear color(FLTK::BLACK) @lines.each{|line| line.draw} end
MyCanvasウェジット内で発生したイベントは最初にこのメソッドに渡されます. この中では,マウスボタンが押されたらドラッグの用意をするためのイベント受 理したものとしてtrueを返します.そして,ドラッグ(FLTK::DRAG)イベントが起 こると,@curに保存された子ウェジットの位置を変更して,そして再描画します. イベントは受理されたのでここでもtrueを返します.その他の場合は,falseを 返して,イベントが子ウェジットに渡されるようにします.def handle(e) case e when FLTK::PUSH return true when FLTK::DRAG if( @cur ) @cur.position(FLTK.event_x, FLTK.event_y) end redraw return true else return false end end