CanvasPointer 経由でルーティングします。押下がクリック、ダブルクリック、ドラッグのいずれになるかを判定し、その押下に対して割り当てたコールバックを実行します。キャンバス上に描画されたウィジェットは、onPointerDown を通じてこれを利用します。
デフォルトの動作
- 複数の選択済み項目をドラッグする際に、Shift キーを押し続ける必要がなくなりました。複数の項目が選択されている状態で1つの項目をクリックすると、他の項目は引き続き選択解除されます。
- 入力上の接続済みリンクをクリックしても、切断と再接続は行われなくなりました。
- ポインタのダウンからアップまでのわずかな移動量は、引き続きクリックとして扱われます。ポインタがクリックドリフトの上限を超えて移動すると、その押下はドラッグになります。時間はこの判定に影響しません。
- ダブルクリックには、ダブルクリック時間内に2回の押下が必要で、その間隔は最大でクリックドリフトの3倍までです。
onDoubleClickを割り当てた押下のみがダブルクリックを完了できます。
Comfy.Pointer.ClickDrift と Comfy.Pointer.DoubleClickTime)。
複数項目の選択
Ctrl+ ドラッグ: 複数選択を開始Ctrl+Shift+ ドラッグ: 選択に追加Ctrl+ ドラッグ、その後Shift: 選択に追加Ctrl+ ドラッグ、その後Alt: 選択から削除
ウィジェットでポインター入力を処理する
ウィジェットにonPointerDown を設定します。これはポインターの押下時に実行され、ポインター、ノード、キャンバスを受け取ります。必要なコールバックをポインターに設定すると、押下が確定した時点でキャンバスが適切なものを実行します。
onClickとonDoubleClickは、onDragStart、onDragEnd、onDragCancelと同じ押下では実行されません。onDragはクリックとして終わる押下でも実行されます。クリックのドリフト範囲内の移動も受け取るためです。onDragStartはドラッグごとに 1 回、ポインターが最初にクリックのドリフト範囲を超えて移動したときに実行されます。移動イベントが報告される前にポインターが範囲外で離された場合、onDragStartは離した時点で実行され、onDragEndがその直後に実行され、onDragは実行されません。- 1 回の押下で
onClickとonDoubleClickの両方を設定した場合、ダブルクリックの 1 回目の押下を離すとonClickが実行されます。2 回目の押下ではonClickの代わりにonDoubleClickが実行されるため、onClickは先に実行されても安全にしてください。1 回目のクリックがウィジェットではなく近くの項目に当たることもあるため、onClickが実行されていない状態でonDoubleClickが実行される場合があります。 onDragEndはドラッグのポインターアップイベントを受け取ります。ドラッグが中断された場合(ポインターキャプチャを失った場合など)は代わりにonDragCancelが実行されます。finallyは押下が終わったときに 1 回実行されます。pointer.finallyを設定すると、置き換えられるコールバックが即座に実行されます。onPointerDownがtrueを返さない場合、キャンバスが独自のfinallyを設定するため、あなたのコールバックはポインター押下の間に実行されます。クリーンアップをfinallyに依存する場合はtrueを返してください。pointer.eDown、pointer.eMove、pointer.eUpにより、すべてのコールバックがイベントの流れ全体にアクセスできます。- キャンバス自身に押下を処理させない場合は
trueを返します。 onPointerDownを追加するときは、レガシーのwidget.mouseハンドラーを削除してください。onPointerDownがtrueを返す場合、キャンバスは離した後もウィジェットを追跡し続け、ポインターが移動するたびにwidget.mouseを呼び続けます。
キャンバスカーソルを制御する
canvas.state.hoveringOver は、ポインタの下にある項目タイプ(ノード、グループ、リルート、リンクなど)のビットフラグを保持します。canvas.state.shouldSetCursor を false に設定すると、キャンバスがカーソルスタイルを設定しなくなるので、その後は自分でカーソルを設定します:
shouldSetCursor が false のままでも、ノードのリサイズを開始するとリサイズカーソルが設定されます。リサイズが終了した後、カーソルを再度設定してください。