diff --git a/src/Factory.js b/src/Factory.js index 99a7568e..e8a8df86 100644 --- a/src/Factory.js +++ b/src/Factory.js @@ -42,9 +42,9 @@ Y = 'y'; Kinetic.Factory = { - addGetterSetter: function(constructor, attr, def, afterFunc) { + addGetterSetter: function(constructor, attr, def, validator) { this.addGetter(constructor, attr, def); - this.addSetter(constructor, attr, afterFunc); + this.addSetter(constructor, attr, validator); this.addOverloadedGetterSetter(constructor, attr); }, addGetter: function(constructor, attr, def) { @@ -56,18 +56,19 @@ return val === undefined ? def : val; }; }, - addSetter: function(constructor, attr, afterFunc) { + addSetter: function(constructor, attr, validator) { var method = SET + Kinetic.Util._capitalize(attr); constructor.prototype[method] = function(val) { - this._setAttr(attr, val); - if (afterFunc) { - afterFunc.call(this); + if (validator) { + val = validator.call(this, val); } + + this._setAttr(attr, val); return this; }; }, - addComponentsGetterSetter: function(constructor, attr, components, afterFunc) { + addComponentsGetterSetter: function(constructor, attr, components, validator) { var len = components.length, capitalize = Kinetic.Util._capitalize, getter = GET + capitalize(attr), @@ -91,12 +92,12 @@ var oldVal = this.attrs[attr], key; - for (key in val) { - this._setAttr(attr + capitalize(key), val[key]); + if (validator) { + val = validator.call(this, val); } - if (afterFunc) { - afterFunc.call(this); + for (key in val) { + this._setAttr(attr + capitalize(key), val[key]); } this._fireChangeEvent(attr, oldVal, val); diff --git a/src/Shape.js b/src/Shape.js index ed8f43a1..fa6a1c86 100644 --- a/src/Shape.js +++ b/src/Shape.js @@ -297,7 +297,17 @@ * shape.stroke('rgba(0,255,0,0.5'); */ - Kinetic.Factory.addGetterSetter(Kinetic.Shape, 'strokeRed', 0); + Kinetic.Factory.addGetterSetter(Kinetic.Shape, 'strokeRed', 0, function(val) { + if (val > 255) { + return 255; + } + else if (val < 0) { + return 0; + } + else { + return Math.round(val); + } + }); /** * get/set stroke red component @@ -314,7 +324,17 @@ * shape.strokeRed(0); */ - Kinetic.Factory.addGetterSetter(Kinetic.Shape, 'strokeGreen', 0); + Kinetic.Factory.addGetterSetter(Kinetic.Shape, 'strokeGreen', 0, function(val) { + if (val > 255) { + return 255; + } + else if (val < 0) { + return 0; + } + else { + return Math.round(val); + } + }); /** * get/set stroke green component @@ -331,7 +351,17 @@ * shape.strokeGreen(255); */ - Kinetic.Factory.addGetterSetter(Kinetic.Shape, 'strokeBlue', 0); + Kinetic.Factory.addGetterSetter(Kinetic.Shape, 'strokeBlue', 0, function(val) { + if (val > 255) { + return 255; + } + else if (val < 0) { + return 0; + } + else { + return Math.round(val); + } + }); /** * get/set stroke blue component @@ -490,7 +520,17 @@ * shape.shadowColor('rgba(0,255,0,0.5'); */ - Kinetic.Factory.addGetterSetter(Kinetic.Shape, 'shadowRed', 0); + Kinetic.Factory.addGetterSetter(Kinetic.Shape, 'shadowRed', 0, function(val) { + if (val > 255) { + return 255; + } + else if (val < 0) { + return 0; + } + else { + return Math.round(val); + } + }); /** * get/set shadow red component @@ -507,7 +547,17 @@ * shape.shadowRed(0); */ - Kinetic.Factory.addGetterSetter(Kinetic.Shape, 'shadowGreen', 0); + Kinetic.Factory.addGetterSetter(Kinetic.Shape, 'shadowGreen', 0, function(val) { + if (val > 255) { + return 255; + } + else if (val < 0) { + return 0; + } + else { + return Math.round(val); + } + }); /** * get/set shadow green component @@ -524,7 +574,17 @@ * shape.shadowGreen(255); */ - Kinetic.Factory.addGetterSetter(Kinetic.Shape, 'shadowBlue', 0); + Kinetic.Factory.addGetterSetter(Kinetic.Shape, 'shadowBlue', 0, function(val) { + if (val > 255) { + return 255; + } + else if (val < 0) { + return 0; + } + else { + return Math.round(val); + } + }); /** * get/set shadow blue component @@ -678,7 +738,17 @@ * shape.fill('rgba(0,255,0,0.5'); */ - Kinetic.Factory.addGetterSetter(Kinetic.Shape, 'fillRed', 0); + Kinetic.Factory.addGetterSetter(Kinetic.Shape, 'fillRed', 0, function(val) { + if (val > 255) { + return 255; + } + else if (val < 0) { + return 0; + } + else { + return Math.round(val); + } + }); /** * get/set fill red component @@ -695,7 +765,17 @@ * shape.fillRed(0); */ - Kinetic.Factory.addGetterSetter(Kinetic.Shape, 'fillGreen', 0); + Kinetic.Factory.addGetterSetter(Kinetic.Shape, 'fillGreen', 0, function(val) { + if (val > 255) { + return 255; + } + else if (val < 0) { + return 0; + } + else { + return Math.round(val); + } + }); /** * get/set fill green component @@ -712,7 +792,17 @@ * shape.fillGreen(255); */ - Kinetic.Factory.addGetterSetter(Kinetic.Shape, 'fillBlue', 0); + Kinetic.Factory.addGetterSetter(Kinetic.Shape, 'fillBlue', 0, function(val) { + if (val > 255) { + return 255; + } + else if (val < 0) { + return 0; + } + else { + return Math.round(val); + } + }); /** * get/set fill blue component diff --git a/src/filters/Blur.js b/src/filters/Blur.js index a9082d8d..e3be9402 100644 --- a/src/filters/Blur.js +++ b/src/filters/Blur.js @@ -337,7 +337,7 @@ } }; - Kinetic.Factory.addGetterSetter(Kinetic.Node, 'blurRadius', 0, function() {this._filterUpToDate = false;}); + Kinetic.Factory.addGetterSetter(Kinetic.Node, 'blurRadius', 0, function(val) {this._filterUpToDate = false;return val;}); /** * get/set blur radius diff --git a/src/filters/Brighten.js b/src/filters/Brighten.js index 2bea0267..b7ec3b7f 100644 --- a/src/filters/Brighten.js +++ b/src/filters/Brighten.js @@ -21,7 +21,7 @@ } }; - Kinetic.Factory.addGetterSetter(Kinetic.Node, 'brightness', 0, function() {this._filterUpToDate = false;}); + Kinetic.Factory.addGetterSetter(Kinetic.Node, 'brightness', 0, function(val) {this._filterUpToDate = false;return val;}); /** * get/set filter brightness. The brightness is a number between -1 and 1.  Positive values * brighten the pixels and negative values darken them. diff --git a/src/filters/Emboss.js b/src/filters/Emboss.js index b461e27a..3a8a9985 100644 --- a/src/filters/Emboss.js +++ b/src/filters/Emboss.js @@ -123,7 +123,7 @@ } while (--y); }; - Kinetic.Factory.addGetterSetter(Kinetic.Node, 'embossStrength', 0.5, function() {this._filterUpToDate = false;}); + Kinetic.Factory.addGetterSetter(Kinetic.Node, 'embossStrength', 0.5, function(val) {this._filterUpToDate = false;return val;}); /** * get/set emboss strength * @name embossStrength @@ -133,7 +133,7 @@ * @returns {Number} */ - Kinetic.Factory.addGetterSetter(Kinetic.Node, 'embossWhiteLevel', 0.5, function() {this._filterUpToDate = false;}); + Kinetic.Factory.addGetterSetter(Kinetic.Node, 'embossWhiteLevel', 0.5, function(val) {this._filterUpToDate = false;return val;}); /** * get/set emboss white level * @name embossWhiteLevel @@ -143,7 +143,7 @@ * @returns {Number} */ - Kinetic.Factory.addGetterSetter(Kinetic.Node, 'embossDirection', 'top-left', function() {this._filterUpToDate = false;}); + Kinetic.Factory.addGetterSetter(Kinetic.Node, 'embossDirection', 'top-left', function(val) {this._filterUpToDate = false;return val;}); /** * get/set emboss direction * @name embossDirection @@ -154,7 +154,7 @@ * @returns {String} */ - Kinetic.Factory.addGetterSetter(Kinetic.Node, 'embossBlend', false, function() {this._filterUpToDate = false;}); + Kinetic.Factory.addGetterSetter(Kinetic.Node, 'embossBlend', false, function(val) {this._filterUpToDate = false;return val;}); /** * get/set emboss blend * @name embossBlend diff --git a/src/filters/Enhance.js b/src/filters/Enhance.js index 44faa1c3..7d437456 100644 --- a/src/filters/Enhance.js +++ b/src/filters/Enhance.js @@ -105,7 +105,7 @@ } }; - Kinetic.Factory.addGetterSetter(Kinetic.Node, 'enhance', 0, function() {this._filterUpToDate = false;}); + Kinetic.Factory.addGetterSetter(Kinetic.Node, 'enhance', 0, function(val) {this._filterUpToDate = false;return val;}); /** * get/set enhance diff --git a/src/filters/HSV.js b/src/filters/HSV.js index e0224cbf..df887893 100644 --- a/src/filters/HSV.js +++ b/src/filters/HSV.js @@ -57,7 +57,7 @@ }; - Kinetic.Factory.addGetterSetter(Kinetic.Node, 'hue', 0, function() {this._filterUpToDate = false;}); + Kinetic.Factory.addGetterSetter(Kinetic.Node, 'hue', 0, function(val) {this._filterUpToDate = false;return val;}); /** * get/set hsv hue in degrees * @name hue @@ -67,7 +67,7 @@ * @returns {Number} */ - Kinetic.Factory.addGetterSetter(Kinetic.Node, 'saturation', 1, function() {this._filterUpToDate = false;}); + Kinetic.Factory.addGetterSetter(Kinetic.Node, 'saturation', 1, function(val) {this._filterUpToDate = false;return val;}); /** * get/set hsv saturation * @name saturation @@ -77,7 +77,7 @@ * @returns {Number} */ - Kinetic.Factory.addGetterSetter(Kinetic.Node, 'value', 1, function() {this._filterUpToDate = false;}); + Kinetic.Factory.addGetterSetter(Kinetic.Node, 'value', 1, function(val) {this._filterUpToDate = false;return val;}); /** * get/set hsv value * @name value diff --git a/src/filters/Kaleidoscope.js b/src/filters/Kaleidoscope.js index 46cacea2..01424ed0 100644 --- a/src/filters/Kaleidoscope.js +++ b/src/filters/Kaleidoscope.js @@ -310,8 +310,8 @@ FromPolar(scratchData,imageData,{polarRotation:0}); }; - Kinetic.Factory.addGetterSetter(Kinetic.Node, 'kaleidoscopePower', 2, function() {this._filterUpToDate = false;}); - Kinetic.Factory.addGetterSetter(Kinetic.Node, 'kaleidoscopeAngle', 0, function() {this._filterUpToDate = false;}); + Kinetic.Factory.addGetterSetter(Kinetic.Node, 'kaleidoscopePower', 2, function(val) {this._filterUpToDate = false;return val;}); + Kinetic.Factory.addGetterSetter(Kinetic.Node, 'kaleidoscopeAngle', 0, function(val) {this._filterUpToDate = false;return val;}); /** * get/set kaleidoscope power diff --git a/src/filters/Mask.js b/src/filters/Mask.js index ac0d1150..4156d866 100644 --- a/src/filters/Mask.js +++ b/src/filters/Mask.js @@ -188,5 +188,5 @@ return imageData; }; - Kinetic.Factory.addGetterSetter(Kinetic.Node, 'threshold', 0); + Kinetic.Factory.addGetterSetter(Kinetic.Node, 'threshold', 0, function(val) {this._filterUpToDate = false;return val;}); })(); diff --git a/src/filters/Noise.js b/src/filters/Noise.js index ba560696..e1c187cf 100644 --- a/src/filters/Noise.js +++ b/src/filters/Noise.js @@ -21,7 +21,7 @@ } }; - Kinetic.Factory.addGetterSetter(Kinetic.Node, 'noise', 0.2, function() {this._filterUpToDate = false;}); + Kinetic.Factory.addGetterSetter(Kinetic.Node, 'noise', 0.2, function(val) {this._filterUpToDate = false;return val;}); /** * get/set noise amount. Must be a value between 0 and 1 diff --git a/src/filters/Pixelate.js b/src/filters/Pixelate.js index 2c45ed81..fc97ef72 100644 --- a/src/filters/Pixelate.js +++ b/src/filters/Pixelate.js @@ -76,7 +76,7 @@ }; - Kinetic.Factory.addGetterSetter(Kinetic.Node, 'pixelSize', 8, function() {this._filterUpToDate = false;}); + Kinetic.Factory.addGetterSetter(Kinetic.Node, 'pixelSize', 8, function(val) {this._filterUpToDate = false;return val;}); /** * get/set pixel size diff --git a/src/filters/Posterize.js b/src/filters/Posterize.js index ec96f715..af15dc92 100644 --- a/src/filters/Posterize.js +++ b/src/filters/Posterize.js @@ -23,7 +23,7 @@ } }; - Kinetic.Factory.addGetterSetter(Kinetic.Node, 'levels', 0.5, function() {this._filterUpToDate = false;}); + Kinetic.Factory.addGetterSetter(Kinetic.Node, 'levels', 0.5, function(val) {this._filterUpToDate = false;return val;}); /** * get/set levels. Must be a number between 0 and 1 diff --git a/src/filters/RGB.js b/src/filters/RGB.js index fe3d9a8a..3ed37b1c 100644 --- a/src/filters/RGB.js +++ b/src/filters/RGB.js @@ -23,7 +23,18 @@ } }; - Kinetic.Factory.addGetterSetter(Kinetic.Node, 'red', 255, function() {this._filterUpToDate = false;}); + Kinetic.Factory.addGetterSetter(Kinetic.Node, 'red', 0, function(val) { + this._filterUpToDate = false; + if (val > 255) { + return 255; + } + else if (val < 0) { + return 0; + } + else { + return Math.round(val); + } + }); /** * get/set filter red value * @name red @@ -33,7 +44,18 @@ * @returns {Integer} */ - Kinetic.Factory.addGetterSetter(Kinetic.Node, 'green', 0, function() {this._filterUpToDate = false;}); + Kinetic.Factory.addGetterSetter(Kinetic.Node, 'green', 0, function(val) { + this._filterUpToDate = false; + if (val > 255) { + return 255; + } + else if (val < 0) { + return 0; + } + else { + return Math.round(val); + } + }); /** * get/set filter green value * @name green @@ -43,7 +65,18 @@ * @returns {Integer} */ - Kinetic.Factory.addGetterSetter(Kinetic.Node, 'blue', 0, function() {this._filterUpToDate = false;}); + Kinetic.Factory.addGetterSetter(Kinetic.Node, 'blue', 0, function(val) { + this._filterUpToDate = false; + if (val > 255) { + return 255; + } + else if (val < 0) { + return 0; + } + else { + return Math.round(val); + } + }); /** * get/set filter blue value * @name blue diff --git a/src/filters/Threshold.js b/src/filters/Threshold.js index f998684b..b2917824 100644 --- a/src/filters/Threshold.js +++ b/src/filters/Threshold.js @@ -21,7 +21,7 @@ } }; - Kinetic.Factory.addGetterSetter(Kinetic.Node, 'threshold', 0.5, function() {this._filterUpToDate = false;}); + Kinetic.Factory.addGetterSetter(Kinetic.Node, 'threshold', 0.5, function(val) {this._filterUpToDate = false;return val;}); /** * get/set threshold. Must be a value between 0 and 1 diff --git a/src/shapes/Text.js b/src/shapes/Text.js index f1885a4b..9dd96584 100644 --- a/src/shapes/Text.js +++ b/src/shapes/Text.js @@ -433,7 +433,8 @@ * text.wrap('word'); */ - Kinetic.Factory.addGetter(Kinetic.Text, TEXT, EMPTY_STRING); + Kinetic.Factory.addGetter(Kinetic.Text, 'text', EMPTY_STRING); + Kinetic.Factory.addOverloadedGetterSetter(Kinetic.Text, 'text'); /** * get/set text