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