@up-group/react-controls
Version:
We know that there are a ton of react UI library projects to choose from. Our hope with this one is to provide the next generation of react components that you can use to bootstrap your next project, or as a reference for building a UIKit. Read on to get
268 lines • 12 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
var Shape_1 = require("./Shape");
var $ = require("jquery");
var CanvasState = (function () {
function CanvasState(canvas) {
var _this = this;
this.registerListeners = function () {
var myState = _this;
var canvas = _this.canvas;
canvas.addEventListener('selectstart', function (e) { e.preventDefault(); return false; }, false);
canvas.addEventListener('mousedown', function (e) {
if (myState.imageObj !== false && myState.imageObj.width + 2 * myState.border != canvas.width) {
myState.dragging = false;
myState.drawing = false;
if (myState.alert == false) {
alert('La sélection de zone n\'est possible que si le zoom est désactivé !');
myState.alert = true;
}
}
else {
var mouse = myState.getMouse(e);
var mx = mouse.x;
var my = mouse.y;
var shapes = myState.shapes;
var l = shapes.length;
for (var i = l - 1; i >= 0; i--) {
if (shapes[i].contains(mx, my, myState.scale)) {
var mySel = shapes[i];
myState.dragoffx = mx - mySel.x;
myState.dragoffy = my - mySel.y;
myState.dragging = true;
myState.selection = mySel;
console.log('Selection : ');
console.log(myState.selection);
myState.valid = false;
return;
}
}
if (myState.selection) {
myState.selection = null;
console.log('Selection : ');
console.log(myState.selection);
myState.valid = false;
}
myState.drawing = true;
myState.drawingoffx = mx;
myState.drawingoffy = my;
}
}, true);
canvas.addEventListener('mousemove', function (e) {
if (myState.dragging) {
var mouse = myState.getMouse(e);
myState.selection.x = mouse.x - myState.dragoffx;
myState.selection.y = mouse.y - myState.dragoffy;
myState.valid = false;
}
else if (myState.drawing) {
var mouse = myState.getMouse(e);
var _h = Math.abs(mouse.y - myState.drawingoffy);
var _w = Math.abs(mouse.x - myState.drawingoffx);
var _shape = new Shape_1.default(myState.drawingoffx, myState.drawingoffy, _w, _h, 'rgba(0,255,0,.6)');
_shape.temp = true;
myState.addShape(_shape);
}
}, true);
canvas.addEventListener('mouseup', function (e) {
if (myState.drawing === true) {
var mouse = myState.getMouse(e);
var _h = Math.abs(mouse.y - myState.drawingoffy);
var _w = Math.abs(mouse.x - myState.drawingoffx);
if (_w > 120 && _h > 17) {
var _shape = new Shape_1.default(myState.drawingoffx, myState.drawingoffy, _w, _h, mouse.y, false);
myState.addShape(_shape);
}
else {
myState.removeTempShape();
}
myState.valid = false;
}
myState.dragging = false;
myState.drawing = false;
}, true);
};
this.removeTempShape = function () {
var _shapes = [];
for (var i in _this.shapes) {
if (_this.shapes[i].temp !== true) {
_shapes.push(_this.shapes[i]);
}
}
_this.shapes = _shapes;
};
this.addShape = function (shape) {
var _shapes = [];
var _nextRef = 1;
_this.shapes = _this.shapes.sort(function (a, b) {
if (a.ref < b.ref) {
return -1;
}
else if (a.ref > b.ref) {
return 1;
}
else {
return 0;
}
});
for (var i in _this.shapes) {
if (_this.shapes[i].temp !== true) {
var _ref = _this.shapes[i].ref;
if (_nextRef < _ref) {
break;
}
else if (_ref >= _nextRef) {
_nextRef = _ref + 1;
}
}
}
for (var i in _this.shapes) {
if (_this.shapes[i].temp !== true) {
_shapes.push(_this.shapes[i]);
}
}
_this.shapes = _shapes;
shape.ref = _nextRef;
if (_this.onAddShape && shape.temp === false) {
_this.onAddShape(shape);
}
_this.shapes.push(shape);
if (shape.temp !== true) {
}
_this.selection = null;
console.log('On AddShape -> Selection : ');
console.log(_this.selection);
_this.valid = false;
};
this.cropShape = function (shape) {
var crop_canvas, left = shape.x, top = shape.y, width = shape.w, height = shape.h;
crop_canvas = document.createElement('canvas');
crop_canvas.width = width;
crop_canvas.height = height;
try {
crop_canvas.getContext('2d').drawImage(_this.imageObj, left - _this.border, top - _this.border, width, height, 0, 0, width, height);
return crop_canvas.toDataURL("image/png");
}
catch (error) {
alert('La sélection de zone ' + shape.ref + ' dépasse les limites de l\'ordonnance !');
return null;
}
};
this.removeShape = function (shape) {
var _shapes = [];
for (var i in _this.shapes) {
if (!(shape.x == _this.shapes[i].x
&& shape.y == _this.shapes[i].y
&& shape.w == _this.shapes[i].w
&& shape.h == _this.shapes[i].h)) {
_shapes.push(_this.shapes[i]);
}
}
_this.shapes = _shapes;
_this.selection = null;
console.log('On RemoveShape -> Selection : ');
console.log(_this.selection);
_this.valid = false;
};
this.clear = function () {
_this.ctx.clearRect(0, 0, _this.width, _this.height);
};
this.drawImage = function () {
var WIDTH = _this.imageObj.width + 2 * _this.border;
var HEIGHT = _this.imageObj.height + 2 * _this.border;
_this.canvas.width = WIDTH * _this.scale;
_this.canvas.height = HEIGHT * _this.scale;
_this.canvas.getContext('2d').scale(_this.scale, _this.scale);
_this.width = _this.canvas.width;
_this.height = _this.canvas.height;
};
this.draw = function () {
if (!_this.valid) {
var ctx = _this.ctx;
_this.drawImage();
var shapes = _this.shapes;
_this.clear();
if (_this.imageObj !== false && _this.imageObj != undefined) {
if (_this.border) {
ctx.stroke();
ctx.rect(0, 0, _this.width, _this.height);
ctx.strokeStyle = 'white';
ctx.lineWidth = _this.border;
}
ctx.drawImage(_this.imageObj, _this.border, _this.border);
}
var l = shapes.length;
var _oneShapeDraw = false;
for (var i = 0; i < l; i++) {
var shape = shapes[i];
if (shape == undefined || shape.hide || (typeof shape.draw != "function") || shape.x > _this.width || shape.y > _this.height ||
shape.x + shape.w < 0 || shape.y + shape.h < 0) {
continue;
}
shape.draw(ctx);
_oneShapeDraw = true;
}
if (_oneShapeDraw && _this.selection != null) {
ctx.strokeStyle = _this.selectionColor;
ctx.lineWidth = _this.selectionWidth;
var mySel = _this.selection;
ctx.strokeRect(mySel.x, mySel.y, mySel.w, mySel.h);
}
_this.valid = true;
}
};
this.getMouse = function (e) {
var element = _this.canvas, offsetX = 0, offsetY = 0, mx, my;
if (element.offsetParent !== undefined) {
do {
offsetX += element.offsetLeft;
offsetY += element.offsetTop;
} while ((element = element.offsetParent));
}
offsetX += _this.stylePaddingLeft + _this.styleBorderLeft + _this.htmlLeft;
offsetY += _this.stylePaddingTop + _this.styleBorderTop + _this.htmlTop;
var scrollY = 0;
if (_this.handleParentScroll === true) {
element = _this.canvas;
do {
scrollY = $(element).scrollTop();
} while (scrollY == 0 && (element = element.parentNode));
}
mx = e.pageX - offsetX;
my = e.pageY + scrollY - offsetY;
return { x: mx, y: my };
};
this.canvas = canvas;
this.width = canvas.width;
this.height = canvas.height;
this.ctx = canvas.getContext('2d');
var stylePaddingLeft, stylePaddingTop, styleBorderLeft, styleBorderTop;
if (document.defaultView && document.defaultView.getComputedStyle) {
this.stylePaddingLeft = parseInt(document.defaultView.getComputedStyle(canvas, null)['paddingLeft'], 10) || 0;
this.stylePaddingTop = parseInt(document.defaultView.getComputedStyle(canvas, null)['paddingTop'], 10) || 0;
this.styleBorderLeft = parseInt(document.defaultView.getComputedStyle(canvas, null)['borderLeftWidth'], 10) || 0;
this.styleBorderTop = parseInt(document.defaultView.getComputedStyle(canvas, null)['borderTopWidth'], 10) || 0;
}
this.border = 1;
var html = document.body.parentElement;
this.htmlTop = html.offsetTop;
this.htmlLeft = html.offsetLeft;
this.handleParentScroll = false;
this.valid = false;
this.shapes = [];
this.dragging = false;
this.drawing = false;
this.selection = null;
this.dragoffx = 0;
this.dragoffy = 0;
var myState = this;
myState.alert = false;
this.selectionColor = '#CC0000';
this.selectionWidth = 2;
this.interval = 10;
setInterval(function () { myState.draw(); }, myState.interval);
}
return CanvasState;
}());
exports.default = CanvasState;
//# sourceMappingURL=CanvasState.js.map
;