X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=roojs-bootstrap-debug.js;h=c991ffff1c9633450ef11360a03cc725eae2765e;hb=2542b67d1a0768025056f2f330bfe50b64d1ad38;hp=9f6b6bc085a35b69c9a294d786a5bb913d8e0650;hpb=b4d282d379feef34fa3ead578ceccb53d03a8b60;p=roojs1 diff --git a/roojs-bootstrap-debug.js b/roojs-bootstrap-debug.js index 9f6b6bc085..c991ffff1c 100644 --- a/roojs-bootstrap-debug.js +++ b/roojs-bootstrap-debug.js @@ -7903,7 +7903,8 @@ Roo.extend(Roo.form.Action.Submit, Roo.form.Action, { url:this.getUrl(!isPost), method: method, params:isPost ? this.getParams() : null, - isUpload: this.form.fileUpload + isUpload: this.form.fileUpload, + formData : this.form.formData })); this.uploadProgress(); @@ -41518,28 +41519,38 @@ Roo.extend(Roo.bootstrap.MoneyField, Roo.bootstrap.ComboBox, { Roo.bootstrap.BezierSignature = function(config){ Roo.bootstrap.BezierSignature.superclass.constructor.call(this, config); + this.addEvents({ + "resize" : true + }); }; Roo.extend(Roo.bootstrap.BezierSignature, Roo.bootstrap.Component, { - _data: [], + curve_data: [], + + is_empty: true, + + mouse_btn_down: true, - _mouseButtonDown: true, + /** + * @cfg(int) canvas height + */ + canvas_height: '200px', /** * @cfg(float or function) Radius of a single dot. */ - dotSize: false, + dot_size: false, /** * @cfg(float) Minimum width of a line. Defaults to 0.5. */ - minWidth: 0.5, + min_width: 0.5, /** * @cfg(float) Maximum width of a line. Defaults to 2.5. */ - maxWidth: 2.5, + max_width: 2.5, /** * @cfg(integer) Draw the next point at most once per every x milliseconds. Set it to 0 to turn off throttling. Defaults to 16. @@ -41549,22 +41560,22 @@ Roo.extend(Roo.bootstrap.BezierSignature, Roo.bootstrap.Component, { /** * @cfg(integer) Add the next point only if the previous one is farther than x pixels. Defaults to 5. */ - minDistance: 5, + min_distance: 5, /** * @cfg(string) Color used to clear the background. Can be any color format accepted by context.fillStyle. Defaults to "rgba(0,0,0,0)" (transparent black). Use a non-transparent color e.g. "rgb(255,255,255)" (opaque white) if you'd like to save signatures as JPEG images. */ - backgroundColor: 'rgba(0,0,0,0)', + bg_color: 'rgba(0, 0, 0, 0)', /** * @cfg(string) Color used to draw the lines. Can be any color format accepted by context.fillStyle. Defaults to "black". */ - penColor: 'black', + dot_color: 'black', /** * @cfg(float) Weight used to modify new velocity based on the previous velocity. Defaults to 0.7. */ - velocityFilterWeight: 0.7, + velocity_filter_weight: 0.7, /** * @cfg(function) Callback when stroke begin. @@ -41578,12 +41589,25 @@ Roo.extend(Roo.bootstrap.BezierSignature, Roo.bootstrap.Component, { getAutoCreate : function() { - var cls = 'roo-signature'; + var cls = 'roo-signature column'; if(this.cls){ cls += ' ' + this.cls; } + var col_sizes = [ + 'lg', + 'md', + 'sm', + 'xs' + ]; + + for(var i = 0; i < col_sizes.length; i++) { + if(this[col_sizes[i]]) { + cls += " col-"+col_sizes[i]+"-"+this[col_sizes[i]]; + } + } + var cfg = { tag: 'div', cls: cls, @@ -41594,9 +41618,16 @@ Roo.extend(Roo.bootstrap.BezierSignature, Roo.bootstrap.Component, { cn: [ { tag: 'canvas', - cls: 'roo-signature-body-canvas' + cls: 'roo-signature-body-canvas', + height: this.canvas_height, + width: this.canvas_width } ] + }, + { + tag: 'input', + type: 'file', + style: 'display: none' } ] }; @@ -41610,43 +41641,109 @@ Roo.extend(Roo.bootstrap.BezierSignature, Roo.bootstrap.Component, { var canvas = this.canvasEl(); + // mouse && touch event swapping... canvas.dom.style.touchAction = 'none'; canvas.dom.style.msTouchAction = 'none'; - this._mouseButtonDown = false; + this.mouse_btn_down = false; canvas.on('mousedown', this._handleMouseDown, this); canvas.on('mousemove', this._handleMouseMove, this); - // catching mouseup for whole doc... any better way to catch it Roo.select('html').first().on('mouseup', this._handleMouseUp, this); - if (window.ontouchstart) { + if (window.PointerEvent) { + canvas.on('pointerdown', this._handleMouseDown, this); + canvas.on('pointermove', this._handleMouseMove, this); + Roo.select('html').first().on('pointerup', this._handleMouseUp, this); + } + + if ('ontouchstart' in window) { canvas.on('touchstart', this._handleTouchStart, this); canvas.on('touchmove', this._handleTouchMove, this); canvas.on('touchend', this._handleTouchEnd, this); } - // this.canvas.on('click', this.onClick, this); + Roo.EventManager.onWindowResize(this.resize, this, true); + + // file input event + this.fileEl().on('change', this.uploadImage, this); + + this.clear(); + + this.resize(); + }, + + resize: function(){ + + var canvas = this.canvasEl().dom; + var ctx = this.canvasElCtx(); + var img_data = false; + + if(canvas.width > 0) { + var img_data = ctx.getImageData(0, 0, canvas.width, canvas.height); + } + // setting canvas width will clean img data + canvas.width = 0; + + var style = window.getComputedStyle ? + getComputedStyle(this.el.dom, null) : this.el.dom.currentStyle; + + var padding_left = parseInt(style.paddingLeft) || 0; + var padding_right = parseInt(style.paddingRight) || 0; + + canvas.width = this.el.dom.clientWidth - padding_left - padding_right; + + if(img_data) { + ctx.putImageData(img_data, 0, 0); + } }, _handleMouseDown: function(e) { if (e.browserEvent.which === 1) { - this._mouseButtonDown = true; + this.mouse_btn_down = true; this.strokeBegin(e); } }, _handleMouseMove: function (e) { - if (this._mouseButtonDown) { + if (this.mouse_btn_down) { this.strokeMoveUpdate(e); } }, _handleMouseUp: function (e) { - if (e.browserEvent.which === 1 && this._mouseButtonDown) { - this._mouseButtonDown = false; + if (e.browserEvent.which === 1 && this.mouse_btn_down) { + this.mouse_btn_down = false; + this.strokeEnd(e); + } + }, + + _handleTouchStart: function (e) { + + e.preventDefault(); + if (e.browserEvent.targetTouches.length === 1) { + // var touch = e.browserEvent.changedTouches[0]; + // this.strokeBegin(touch); + + this.strokeBegin(e); // assume e catching the correct xy... + } + }, + + _handleTouchMove: function (e) { + e.preventDefault(); + // var touch = event.targetTouches[0]; + // _this._strokeMoveUpdate(touch); + this.strokeMoveUpdate(e); + }, + + _handleTouchEnd: function (e) { + var wasCanvasTouched = e.target === this.canvasEl().dom; + if (wasCanvasTouched) { + e.preventDefault(); + // var touch = event.changedTouches[0]; + // _this._strokeEnd(touch); this.strokeEnd(e); } }, @@ -41654,8 +41751,8 @@ Roo.extend(Roo.bootstrap.BezierSignature, Roo.bootstrap.Component, { reset: function () { this._lastPoints = []; this._lastVelocity = 0; - this._lastWidth = (this.minWidth + this.maxWidth) / 2; - this.canvasElCtx().fillStyle = this.penColor; + this._lastWidth = (this.min_width + this.max_width) / 2; + this.canvasElCtx().fillStyle = this.dot_color; }, strokeMoveUpdate: function(e) @@ -41673,7 +41770,7 @@ Roo.extend(Roo.bootstrap.BezierSignature, Roo.bootstrap.Component, { strokeBegin: function(e) { var newPointGroup = { - color: this.penColor, + color: this.dot_color, points: [] }; @@ -41681,7 +41778,7 @@ Roo.extend(Roo.bootstrap.BezierSignature, Roo.bootstrap.Component, { this.onBegin(e); } - this._data.push(newPointGroup); + this.curve_data.push(newPointGroup); this.reset(); this.strokeUpdate(e); }, @@ -41689,12 +41786,12 @@ Roo.extend(Roo.bootstrap.BezierSignature, Roo.bootstrap.Component, { strokeUpdate: function(e) { var rect = this.canvasEl().dom.getBoundingClientRect(); - var point = new this.Point(e.browserEvent.clientX - rect.left, e.browserEvent.clientY - rect.top, new Date().getTime()); - var lastPointGroup = this._data[this._data.length - 1]; + var point = new this.Point(e.xy[0] - rect.left, e.xy[1] - rect.top, new Date().getTime()); + var lastPointGroup = this.curve_data[this.curve_data.length - 1]; var lastPoints = lastPointGroup.points; var lastPoint = lastPoints.length > 0 && lastPoints[lastPoints.length - 1]; var isLastPointTooClose = lastPoint - ? point.distanceTo(lastPoint) <= this.minDistance + ? point.distanceTo(lastPoint) <= this.min_distance : false; var color = lastPointGroup.color; if (!lastPoint || !(lastPoint && isLastPointTooClose)) { @@ -41737,10 +41834,10 @@ Roo.extend(Roo.bootstrap.BezierSignature, Roo.bootstrap.Component, { }, calculateCurveWidths: function (startPoint, endPoint) { - var velocity = this.velocityFilterWeight * endPoint.velocityFrom(startPoint) + - (1 - this.velocityFilterWeight) * this._lastVelocity; + var velocity = this.velocity_filter_weight * endPoint.velocityFrom(startPoint) + + (1 - this.velocity_filter_weight) * this._lastVelocity; - var newWidth = Math.max(this.maxWidth / (velocity + 1), this.minWidth); + var newWidth = Math.max(this.max_width / (velocity + 1), this.min_width); var widths = { end: newWidth, start: this._lastWidth @@ -41754,7 +41851,7 @@ Roo.extend(Roo.bootstrap.BezierSignature, Roo.bootstrap.Component, { drawDot: function (_a) { var color = _a.color, point = _a.point; var ctx = this.canvasElCtx(); - var width = typeof this.dotSize === 'function' ? this.dotSize() : this.dotSize; + var width = typeof this.dot_size === 'function' ? this.dot_size() : this.dot_size; ctx.beginPath(); this.drawCurveSegment(point.x, point.y, width); ctx.closePath(); @@ -41795,12 +41892,24 @@ Roo.extend(Roo.bootstrap.BezierSignature, Roo.bootstrap.Component, { var ctx = this.canvasElCtx(); ctx.moveTo(x, y); ctx.arc(x, y, width, 0, 2 * Math.PI, false); - this._isEmpty = false; + this.is_empty = false; }, - isValid: function() + clear: function() { - // form cannot detect... + var ctx = this.canvasElCtx(); + var canvas = this.canvasEl().dom; + ctx.fillStyle = this.bg_color; + ctx.clearRect(0, 0, canvas.width, canvas.height); + ctx.fillRect(0, 0, canvas.width, canvas.height); + this.curve_data = []; + this.reset(); + this.is_empty = true; + }, + + fileEl: function() + { + return this.el.select('input',true).first(); }, canvasEl: function() @@ -41813,6 +41922,50 @@ Roo.extend(Roo.bootstrap.BezierSignature, Roo.bootstrap.Component, { return this.el.select('canvas',true).first().dom.getContext('2d'); }, + getImage: function(type) + { + if(this.is_empty) { + return false; + } + + // encryption ? + return this.canvasEl().dom.toDataURL('image/'+type, 1); + }, + + drawFromImage: function(img_src) + { + var img = new Image(); + + img.onload = function(){ + this.canvasElCtx().drawImage(img, 0, 0); + }.bind(this); + + img.src = img_src; + + this.is_empty = false; + }, + + selectImage: function() + { + this.fileEl().dom.click(); + }, + + uploadImage: function(e) + { + var reader = new FileReader(); + + reader.onload = function(e){ + var img = new Image(); + img.onload = function(){ + this.reset(); + this.canvasElCtx().drawImage(img, 0, 0); + }.bind(this); + img.src = e.target.result; + }.bind(this); + + reader.readAsDataURL(e.target.files[0]); + }, + // Bezier Point Constructor Point: (function () { function Point(x, y, time) {