Skip to content

Commit

Permalink
Add feature straighten by x degrees (45 for e.g)
Browse files Browse the repository at this point in the history
changes straighten(), fxStraighten(), straightenObject() and  fxStraightenObject() function to allow passing an Int param that is used to define angle steps

for e.g straighten(45) would allow following angle steps 0, 45, 90, 135, 180, 225, 270, etc.

passing no param default to 90.
  • Loading branch information
fadomire committed Mar 21, 2013
1 parent 97fdc21 commit 555ca98
Showing 1 changed file with 32 additions and 16 deletions.
48 changes: 32 additions & 16 deletions src/object_straightening.mixin.js
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -3,48 +3,56 @@ fabric.util.object.extend(fabric.Object.prototype, /** @scope fabric.Object.prot
/** /**
* @private * @private
* @method _getAngleValueForStraighten * @method _getAngleValueForStraighten
* @param {Int} angleSteps
* @return {Number} angle value * @return {Number} angle value
*/ */
_getAngleValueForStraighten: function() { _getAngleValueForStraighten: function(angleSteps) {
var angle = this.getAngle() % 360; var angle = this.getAngle() % 360;
if (angle > 0) { if (angle > 0) {
return Math.round((angle-1)/90) * 90; return Math.round((angle-1)/angleSteps) * angleSteps;
} }
return Math.round(angle/90) * 90; return Math.round(angle/angleSteps) * angleSteps;
}, },


/** /**
* Straightens an object (rotating it from current angle to one of 0, 90, 180, 270, etc. depending on which is closer) * Straightens an object with angleSteps of x degrees, for example passing 45 to the function will rotate it from current angle to one of 0, 45, 90, 135, 180, 225, 270, etc. depending on which is closer. Default is 90.
* @method straighten * @method straighten
* @param {Int} angleSteps
* @return {fabric.Object} thisArg * @return {fabric.Object} thisArg
* @chainable * @chainable
*/ */
straighten: function() { straighten: function(angleSteps) {
this.setAngle(this._getAngleValueForStraighten()); if(!angleSteps){
var angleSteps = 90;
}
this.setAngle(this._getAngleValueForStraighten(angleSteps));
return this; return this;
}, },


/** /**
* Same as {@link fabric.Object.prototype.straghten} but with animation * Same as {@link fabric.Object.prototype.straighten} but with animation
* @method fxStraighten * @method fxStraighten
* @param {Object} callbacks * @param {Object} callbacks
* - onComplete: invoked on completion * - onComplete: invoked on completion
* - onChange: invoked on every step of animation * - onChange: invoked on every step of animation
* * @param {Int} angleSteps
* @return {fabric.Object} thisArg * @return {fabric.Object} thisArg
* @chainable * @chainable
*/ */
fxStraighten: function(callbacks) { fxStraighten: function(callbacks, angleSteps) {
callbacks = callbacks || { }; callbacks = callbacks || { };

if(!angleSteps){
var angleSteps = 90;
}

var empty = function() { }, var empty = function() { },
onComplete = callbacks.onComplete || empty, onComplete = callbacks.onComplete || empty,
onChange = callbacks.onChange || empty, onChange = callbacks.onChange || empty,
_this = this; _this = this;


fabric.util.animate({ fabric.util.animate({
startValue: this.get('angle'), startValue: this.get('angle'),
endValue: this._getAngleValueForStraighten(), endValue: this._getAngleValueForStraighten(angleSteps),
duration: this.FX_DURATION, duration: this.FX_DURATION,
onChange: function(value) { onChange: function(value) {
_this.setAngle(value); _this.setAngle(value);
Expand All @@ -69,11 +77,15 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, {
* Straightens object, then rerenders canvas * Straightens object, then rerenders canvas
* @method straightenObject * @method straightenObject
* @param {fabric.Object} object Object to straighten * @param {fabric.Object} object Object to straighten
* @param {Int} angleSteps
* @return {fabric.Canvas} thisArg * @return {fabric.Canvas} thisArg
* @chainable * @chainable
*/ */
straightenObject: function (object) { straightenObject: function (object, angleSteps) {
object.straighten(); if(!angleSteps){
var angleSteps = 90;
}
object.straighten(angleSteps);
this.renderAll(); this.renderAll();
return this; return this;
}, },
Expand All @@ -82,13 +94,17 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, {
* Same as {@link fabric.Canvas.prototype.straightenObject}, but animated * Same as {@link fabric.Canvas.prototype.straightenObject}, but animated
* @method fxStraightenObject * @method fxStraightenObject
* @param {fabric.Object} object Object to straighten * @param {fabric.Object} object Object to straighten
* @param {Int} angleSteps
* @return {fabric.Canvas} thisArg * @return {fabric.Canvas} thisArg
* @chainable * @chainable
*/ */
fxStraightenObject: function (object) { fxStraightenObject: function (object, angleSteps) {
if(!angleSteps){
var angleSteps = 90;
}
object.fxStraighten({ object.fxStraighten({
onChange: this.renderAll.bind(this) onChange: this.renderAll.bind(this)
}); }, angleSteps);
return this; return this;
} }
}); });

0 comments on commit 555ca98

Please sign in to comment.