Files
konva/dist/kinetic-core.min.js

29 lines
51 KiB
JavaScript
Raw Normal View History

/**
* KineticJS JavaScript Library core
* http://www.kineticjs.com/
* Copyright 2012, Eric Rowell
* Licensed under the MIT or GPL Version 2 licenses.
* Date: Jul 07 2012
*
* Copyright (C) 2011 - 2012 by Eric Rowell
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/;Kinetic.Class=function(){},Kinetic.Class.extend=function(c){function g(){!a&&this.init&&this.init.apply(this,arguments)}var d=this.prototype;a=!0;var e=new this;a=!1;for(var f in c)e[f]=typeof c[f]=="function"&&typeof d[f]=="function"&&b.test(c[f])?function(a,b){return function(){var c=this._super;this._super=d[a];var e=b.apply(this,arguments);return this._super=c,e}}(f,c[f]):c[f];return g.prototype=e,g.prototype.constructor=g,g.extend=arguments.callee,g}}(),Kinetic.Animation={animations:[],animIdCounter:0,animRunning:!1,frame:{time:0,timeDiff:0,lastTime:0},_addAnimation:function(a){a.id=this.animIdCounter++,this.animations.push(a)},_removeAnimation:function(a){var b=a.id,c=this.animations;for(var d=0;d<c.length;d++)if(c[d].id===b)return this.animations.splice(d,1),!1},_runFrames:function(){var a={};for(var b=0;b<this.animations.length;b++){var c=this.animations[b];c.node&&c.node._id!==undefined&&(a[c.node._id]=c.node),c.func&&c.func(this.frame)}for(var d in a)a[d].draw()},_updateFrameObject:function(){var a=new Date,b=a.getTime();this.frame.lastTime===0?this.frame.lastTime=b:(this.frame.timeDiff=b-this.frame.lastTime,this.frame.lastTime=b,this.frame.time+=this.frame.timeDiff)},_animationLoop:function(){if(this.animations.length>0){this._updateFrameObject(),this._runFrames();var a=this;requestAnimFrame(function(){a._animationLoop()})}else this.animRunning=!1,this.frame.lastTime=0},_handleAnimation:function(){var a=this;this.animRunning?this.frame.lastTime=0:(this.animRunning=!0,a._animationLoop())}},requestAnimFrame=function(a){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){window.setTimeout(a,1e3/60)}}(),Kinetic.Node=Kinetic.Class.extend({init:function(a){this.defaultNodeAttrs={visible:!0,listening:!0,name:undefined,alpha:1,x:0,y:0,scale:{x:1,y:1},rotation:0,offset:{x:0,y:0},dragConstraint:"none",dragBounds:{},draggable:!1},this.setDefaultAttrs(this.defaultNodeAttrs),this.eventListeners={},this.setAttrs(a),this.on("draggableChange.kinetic",function(){if(this.attrs.draggable)this._listenDrag();else{this._dragCleanup();var a=this.getStage(),b=Kinetic.Global;a&&b.drag.node&&b.drag.node._id===this._id&&a._endDrag()}}),this.simulate("draggableChange")},on:function(a,b){var c=a.split(" ");for(var d=0;d<c.length;d++){var e=c[d],f=e,g=f.split("."),h=g[0],i=g.length>1?g[1]:"";this.eventListeners[h]||(this.eventListeners[h]=[]),this.eventListeners[h].push({name:i,handler:b})}},off:function(a){var b=a.split(" ");for(var c=0;c<b.length;c++){var d=b[c],e=d,f=e.split("."),g=f[0];if(this.eventListeners[g]&&f.length>1){var h=f[1];for(var i=0;i<this.eventListeners[g].length;i++)if(this.eventListeners[g][i].name===h){this.eventListeners[g].splice(i,1);if(this.eventListeners[g].length===0){delete this.eventListeners[g];break}i--}}else delete this.eventListeners[g]}},getAttrs:function(){return this.attrs},setDefaultAttrs:function(a){this.attrs===undefined&&(this.attrs={});if(a)for(var b in a)this.attrs[b]===undefined&&(this.attrs[b]=a[b])},setAttrs:function(a){var b=Kinetic.Type,c=this;if(a!==undefined){function d(a,e,f){for(var g in e){var h=e[g];a[g]===undefined&&h!==undefined&&(a[g]={});if(b._isObject(h)&&!b._isArray(h)&&!b._isElement(h)&&!b._hasMethods(h))Kinetic.Type._isObject(a[g])||(a[g]={}),d(a[g],h,f+1);else switch(g){case"rotationDeg":c._setAttr(a,"rotation",e[g]*Math.PI/180),g="rotation";break;case"offset":var i=b._getXY(h);c._setAttr(a[g],"x",i.x),c._setAttr(a[g],"y",i.y);break;case"scale":var i=b._getXY(h);c._setAttr(a[g],"x",i.x),c._setAttr(a[g],"y",i.y);break;case"points":c._setAttr(a,g,b._getPoints(h));break;case"crop":var i=b._getXY(h),j=b._getSize(h);c._setAttr(a[g],"x",i.x),c._setAttr(a[g],"y",i.y),c._setAttr(a[g],"width",j.width),c._setAttr(a[g],"height",j.height);break;default:c._setAttr(a,g,h)}f===0&&c._fireChangeEvent(g)}}d(this.attrs,a,0)}},isVisible:function(){return this.attrs.visible&&this.getParent()&&!this.getParent().isVisible()?!1:this.attrs.visible},show:function(){this.s
.y);var i=h.getMatrix();c.transform(i[0],i[1],i[2],i[3],i[4],i[5])}this.tempLayer=a;var j=this.getAbsoluteAlpha();j!==1&&(c.globalAlpha=j),this.applyLineJoin(),this.appliedShadow=!1,this.attrs.drawFunc.call(this),c.restore()}}}),Kinetic.Node.addGettersSetters(Kinetic.Shape,["fill","stroke","lineJoin","strokeWidth","shadow","drawFunc"]),Kinetic.Rect=Kinetic.Shape.extend({init:function(a){this.setDefaultAttrs({width:0,height:0,cornerRadius:0}),this.shapeType="Rect",a.drawFunc=function(){var a=this.getContext();a.beginPath(),this.attrs.cornerRadius===0?a.rect(0,0,this.attrs.width,this.attrs.height):(a.moveTo(this.attrs.cornerRadius,0),a.lineTo(this.attrs.width-this.attrs.cornerRadius,0),a.arc(this.attrs.width-this.attrs.cornerRadius,this.attrs.cornerRadius,this.attrs.cornerRadius,Math.PI*3/2,0,!1),a.lineTo(this.attrs.width,this.attrs.height-this.attrs.cornerRadius),a.arc(this.attrs.width-this.attrs.cornerRadius,this.attrs.height-this.attrs.cornerRadius,this.attrs.cornerRadius,0,Math.PI/2,!1),a.lineTo(this.attrs.cornerRadius,this.attrs.height),a.arc(this.attrs.cornerRadius,this.attrs.height-this.attrs.cornerRadius,this.attrs.cornerRadius,Math.PI/2,Math.PI,!1),a.lineTo(0,this.attrs.cornerRadius),a.arc(this.attrs.cornerRadius,this.attrs.cornerRadius,this.attrs.cornerRadius,Math.PI,Math.PI*3/2,!1)),a.closePath(),this.fill(),this.stroke()},this._super(a)},setSize:function(){var a=Kinetic.Type._getSize(Array.prototype.slice.call(arguments));this.setAttrs(a)},getSize:function(){return{width:this.attrs.width,height:this.attrs.height}}}),Kinetic.Node.addGettersSetters(Kinetic.Rect,["width","height","cornerRadius"]),Kinetic.Ellipse=Kinetic.Shape.extend({init:function(a){this.setDefaultAttrs({radius:{x:0,y:0}}),this.shapeType="Ellipse",a.drawFunc=function(){var a=this.getCanvas(),b=this.getContext(),c=this.getRadius();b.beginPath(),b.save(),c.x!==c.y&&b.scale(1,c.y/c.x),b.arc(0,0,c.x,0,Math.PI*2,!0),b.restore(),b.closePath(),this.fill(),this.stroke()},this._super(a),this._convertRadius();var b=this;this.on("radiusChange.kinetic",function(){b._convertRadius()})},_convertRadius:function(){var a=Kinetic.Type,b=this.getRadius();if(a._isObject(b))return!1;this.attrs.radius=a._getXY(b)}}),Kinetic.Circle=Kinetic.Ellipse,Kinetic.Node.addGettersSetters(Kinetic.Ellipse,["radius"]),Kinetic.Image=Kinetic.Shape.extend({init:function(a){this.shapeType="Image",a.drawFunc=function(){if(!!this.attrs.image){var a=this.attrs.width?this.attrs.width:this.attrs.image.width,b=this.attrs.height?this.attrs.height:this.attrs.image.height,c=this.getCanvas(),d=this.getContext();d.beginPath(),d.rect(0,0,a,b),d.closePath(),this.fill(),this.stroke();if(this.attrs.crop&&this.attrs.crop.width&&this.attrs.crop.height){var e=this.attrs.crop.x?this.attrs.crop.x:0,f=this.attrs.crop.y?this.attrs.crop.y:0,g=this.attrs.crop.width,h=this.attrs.crop.height;this.drawImage(this.attrs.image,e,f,g,h,0,0,a,b)}else this.drawImage(this.attrs.image,0,0,a,b)}},this._super(a)},setSize:function(){var a=Kinetic.GlobalObject._getSize(Array.prototype.slice.call(arguments));this.setAttrs(a)},getSize:function(){return{width:this.attrs.width,height:this.attrs.height}}}),Kinetic.Node.addGettersSetters(Kinetic.Image,["height","width","image","crop"]),Kinetic.Sprite=Kinetic.Shape.extend({init:function(a){this.setDefaultAttrs({index:0,frameRate:17}),a.drawFunc=function(){if(!!this.attrs.image){var a=this.getContext(),b=this.attrs.animation,c=this.attrs.index,d=this.attrs.animations[b][c];a.beginPath(),a.rect(0,0,d.width,d.height),a.closePath(),this.drawImage(this.attrs.image,d.x,d.y,d.width,d.height,0,0,d.width,d.height)}},this._super(a);var b=this;this.on("animationChange.kinetic",function(){b.setIndex(0)})},start:function(){var a=this,b=this.getLayer(),c=Kinetic.Animation;this.anim&&(c._removeAnimation(this.anim),this.anim=null),this.anim={node:b},c._addAnimation(this.anim),this.interval=setInterval(function(){a._updateIndex(),a.afterFrameFunc&&a.attrs.index===a.afterFrameIndex&&a.afterFrameFunc()},1e3/this.attrs.frameRate),c._handleAnimation()},stop:function(){var a=Kinetic.Animation;this.ani