mirror of
https://github.com/sbrl/Nibriboard.git
synced 2018-01-10 21:33:49 +00:00
127 lines
2.9 KiB
JavaScript
127 lines
2.9 KiB
JavaScript
"use strict";
|
|
|
|
/*****************************************************************************
|
|
******************************** Mouse class ********************************
|
|
********************************************************************* v0.1 **
|
|
* A simple mouse class, records and stores mouse information later use
|
|
* outside an event listener. Depends on my earlier Vector class.
|
|
*
|
|
* Author: Starbeamrainbowlabs
|
|
* Twitter: @SBRLabs
|
|
* Email: feedback at starbeamrainbowlabs dot com
|
|
*
|
|
* From https://gist.github.com/sbrl/06db619f2a1f75305fbd54f66402459b
|
|
*****************************************************************************
|
|
* Originally written for the Nibriboard client.
|
|
*****************************************************************************
|
|
* Changelog
|
|
*****************************************************************************
|
|
* v0.1 - 28th March 2017
|
|
* Initial release.
|
|
*/
|
|
|
|
import Vector from './Vector.js';
|
|
|
|
/**
|
|
* A reference for the different mouse button types.
|
|
* @type {Object}
|
|
*/
|
|
var MouseButtons = {
|
|
/**
|
|
* The left mouse button.
|
|
* @type {Number}
|
|
*/
|
|
Left: 0,
|
|
/**
|
|
* The right mouse button.
|
|
* @type {Number}
|
|
*/
|
|
Right: 2,
|
|
/**
|
|
* The middle mouse button.
|
|
* @type {Number}
|
|
*/
|
|
Middle: 1
|
|
};
|
|
|
|
class Mouse
|
|
{
|
|
constructor()
|
|
{
|
|
/**
|
|
* Whether the left mouse button is down or not.
|
|
* @type {boolean}
|
|
*/
|
|
this.leftDown = false;
|
|
/**
|
|
* Whether the right mouse button is down or not.
|
|
* @type {boolean}
|
|
*/
|
|
this.rightDown = false;
|
|
/**
|
|
* Whether the middle mouse button is down or not.
|
|
* @type {boolean}
|
|
*/
|
|
this.middleDown = false;
|
|
/**
|
|
* The last known position of the mouse in document-space.
|
|
* @type {Vector}
|
|
*/
|
|
this.position = new Vector(0, 0);
|
|
|
|
// Register the required event listeners
|
|
document.addEventListener("mouseup", this.handleMouseUp.bind(this));
|
|
document.addEventListener("mousedown", this.handleMouseDown.bind(this));
|
|
document.addEventListener("mousemove", this.handleMouseMove.bind(this));
|
|
}
|
|
|
|
handleMouseUp(event)
|
|
{
|
|
switch(event.button)
|
|
{
|
|
case MouseButtons.Left:
|
|
this.leftDown = false;
|
|
break;
|
|
case MouseButtons.Right:
|
|
this.rightDown = false;
|
|
break;
|
|
case MouseButtons.Middle:
|
|
this.middleDown = false;
|
|
break;
|
|
default:
|
|
console.warn(`Unknown mouse up button type ${even.button}`);
|
|
break;
|
|
}
|
|
}
|
|
|
|
handleMouseDown(event)
|
|
{
|
|
switch(event.button)
|
|
{
|
|
case MouseButtons.Left:
|
|
this.leftDown = true;
|
|
break;
|
|
case MouseButtons.Right:
|
|
this.rightDown = true;
|
|
break;
|
|
case MouseButtons.Middle:
|
|
this.middleDown = true;
|
|
break;
|
|
default:
|
|
console.warn(`Unknown mouse down button type ${even.button}`);
|
|
break;
|
|
}
|
|
}
|
|
|
|
handleMouseMove(event)
|
|
{
|
|
this.position.x = event.clientX;
|
|
this.position.y = event.clientY;
|
|
this.pressure = typeof event.pressure === "number" ? event.pressure : event.mozPressure;
|
|
}
|
|
}
|
|
|
|
|
|
export { Mouse, MouseButtons };
|
|
export default Mouse;
|