1
0
Fork 0
Nibriboard/Nibriboard/ClientFiles/Pencil.js

87 lines
2.1 KiB
JavaScript
Raw Normal View History

"use strict";
2017-04-14 19:22:01 +00:00
import Mouse from './Utilities/Mouse';
import Vector from './Utilities/Vector';
var cuid = require("cuid");
class Pencil
{
/**
* Creates a new Pencil class instance.
* @param {RippleLink} inRippleLink The connection to the nibri server.
* @return {Pencil} A new Pencil class instance.
*/
2017-04-14 19:22:01 +00:00
constructor(inRippleLink, inBoardWindow)
{
2017-04-14 19:22:01 +00:00
// The time, in milliseconds, between pushes of the line to the server.
this.pushDelay = 200;
/**
* The ripple link connection to the server.
* @type {RippleLink}
*/
this.rippleLink = inRippleLink;
/**
* The mouse information.
* @type {Mouse}
*/
this.mouse = new Mouse();
2017-04-14 19:22:01 +00:00
// The id of the current line-in-progress.
this.currentLineId = cuid();
// Holds the (unsimplified) line segments before the pencil is lifted.
this.currentLineSegments = [];
// The segments of the (unsimplified) line that haven't yet been sent
// to the server.
this.unsentSegments = [];
2017-04-14 19:22:01 +00:00
// The time of the last push of the line to the server.
this.lastServerPush = 0;
2017-04-14 19:22:01 +00:00
document.addEventListener("mouseDown", this.handleMouseDown.bind(this));
document.addEventListener("mouseMove", this.handleMouseMove.bind(this));
2017-04-14 19:22:01 +00:00
document.addEventListener("mouseUp", this.handleMouseUp.bind(this));
}
handleMouseDown(event) {
}
handleMouseMove(event) {
2017-04-14 19:22:01 +00:00
var nextPoint = new Vector(event.clientX, event.clientY);
this.unsentSegments.push(nextPoint);
this.currentLineSegments.push(nextPoint);
if(new Date() - this.lastServerPush > this.pushDelay)
sendUnsent();
}
handleMouseUp(event) {
sendUnsent();
// Reset the currently line segments
this.currentLineSegments = [];
// Regenerate the line id
this.currentLineId = cuid();
}
/**
* Send the unsent segments of the line to the server and reset the line
* unsent segments buffer.
*/
sendUnsent() {
// It's time for another push of the line to the server
this.rippleLink.send({
Event: "LinePart",
Points: this.unsentSegments,
LineId: this.currentLineId
});
// Reset the unsent segments buffer
this.unsentSegments = [];
}
render(canvas, context) {
}
}