9 changed files with 145 additions and 2 deletions
@ -0,0 +1,11 @@ |
|||||
|
import * as React from "react"; |
||||
|
import {InputModifiers} from "src/Models/Input/InputModifiers"; |
||||
|
import {getModifiers} from "src/Models/Input/MouseEventHelpers"; |
||||
|
|
||||
|
export abstract class InputEventMessageBase { |
||||
|
public readonly modifiers : Array<InputModifiers>; |
||||
|
|
||||
|
protected constructor(e: React.MouseEvent) { |
||||
|
this.modifiers = getModifiers(e); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,9 @@ |
|||||
|
export enum InputModifiers { |
||||
|
Alt, |
||||
|
Control, |
||||
|
Shift, |
||||
|
Windows, |
||||
|
LeftMouseButton, |
||||
|
RightMouseButton, |
||||
|
MiddleMouseButton, |
||||
|
} |
||||
@ -0,0 +1,6 @@ |
|||||
|
export enum MouseButton { |
||||
|
None, |
||||
|
Left, |
||||
|
Right, |
||||
|
Middle, |
||||
|
} |
||||
@ -0,0 +1,37 @@ |
|||||
|
import * as React from "react"; |
||||
|
import {InputModifiers} from "src/Models/Input/InputModifiers"; |
||||
|
import {MouseButton} from "src/Models/Input/MouseButton"; |
||||
|
|
||||
|
export function getModifiers(e: React.MouseEvent): Array<InputModifiers> { |
||||
|
|
||||
|
let modifiers : Array<InputModifiers> = []; |
||||
|
|
||||
|
if (e.altKey) |
||||
|
modifiers.push(InputModifiers.Alt); |
||||
|
if (e.ctrlKey) |
||||
|
modifiers.push(InputModifiers.Control); |
||||
|
if (e.shiftKey) |
||||
|
modifiers.push(InputModifiers.Shift); |
||||
|
if (e.metaKey) |
||||
|
modifiers.push(InputModifiers.Windows); |
||||
|
if ((e.buttons & 1) != 0) |
||||
|
modifiers.push(InputModifiers.LeftMouseButton); |
||||
|
if ((e.buttons & 2) != 0) |
||||
|
modifiers.push(InputModifiers.RightMouseButton); |
||||
|
if ((e.buttons & 4) != 0) |
||||
|
modifiers.push(InputModifiers.MiddleMouseButton); |
||||
|
|
||||
|
return modifiers; |
||||
|
} |
||||
|
|
||||
|
export function getMouseButton(e: React.MouseEvent) : MouseButton { |
||||
|
if (e.button == 1) { |
||||
|
return MouseButton.Left; |
||||
|
} else if (e.button == 2) { |
||||
|
return MouseButton.Right; |
||||
|
} else if (e.button == 4) { |
||||
|
return MouseButton.Middle |
||||
|
} else { |
||||
|
return MouseButton.None; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,13 @@ |
|||||
|
import * as React from "react"; |
||||
|
import {InputEventMessageBase} from "src/Models/Input/InputEventMessageBase"; |
||||
|
|
||||
|
export abstract class PointerEventMessageBase extends InputEventMessageBase { |
||||
|
public readonly x: number; |
||||
|
public readonly y: number; |
||||
|
|
||||
|
protected constructor(e: React.MouseEvent) { |
||||
|
super(e) |
||||
|
this.x = e.clientX; |
||||
|
this.y = e.clientY; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,12 @@ |
|||||
|
import * as React from "react"; |
||||
|
import {PointerEventMessageBase} from "src/Models/Input/PointerEventMessageBase"; |
||||
|
|
||||
|
export class PointerMovedEventMessage extends PointerEventMessageBase { |
||||
|
constructor(e: React.MouseEvent) { |
||||
|
super(e) |
||||
|
} |
||||
|
|
||||
|
public toString = () : string => { |
||||
|
return `pointer-moved:${this.modifiers}:${this.x}:${this.y}`; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,17 @@ |
|||||
|
import * as React from "react"; |
||||
|
import {PointerEventMessageBase} from "src/Models/Input/PointerEventMessageBase"; |
||||
|
import {MouseButton} from "src/Models/Input/MouseButton"; |
||||
|
import {getMouseButton} from "src/Models/Input/MouseEventHelpers"; |
||||
|
|
||||
|
export class PointerPressedEventMessage extends PointerEventMessageBase { |
||||
|
public readonly button: MouseButton |
||||
|
|
||||
|
constructor(e: React.MouseEvent) { |
||||
|
super(e) |
||||
|
this.button = getMouseButton(e); |
||||
|
} |
||||
|
|
||||
|
public toString = () : string => { |
||||
|
return `pointer-pressed:${this.modifiers}:${this.button}:${this.x}:${this.y}`; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,17 @@ |
|||||
|
import * as React from "react"; |
||||
|
import {PointerEventMessageBase} from "src/Models/Input/PointerEventMessageBase"; |
||||
|
import {MouseButton} from "src/Models/Input/MouseButton"; |
||||
|
import {getMouseButton} from "src/Models/Input/MouseEventHelpers"; |
||||
|
|
||||
|
export class PointerReleasedEventMessage extends PointerEventMessageBase { |
||||
|
public readonly button: MouseButton |
||||
|
|
||||
|
constructor(e: React.MouseEvent) { |
||||
|
super(e) |
||||
|
this.button = getMouseButton(e); |
||||
|
} |
||||
|
|
||||
|
public toString = () : string => { |
||||
|
return `pointer-released:${this.modifiers}:${this.button}:${this.x}:${this.y}`; |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue