|
22 | 22 | y = 0, |
23 | 23 | scale = 1 |
24 | 24 | }; |
| 25 | + MouseCoords _lastClickCoords = new() |
| 26 | + { |
| 27 | + ClientX = 0, |
| 28 | + ClientY = 0 |
| 29 | + }; |
| 30 | + bool _isMouseDown = false; |
25 | 31 |
|
26 | 32 | protected override void OnAfterRender(bool firstRender) |
27 | 33 | { |
|
35 | 41 | Height = _height, |
36 | 42 | OnCanvasReady = this.OnMainCanvasReady, |
37 | 43 | OnFrameReady = this.OnMainFrameReady, |
38 | | - OnWheel = this.OnWheel |
| 44 | + OnMouseWheel = this.OnMouseWheel, |
| 45 | + OnMouseDown = this.OnMouseDown, |
| 46 | + OnMouseUp = this.OnMouseUp, |
| 47 | + OnMouseMove = (MouseCoords evt) => |
| 48 | + { |
| 49 | + if (_isMouseDown) |
| 50 | + { |
| 51 | + var newX = evt.ClientX - _lastClickCoords.ClientX; |
| 52 | + var newY = evt.ClientY - _lastClickCoords.ClientY; |
| 53 | + _viewportTransform = new() |
| 54 | + { |
| 55 | + x = _viewportTransform.x + newX, |
| 56 | + y = _viewportTransform.y + newY, |
| 57 | + scale = _viewportTransform.scale |
| 58 | + }; |
| 59 | + } |
| 60 | + _lastClickCoords = new MouseCoords() |
| 61 | + { |
| 62 | + ClientX = evt.ClientX, |
| 63 | + ClientY = evt.ClientY |
| 64 | + }; |
| 65 | + } |
39 | 66 | }); |
40 | 67 |
|
41 | 68 | base.OnAfterRender(firstRender); |
|
51 | 78 | this.Render(); |
52 | 79 | } |
53 | 80 |
|
| 81 | + private void OnMouseDown(MouseButtonData evt) |
| 82 | + { |
| 83 | + _isMouseDown = true; |
| 84 | + } |
| 85 | + private void OnMouseUp(MouseButtonData evt) |
| 86 | + { |
| 87 | + _isMouseDown = false; |
| 88 | + } |
54 | 89 |
|
55 | | - private void OnWheel(WheelDelta evt) |
| 90 | + private void OnMouseWheel(WheelDelta evt) |
56 | 91 | { |
57 | 92 | var newScale = _viewportTransform.scale + evt.DeltaY * -0.001f; |
58 | 93 | var newX = evt.ClientX - (evt.ClientX - _viewportTransform.x) * (newScale / _viewportTransform.scale); |
|
81 | 116 | _context.Font = "24px verdana"; |
82 | 117 | _context.FillStyle = "yellow"; |
83 | 118 | _context.FillText("Use the wheel to change the zoom", 20, 20); |
| 119 | + _context.FillText("Click to pan the view", 20, 80); |
84 | 120 |
|
85 | 121 | _context.SetTransform(_viewportTransform.scale, 0, 0, _viewportTransform.scale, _viewportTransform.x, _viewportTransform.y); |
86 | 122 | DrawRect(100, 100, 100, 100, "red"); |
|
0 commit comments