ROOT/Canvas 上のマウス・キーボード入力
TCanvas オブジェクト上でのマウスクリックや、キー入力に反応してルーチンを実行させたい。
ProcessedEvent() signal
TCanvas クラスには、マウス入力やキーボード入力に応じて発生する、
ProcessedEvent(Int_t,Int_t,Int_t,TObject*) というシグナルが用意されています。
よって、(Int_t,Int_t,Int_t,TObject*) という引数を持った関数を用意して、TCanvas オブジェクトの ProcessedEvent と Connect することで、Canvas 上で入力があるとその関数が呼び出されるようになります。
一つ目の引数 Int_t event は、イベントの種類を表していて、kButton1Down (クリック)、kButton1Double (ダブルクリック)、kButton3Down (右クリック)、kWheelDown (マウスホイールダウン)、kWheelUp (マウスホイールアップ)、kButton1Shift (Shift + クリック)、kKeyPress (キー入力) などが定義されています。
2つ目、3つ目の引数は、マウスカーソルの位置px, pyを表しています。ただし、これは Canvas 上の pixel 数になっているので、X軸、Y軸の値が欲しい時は注意が必要です。Float_t TPad::AbsPixeltoX(Int_t) を使うなどする必要があります。
event が kKeyPress の場合は、px、py にはキーを表す番号が入ります。
| Key | px | py |
| A(Capital) | 65 | 65 |
| Z(Capital) | 90 | 90 |
| a(Small) | 97 | 97 |
| z(Small) | 122 | 122 |
| 0 | 48 | 48 |
| 9 | 57 | 57 |
| space | 32 | 32 |
| Ctr + a | 1 | 65 |
| Ctr + z | 26 | 90 |
| enter | 13 | 4100 |
| shift | 0 | 4128 |
| ctr | 0 | 4129 |
| tab | 0 | 4097 |
| ← | 0 | 4114 |
| ↑ | 0 | 4115 |
| → | 0 | 4116 |
| ↓ | 0 | 4117 |