Skip to content

Commit 1eeb4fd

Browse files
Added wheel support (#321)
* Added wheel support * Updated docs
1 parent 46e1b09 commit 1eeb4fd

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

ipycanvas/canvas.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,7 @@ class Canvas(_CanvasBase):
582582

583583
_client_ready_callbacks = Instance(CallbackDispatcher, ())
584584

585+
_mouse_wheel_callbacks = Instance(CallbackDispatcher, ())
585586
_mouse_move_callbacks = Instance(CallbackDispatcher, ())
586587
_mouse_down_callbacks = Instance(CallbackDispatcher, ())
587588
_mouse_up_callbacks = Instance(CallbackDispatcher, ())
@@ -1507,6 +1508,10 @@ def on_mouse_out(self, callback, remove=False):
15071508
"""Register a callback that will be called on mouse out of the canvas."""
15081509
self._mouse_out_callbacks.register_callback(callback, remove=remove)
15091510

1511+
def on_mouse_wheel(self, callback, remove=False):
1512+
"""Register a callback that will be called on mouse wheel movement."""
1513+
self._mouse_wheel_callbacks.register_callback(callback, remove=remove)
1514+
15101515
def on_touch_start(self, callback, remove=False):
15111516
"""Register a callback that will be called on touch start (new finger on the screen)."""
15121517
self._touch_start_callbacks.register_callback(callback, remove=remove)
@@ -1551,6 +1556,8 @@ def _handle_frontend_event(self, _, content, buffers):
15511556
self._mouse_up_callbacks(content["x"], content["y"])
15521557
if content.get("event", "") == "mouse_out":
15531558
self._mouse_out_callbacks(content["x"], content["y"])
1559+
if content.get("event", "") == "mouse_wheel":
1560+
self._mouse_wheel_callbacks(content["x"], content["y"])
15541561

15551562
if content.get("event", "") == "touch_start":
15561563
self._touch_start_callbacks(
@@ -1749,6 +1756,10 @@ def on_mouse_out(self, callback, remove=False):
17491756
"""Register a callback that will be called on mouse out of the canvas."""
17501757
self._canvases[-1].on_mouse_out(callback, remove=remove)
17511758

1759+
def on_mouse_wheel(self, callback, remove=False):
1760+
"""Register a callback that will be called on mouse wheel movement."""
1761+
self._canvases[-1].on_mouse_wheel(callback, remove=remove)
1762+
17521763
def on_touch_start(self, callback, remove=False):
17531764
"""Register a callback that will be called on touch start (new finger on the screen)."""
17541765
self._canvases[-1].on_touch_start(callback, remove=remove)

src/widget.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1338,6 +1338,9 @@ export class CanvasView extends DOMWidgetView {
13381338
this.el.addEventListener('mouseout', {
13391339
handleEvent: this.onMouseOut.bind(this)
13401340
});
1341+
this.el.addEventListener('wheel', {
1342+
handleEvent: this.onMouseWheel.bind(this)
1343+
});
13411344
this.el.addEventListener('touchstart', {
13421345
handleEvent: this.onTouchStart.bind(this)
13431346
});
@@ -1392,6 +1395,14 @@ export class CanvasView extends DOMWidgetView {
13921395
this.model.send({ event: 'mouse_out', ...this.getCoordinates(event) }, {});
13931396
}
13941397

1398+
private onMouseWheel(event: WheelEvent) {
1399+
this.model.send(
1400+
{ event: 'mouse_wheel', x: event.deltaX, y: event.deltaY },
1401+
{}
1402+
);
1403+
event.preventDefault();
1404+
}
1405+
13951406
private onTouchStart(event: TouchEvent) {
13961407
const touches: Touch[] = Array.from(event.touches);
13971408
this.model.send(

0 commit comments

Comments
 (0)