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