Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 64 additions & 0 deletions Sources/ElementaryDOM/Interop/EventHandlers.swift
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,70 @@ public struct MouseEvent: DOMEvent {
// TODO: maybe check some stuff..
self.rawEvent = rawEvent
}

public var altKey: Bool {
rawEvent.altKey.boolean!
}

public var button: Int {
Int(rawEvent.button.number!)
}

public var buttons: Int {
Int(rawEvent.buttons.number!)
}

public var clientX: Double {
rawEvent.clientX.number!
}

public var clientY: Double {
rawEvent.clientY.number!
}

public var ctrlKey: Bool {
rawEvent.ctrlKey.boolean!
}

public var metaKey: Bool {
rawEvent.metaKey.boolean!
}

public var movementX: Double {
rawEvent.movementX.number!
}

public var movementY: Double {
rawEvent.movementY.number!
}

public var offsetX: Double {
rawEvent.offsetX.number!
}

public var offsetY: Double {
rawEvent.offsetY.number!
}

public var pageX: Double {
rawEvent.pageX.number!
}

public var pageY: Double {
rawEvent.pageY.number!
}

public var screenX: Double {
rawEvent.screenX.number!
}

public var screenY: Double {
rawEvent.screenY.number!
}

public var shiftKey: Bool {
rawEvent.shiftKey.boolean!
}
}

public struct InputEvent: DOMEvent {
Expand Down
27 changes: 27 additions & 0 deletions Sources/ElementaryDOM/Interop/View+DOMEvents.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,18 @@ public extension View {
onClick { _ in handler() }
}

consuming func onMouseDown(_ handler: @escaping (MouseEvent) -> Void) -> some View {
onEvent(DOMEventHandlers.MouseDown.self, handler: handler)
}

consuming func onMouseMove(_ handler: @escaping (MouseEvent) -> Void) -> some View {
onEvent(DOMEventHandlers.MouseMove.self, handler: handler)
}

consuming func onMouseUp(_ handler: @escaping (MouseEvent) -> Void) -> some View {
onEvent(DOMEventHandlers.MouseUp.self, handler: handler)
}

consuming func onKeyDown(_ handler: @escaping (KeyboardEvent) -> Void) -> some View {
onEvent(DOMEventHandlers.KeyDown.self, handler: handler)
}
Expand All @@ -31,6 +43,21 @@ enum DOMEventHandlers {
typealias Event = MouseEvent
}

enum MouseDown: DOMEventHandlerConfig {
static var name: String = "mousedown"
typealias Event = MouseEvent
}

enum MouseMove: DOMEventHandlerConfig {
static var name: String = "mousemove"
typealias Event = MouseEvent
}

enum MouseUp: DOMEventHandlerConfig {
static var name: String = "mouseup"
typealias Event = MouseEvent
}

enum KeyDown: DOMEventHandlerConfig {
static var name: String = "keydown"
typealias Event = KeyboardEvent
Expand Down