Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- "use strict";
- var Paint, paint,
- __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
- Paint = (function() {
- function Paint(canvas) {
- this.ev_canvas = __bind(this.ev_canvas, this);
- this.canvas = $('#' + canvas);
- this.context = this.canvas[0].getContext('2d');
- this.context.lineJoin = 'round';
- this.context.lineCap = 'round';
- this.offset = {
- x: 0,
- y: 0
- };
- this.mouse = {
- x: 0,
- y: 0
- };
- this.tool = 'pencil';
- $('#size').bind('mousemove change', (function(_this) {
- return function() {
- return $('#sizepx').text($('#size').val());
- };
- })(this));
- $('button').click((function(_this) {
- return function(e) {
- _this.tool = e.target.id;
- $('.active').removeClass('active');
- $('#' + _this.tool).addClass('active');
- return _this.initCanvas();
- };
- })(this));
- this.initCanvas();
- }
- Paint.prototype.initCanvas = function() {
- this.canvas.unbind("mousemove").unbind("mouseup").unbind("mousedown");
- this.ev_canvas();
- return this.canvas.bind('mousedown mousemove mouseup', this.ev_canvas);
- };
- Paint.prototype.ev_canvas = function() {
- this.context.strokeStyle = $('#color').val();
- this.context.lineWidth = $('#size').val();
- this.offset.x = this.canvas[0].offsetLeft;
- this.offset.y = this.canvas[0].offsetTop;
- switch (this.tool) {
- case "line":
- return this.line();
- case "care":
- return this.care();
- case "circle":
- return this.circle();
- default:
- return this.pencil();
- }
- };
- Paint.prototype.pencil = function() {
- this.canvas.mousedown((function(_this) {
- return function(e) {
- _this.isDrawing = true;
- _this.context.moveTo(e.clientX - _this.offset.x, e.clientY - _this.offset.y);
- _this.context.beginPath();
- };
- })(this));
- this.canvas.mousemove((function(_this) {
- return function(e) {
- if (_this.isDrawing) {
- _this.context.lineTo(e.clientX - _this.offset.x, e.clientY - _this.offset.y);
- _this.context.stroke();
- }
- };
- })(this));
- return this.canvas.mouseup((function(_this) {
- return function() {
- _this.isDrawing = false;
- _this.initCanvas();
- };
- })(this));
- };
- Paint.prototype.line = function() {
- this.canvas.mousedown((function(_this) {
- return function(e) {
- _this.isDrawing = true;
- _this.mouse.x = e.clientX - _this.offset.x;
- _this.mouse.y = e.clientY - _this.offset.y;
- _this.tmp = _this.context.getImageData(0, 0, _this.canvas[0].width, _this.canvas[0].height);
- };
- })(this));
- this.canvas.mousemove((function(_this) {
- return function(e) {
- if (_this.isDrawing) {
- _this.context.clearRect(0, 0, _this.canvas[0].width, _this.canvas[0].height);
- _this.context.beginPath();
- _this.context.putImageData(_this.tmp, 0, 0);
- _this.context.moveTo(_this.mouse.x, _this.mouse.y);
- _this.context.lineTo(e.clientX - _this.offset.x, e.clientY - _this.offset.y);
- _this.context.closePath();
- _this.context.stroke();
- }
- };
- })(this));
- return this.canvas.mouseup((function(_this) {
- return function(e) {
- if (_this.isDrawing) {
- _this.isDrawing = false;
- _this.initCanvas();
- }
- };
- })(this));
- };
- Paint.prototype.care = function() {
- this.canvas.mousedown((function(_this) {
- return function(e) {
- _this.isDrawing = true;
- _this.mouse.x = e.clientX - _this.offset.x;
- _this.mouse.y = e.clientY - _this.offset.y;
- _this.tmp = _this.context.getImageData(0, 0, _this.canvas[0].width, _this.canvas[0].height);
- };
- })(this));
- this.canvas.mousemove((function(_this) {
- return function(e) {
- var x, y;
- if (_this.isDrawing) {
- x = e.clientX - _this.offset.x;
- y = e.clientY - _this.offset.y;
- _this.context.clearRect(0, 0, _this.canvas[0].width, _this.canvas[0].height);
- _this.context.putImageData(_this.tmp, 0, 0);
- _this.context.beginPath();
- _this.context.moveTo(_this.mouse.x, _this.mouse.y + (y - _this.mouse.y) / 2);
- _this.context.bezierCurveTo(_this.mouse.x, _this.mouse.y, x, _this.mouse.y, x, _this.mouse.y + (y - _this.mouse.y) / 2);
- _this.context.bezierCurveTo(x, y, _this.mouse.x, y, _this.mouse.x, _this.mouse.y + (y - _this.mouse.y) / 2);
- _this.context.closePath();
- _this.context.stroke();
- }
- };
- })(this));
- return this.canvas.mouseup((function(_this) {
- return function(e) {
- if (_this.isDrawing) {
- _this.isDrawing = false;
- _this.initCanvas();
- }
- };
- })(this));
- };
- Paint.prototype.circle = function() {
- this.canvas.mousedown((function(_this) {
- return function(e) {
- _this.isDrawing = true;
- _this.mouse.x = e.clientX - _this.offset.x;
- _this.mouse.y = e.clientY - _this.offset.y;
- _this.tmp = _this.context.getImageData(0, 0, _this.canvas[0].width, _this.canvas[0].height);
- };
- })(this));
- this.canvas.mousemove((function(_this) {
- return function(e) {
- var x, y;
- if (_this.isDrawing) {
- x = e.clientX - _this.offset.x;
- y = e.clientY - _this.offset.y;
- _this.context.clearRect(0, 0, _this.canvas[0].width, _this.canvas[0].height);
- _this.context.putImageData(_this.tmp, 0, 0);
- _this.context.beginPath();
- _this.context.moveTo(_this.mouse.x, _this.mouse.y + (y - _this.mouse.y) / 2);
- _this.context.bezierCurveTo(_this.mouse.x, _this.mouse.y, x, _this.mouse.y, x, _this.mouse.y + (y - _this.mouse.y) / 2);
- _this.context.bezierCurveTo(x, y, _this.mouse.x, y, _this.mouse.x, _this.mouse.y + (y - _this.mouse.y) / 2);
- _this.context.closePath();
- _this.context.stroke();
- }
- };
- })(this));
- return this.canvas.mouseup((function(_this) {
- return function(e) {
- if (_this.isDrawing) {
- _this.isDrawing = false;
- _this.initCanvas();
- }
- };
- })(this));
- };
- return Paint;
- })();
- paint = new Paint('canvas');
- //# sourceMappingURL=data:application/json;base64,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TSxDQUFDLE9BQVIsQ0FBZ0IsQ0FBQSxTQUFBLEtBQUEsR0FBQTthQUFBLFNBQUMsQ0FBRCxHQUFBO0FBQ1osUUFBQSxJQUFHLEtBQUMsQ0FBQSxTQUFKO0FBQ0ksVUFBQSxLQUFDLENBQUEsU0FBRCxHQUFhLEtBQWIsQ0FBQTtBQUFBLFVBQ0EsS0FBQyxDQUFBLFVBQUQsQ0FBQSxDQURBLENBREo7U0FEWTtNQUFBLEVBQUE7SUFBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQWhCLEVBdEJJO0VBQUEsQ0FoSFIsQ0FBQTs7ZUFBQTs7SUFISixDQUFBOztBQUFBLEtBK0lBLEdBQVksSUFBQSxLQUFBLENBQU0sUUFBTixDQS9JWixDQUFBIiwiZmlsZSI6InBhaW50LmpzIiwic291cmNlUm9vdCI6Ii9zb3VyY2UvIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCJcblxuY2xhc3MgUGFpbnRcbiAgICBjb25zdHJ1Y3RvcjogKGNhbnZhcykgLT5cbiAgICAgICAgQGNhbnZhcyA9ICQoJyMnKyBjYW52YXMpO1xuXG4gICAgICAgIEBjb250ZXh0ID0gQGNhbnZhc1swXS5nZXRDb250ZXh0KCcyZCcpXG4gICAgICAgIEBjb250ZXh0LmxpbmVKb2luID0gJ3JvdW5kJ1xuICAgICAgICBAY29udGV4dC5saW5lQ2FwID0gJ3JvdW5kJ1xuXG4gICAgICAgIEBvZmZzZXQgPSB7eDogMCwgeTogMH1cbiAgICAgICAgQG1vdXNlID0ge3g6IDAsIHk6IDB9XG4gICAgICAgIEB0b29sID0gJ3BlbmNpbCdcblxuICAgICAgICAkKCcjc2l6ZScpLmJpbmQgJ21vdXNlbW92ZSBjaGFuZ2UnLCA9PlxuICAgICAgICAgICAgJCgnI3NpemVweCcpLnRleHQoJCgnI3NpemUnKS52YWwoKSlcblxuICAgICAgICAkKCdidXR0b24nKS5jbGljayAoZSkgPT5cbiAgICAgICAgICAgIEB0b29sID0gZS50YXJnZXQuaWRcbiAgICAgICAgICAgICQoJy5hY3RpdmUnKS5yZW1vdmVDbGFzcygnYWN0aXZlJylcbiAgICAgICAgICAgICQoJyMnK0B0b29sKS5hZGRDbGFzcygnYWN0aXZlJylcbiAgICAgICAgICAgIEBpbml0Q2FudmFzKClcbiAgICAgICAgQGluaXRDYW52YXMoKVxuXG4gICAgaW5pdENhbnZhczogLT5cbiAgICAgICAgQGNhbnZhcy51bmJpbmQoXCJtb3VzZW1vdmVcIikudW5iaW5kKFwibW91c2V1cFwiKS51bmJpbmQgXCJtb3VzZWRvd25cIlxuICAgICAgICBAZXZfY2FudmFzKClcbiAgICAgICAgQGNhbnZhcy5iaW5kICdtb3VzZWRvd24gbW91c2Vtb3ZlIG1vdXNldXAnLCBAZXZfY2FudmFzXG5cbiAgICBldl9jYW52YXM6ID0+XG4gICAgICAgIEBjb250ZXh0LnN0cm9rZVN0eWxlID0gJCgnI2NvbG9yJykudmFsKClcbiAgICAgICAgQGNvbnRleHQubGluZVdpZHRoID0gJCgnI3NpemUnKS52YWwoKVxuICAgICAgICBAb2Zmc2V0LnggPSBAY2FudmFzWzBdLm9mZnNldExlZnRcbiAgICAgICAgQG9mZnNldC55ID0gQGNhbnZhc1swXS5vZmZzZXRUb3BcbiAgICAgICAgc3dpdGNoIEB0b29sXG4gICAgICAgICAgICB3aGVuIFwibGluZVwiXG4gICAgICAgICAgICAgICAgQGxpbmUoKVxuICAgICAgICAgICAgd2hlbiBcImNhcmVcIlxuICAgICAgICAgICAgICAgIEBjYXJlKClcbiAgICAgICAgICAgIHdoZW4gXCJjaXJjbGVcIlxuICAgICAgICAgICAgICAgIEBjaXJjbGUoKVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIEBwZW5jaWwoKVxuXG4gICAgcGVuY2lsOiAtPlxuICAgICAgICBAY2FudmFzLm1vdXNlZG93biAoZSkgPT5cbiAgICAgICAgICAgIEBpc0RyYXdpbmcgPSB0cnVlXG4gICAgICAgICAgICBAY29udGV4dC5tb3ZlVG8gZS5jbGllbnRYIC0gQG9mZnNldC54LCBlLmNsaWVudFkgLSBAb2Zmc2V0LnlcbiAgICAgICAgICAgIEBjb250ZXh0LmJlZ2luUGF0aCgpXG4gICAgICAgICAgICByZXR1cm5cblxuICAgICAgICBAY2FudmFzLm1vdXNlbW92ZSAoZSkgPT5cbiAgICAgICAgICAgIGlmIEBpc0RyYXdpbmdcbiAgICAgICAgICAgICAgICBAY29udGV4dC5saW5lVG8gZS5jbGllbnRYIC0gQG9mZnNldC54LCBlLmNsaWVudFkgLSBAb2Zmc2V0LnlcbiAgICAgICAgICAgICAgICBAY29udGV4dC5zdHJva2UoKVxuICAgICAgICAgICAgcmV0dXJuXG5cbiAgICAgICAgQGNhbnZhcy5tb3VzZXVwICgpID0+XG4gICAgICAgICAgICBAaXNEcmF3aW5nID0gZmFsc2VcbiAgICAgICAgICAgIEBpbml0Q2FudmFzKClcbiAgICAgICAgICAgIHJldHVyblxuXG4gICAgbGluZTogLT5cbiAgICAgICAgQGNhbnZhcy5tb3VzZWRvd24gKGUpID0+XG4gICAgICAgICAgICBAaXNEcmF3aW5nID0gdHJ1ZVxuICAgICAgICAgICAgQG1vdXNlLnggPSBlLmNsaWVudFggLSBAb2Zmc2V0LnhcbiAgICAgICAgICAgIEBtb3VzZS55ID0gZS5jbGllbnRZIC0gQG9mZnNldC55XG4gICAgICAgICAgICBAdG1wID0gQGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIEBjYW52YXNbMF0ud2lkdGgsIEBjYW52YXNbMF0uaGVpZ2h0KVxuICAgICAgICAgICAgcmV0dXJuXG5cbiAgICAgICAgQGNhbnZhcy5tb3VzZW1vdmUgKGUpID0+XG4gICAgICAgICAgICBpZiBAaXNEcmF3aW5nXG4gICAgICAgICAgICAgICAgQGNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIEBjYW52YXNbMF0ud2lkdGgsIEBjYW52YXNbMF0uaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICBAY29udGV4dC5iZWdpblBhdGgoKVxuICAgICAgICAgICAgICAgIEBjb250ZXh0LnB1dEltYWdlRGF0YShAdG1wLDAsMCk7XG4gICAgICAgICAgICAgICAgQGNvbnRleHQubW92ZVRvKEBtb3VzZS54LCBAbW91c2UueSlcbiAgICAgICAgICAgICAgICBAY29udGV4dC5saW5lVG8oZS5jbGllbnRYIC0gQG9mZnNldC54LCBlLmNsaWVudFkgLSBAb2Zmc2V0LnkpXG4gICAgICAgICAgICAgICAgQGNvbnRleHQuY2xvc2VQYXRoKClcbiAgICAgICAgICAgICAgICBAY29udGV4dC5zdHJva2UoKVxuICAgICAgICAgICAgcmV0dXJuXG5cbiAgICAgICAgQGNhbnZhcy5tb3VzZXVwIChlKSA9PlxuICAgICAgICAgICAgaWYgQGlzRHJhd2luZ1xuICAgICAgICAgICAgICAgIEBpc0RyYXdpbmcgPSBmYWxzZVxuICAgICAgICAgICAgICAgIEBpbml0Q2FudmFzKClcbiAgICAgICAgICAgIHJldHVyblxuXG4gICAgY2FyZTogLT5cbiAgICAgICAgQGNhbnZhcy5tb3VzZWRvd24gKGUpID0+XG4gICAgICAgICAgICBAaXNEcmF3aW5nID0gdHJ1ZVxuICAgICAgICAgICAgQG1vdXNlLnggPSBlLmNsaWVudFggLSBAb2Zmc2V0LnhcbiAgICAgICAgICAgIEBtb3VzZS55ID0gZS5jbGllbnRZIC0gQG9mZnNldC55XG4gICAgICAgICAgICBAdG1wID0gQGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIEBjYW52YXNbMF0ud2lkdGgsIEBjYW52YXNbMF0uaGVpZ2h0KVxuICAgICAgICAgICAgcmV0dXJuXG5cbiAgICAgICAgQGNhbnZhcy5tb3VzZW1vdmUgKGUpID0+XG4gICAgICAgICAgICBpZiBAaXNEcmF3aW5nXG4gICAgICAgICAgICAgICAgeCA9IGUuY2xpZW50WCAtIEBvZmZzZXQueFxuICAgICAgICAgICAgICAgIHkgPSBlLmNsaWVudFkgLSBAb2Zmc2V0LnlcbiAgICAgICAgICAgICAgICBAY29udGV4dC5jbGVhclJlY3QoMCwgMCwgQGNhbnZhc1swXS53aWR0aCwgQGNhbnZhc1swXS5oZWlnaHQpO1xuICAgICAgICAgICAgICAgIEBjb250ZXh0LnB1dEltYWdlRGF0YShAdG1wLDAsMCk7XG4gICAgICAgICAgICAgICAgQGNvbnRleHQuYmVnaW5QYXRoKClcbiAgICAgICAgICAgICAgICBAY29udGV4dC5tb3ZlVG8oQG1vdXNlLngsIEBtb3VzZS55ICsgKHkgLSBAbW91c2UueSkgLyAyKVxuICAgICAgICAgICAgICAgIEBjb250ZXh0LmJlemllckN1cnZlVG8oQG1vdXNlLngsIEBtb3VzZS55LCB4LCBAbW91c2UueSwgeCwgQG1vdXNlLnkgKyAoeSAtIEBtb3VzZS55KSAvIDIpXG4gICAgICAgICAgICAgICAgQGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4LCB5LCBAbW91c2UueCwgeSwgQG1vdXNlLngsIEBtb3VzZS55ICsgKHkgLSBAbW91c2UueSkgLyAyKVxuICAgICAgICAgICAgICAgIEBjb250ZXh0LmNsb3NlUGF0aCgpXG4gICAgICAgICAgICAgICAgQGNvbnRleHQuc3Ryb2tlKClcbiAgICAgICAgICAgIHJldHVyblxuXG4gICAgICAgIEBjYW52YXMubW91c2V1cCAoZSkgPT5cbiAgICAgICAgICAgIGlmIEBpc0RyYXdpbmdcbiAgICAgICAgICAgICAgICBAaXNEcmF3aW5nID0gZmFsc2VcbiAgICAgICAgICAgICAgICBAaW5pdENhbnZhcygpXG4gICAgICAgICAgICByZXR1cm5cblxuICAgIGNpcmNsZTogLT5cbiAgICAgICAgQGNhbnZhcy5tb3VzZWRvd24gKGUpID0+XG4gICAgICAgICAgICBAaXNEcmF3aW5nID0gdHJ1ZVxuICAgICAgICAgICAgQG1vdXNlLnggPSBlLmNsaWVudFggLSBAb2Zmc2V0LnhcbiAgICAgICAgICAgIEBtb3VzZS55ID0gZS5jbGllbnRZIC0gQG9mZnNldC55XG4gICAgICAgICAgICBAdG1wID0gQGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIEBjYW52YXNbMF0ud2lkdGgsIEBjYW52YXNbMF0uaGVpZ2h0KVxuICAgICAgICAgICAgcmV0dXJuXG5cbiAgICAgICAgQGNhbnZhcy5tb3VzZW1vdmUgKGUpID0+XG4gICAgICAgICAgICBpZiBAaXNEcmF3aW5nXG4gICAgICAgICAgICAgICAgeCA9IGUuY2xpZW50WCAtIEBvZmZzZXQueFxuICAgICAgICAgICAgICAgIHkgPSBlLmNsaWVudFkgLSBAb2Zmc2V0LnlcbiAgICAgICAgICAgICAgICBAY29udGV4dC5jbGVhclJlY3QoMCwgMCwgQGNhbnZhc1swXS53aWR0aCwgQGNhbnZhc1swXS5oZWlnaHQpO1xuICAgICAgICAgICAgICAgIEBjb250ZXh0LnB1dEltYWdlRGF0YShAdG1wLDAsMCk7XG4gICAgICAgICAgICAgICAgQGNvbnRleHQuYmVnaW5QYXRoKClcbiAgICAgICAgICAgICAgICBAY29udGV4dC5tb3ZlVG8oQG1vdXNlLngsIEBtb3VzZS55ICsgKHkgLSBAbW91c2UueSkgLyAyKVxuICAgICAgICAgICAgICAgIEBjb250ZXh0LmJlemllckN1cnZlVG8oQG1vdXNlLngsIEBtb3VzZS55LCB4LCBAbW91c2UueSwgeCwgQG1vdXNlLnkgKyAoeSAtIEBtb3VzZS55KSAvIDIpXG4gICAgICAgICAgICAgICAgQGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4LCB5LCBAbW91c2UueCwgeSwgQG1vdXNlLngsIEBtb3VzZS55ICsgKHkgLSBAbW91c2UueSkgLyAyKVxuICAgICAgICAgICAgICAgIEBjb250ZXh0LmNsb3NlUGF0aCgpXG4gICAgICAgICAgICAgICAgQGNvbnRleHQuc3Ryb2tlKClcbiAgICAgICAgICAgIHJldHVyblxuXG4gICAgICAgIEBjYW52YXMubW91c2V1cCAoZSkgPT5cbiAgICAgICAgICAgIGlmIEBpc0RyYXdpbmdcbiAgICAgICAgICAgICAgICBAaXNEcmF3aW5nID0gZmFsc2VcbiAgICAgICAgICAgICAgICBAaW5pdENhbnZhcygpXG4gICAgICAgICAgICByZXR1cm5cblxucGFpbnQgPSBuZXcgUGFpbnQoJ2NhbnZhcycpXG4iXX0=
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement