blob: 85d6e6ef82b7898362099b7208fdbcfc6ea45d33 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
import SwiftUI
struct BlockView: View {
@ObservedObject var block: Block
@State private var hovering = false
var body: some View {
HStack(spacing: 0) {
ForEach(block.cells) { cell in
CellView(cell: cell)
}
}
.onHover { hovering = $0 }
.onAppear {
NSEvent.addLocalMonitorForEvents(matching: [
.leftMouseDown,
.rightMouseDown,
.otherMouseDown,
.scrollWheel,
]) { event in
handle(event: event)
}
}
}
private func handle(event: NSEvent) -> NSEvent {
guard hovering else { return event }
switch event.type {
case .leftMouseDown, .rightMouseDown, .otherMouseDown:
block.runScript(env: ["BUTTON": String(event.buttonNumber)])
break
case .scrollWheel:
if event.scrollingDeltaY > 0 {
block.runScript(env: ["SCROLL": "UP"])
break
}
if event.scrollingDeltaY < 0 {
block.runScript(env: ["SCROLL": "DOWN"])
break
}
if event.scrollingDeltaX > 0 {
block.runScript(env: ["SCROLL": "RIGHT"])
break
}
if event.scrollingDeltaX < 0 {
block.runScript(env: ["SCROLL": "LEFT"])
break
}
default:
break
}
return event
}
}
|