fabric-rails 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.md +8 -0
- data/Gemfile.lock +19 -19
- data/README.md +1 -1
- data/lib/fabric/rails/version.rb +2 -2
- data/vendor/assets/javascripts/fabric.js +237 -101
- metadata +8 -23
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,36 +1,36 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
fabric-rails (0.0.
|
4
|
+
fabric-rails (0.0.3)
|
5
5
|
railties (>= 3.2.0, < 5.0)
|
6
6
|
thor (~> 0.14)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: http://rubygems.org/
|
10
10
|
specs:
|
11
|
-
actionpack (3.2.
|
12
|
-
activemodel (= 3.2.
|
13
|
-
activesupport (= 3.2.
|
11
|
+
actionpack (3.2.1)
|
12
|
+
activemodel (= 3.2.1)
|
13
|
+
activesupport (= 3.2.1)
|
14
14
|
builder (~> 3.0.0)
|
15
15
|
erubis (~> 2.7.0)
|
16
|
-
journey (~> 1.0.
|
16
|
+
journey (~> 1.0.1)
|
17
17
|
rack (~> 1.4.0)
|
18
|
-
rack-cache (~> 1.
|
18
|
+
rack-cache (~> 1.1)
|
19
19
|
rack-test (~> 0.6.1)
|
20
|
-
sprockets (~> 2.1.
|
21
|
-
activemodel (3.2.
|
22
|
-
activesupport (= 3.2.
|
20
|
+
sprockets (~> 2.1.2)
|
21
|
+
activemodel (3.2.1)
|
22
|
+
activesupport (= 3.2.1)
|
23
23
|
builder (~> 3.0.0)
|
24
|
-
activesupport (3.2.
|
24
|
+
activesupport (3.2.1)
|
25
25
|
i18n (~> 0.6)
|
26
26
|
multi_json (~> 1.0)
|
27
27
|
builder (3.0.0)
|
28
28
|
erubis (2.7.0)
|
29
29
|
hike (1.2.1)
|
30
30
|
i18n (0.6.0)
|
31
|
-
journey (1.0.
|
32
|
-
json (1.
|
33
|
-
multi_json (1.
|
31
|
+
journey (1.0.3)
|
32
|
+
json (1.6.5)
|
33
|
+
multi_json (1.1.0)
|
34
34
|
rack (1.4.1)
|
35
35
|
rack-cache (1.2)
|
36
36
|
rack (>= 0.4)
|
@@ -38,21 +38,21 @@ GEM
|
|
38
38
|
rack
|
39
39
|
rack-test (0.6.1)
|
40
40
|
rack (>= 1.0)
|
41
|
-
railties (3.2.
|
42
|
-
actionpack (= 3.2.
|
43
|
-
activesupport (= 3.2.
|
41
|
+
railties (3.2.1)
|
42
|
+
actionpack (= 3.2.1)
|
43
|
+
activesupport (= 3.2.1)
|
44
44
|
rack-ssl (~> 1.3.2)
|
45
45
|
rake (>= 0.8.7)
|
46
46
|
rdoc (~> 3.4)
|
47
|
-
thor (
|
47
|
+
thor (~> 0.14.6)
|
48
48
|
rake (0.9.2.2)
|
49
49
|
rdoc (3.12)
|
50
50
|
json (~> 1.4)
|
51
|
-
sprockets (2.1.
|
51
|
+
sprockets (2.1.2)
|
52
52
|
hike (~> 1.2)
|
53
53
|
rack (~> 1.0)
|
54
54
|
tilt (~> 1.1, != 1.3.0)
|
55
|
-
thor (0.
|
55
|
+
thor (0.14.6)
|
56
56
|
tilt (1.3.3)
|
57
57
|
|
58
58
|
PLATFORMS
|
data/README.md
CHANGED
data/lib/fabric/rails/version.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
/* build: `node build.js modules=ALL` */
|
2
2
|
/*! Fabric.js Copyright 2008-2012, Printio (Juriy Zaytsev, Maxim Chernyak) */
|
3
3
|
|
4
|
-
var fabric = fabric || { version: "0.
|
4
|
+
var fabric = fabric || { version: "0.9.0" };
|
5
5
|
|
6
6
|
if (typeof exports != 'undefined') {
|
7
7
|
exports.fabric = fabric;
|
@@ -2932,28 +2932,28 @@ fabric.util.string = {
|
|
2932
2932
|
* @param {Function} callback Callback to execute when script is finished loading
|
2933
2933
|
*/
|
2934
2934
|
function getScript(url, callback) {
|
2935
|
-
|
2936
|
-
|
2937
|
-
|
2938
|
-
|
2939
|
-
|
2940
|
-
|
2941
|
-
|
2942
|
-
|
2943
|
-
|
2944
|
-
|
2945
|
-
|
2946
|
-
|
2947
|
-
|
2948
|
-
|
2949
|
-
|
2950
|
-
|
2951
|
-
|
2952
|
-
|
2953
|
-
|
2954
|
-
|
2955
|
-
|
2956
|
-
|
2935
|
+
var headEl = fabric.document.getElementsByTagName("head")[0],
|
2936
|
+
scriptEl = fabric.document.createElement('script'),
|
2937
|
+
loading = true;
|
2938
|
+
|
2939
|
+
scriptEl.type = 'text/javascript';
|
2940
|
+
scriptEl.setAttribute('runat', 'server');
|
2941
|
+
|
2942
|
+
/** @ignore */
|
2943
|
+
scriptEl.onload = /** @ignore */ scriptEl.onreadystatechange = function(e) {
|
2944
|
+
if (loading) {
|
2945
|
+
if (typeof this.readyState == 'string' &&
|
2946
|
+
this.readyState !== 'loaded' &&
|
2947
|
+
this.readyState !== 'complete') return;
|
2948
|
+
loading = false;
|
2949
|
+
callback(e || fabric.window.event);
|
2950
|
+
scriptEl = scriptEl.onload = scriptEl.onreadystatechange = null;
|
2951
|
+
}
|
2952
|
+
};
|
2953
|
+
scriptEl.src = url;
|
2954
|
+
headEl.appendChild(scriptEl);
|
2955
|
+
// causes issue in Opera
|
2956
|
+
// headEl.removeChild(scriptEl);
|
2957
2957
|
}
|
2958
2958
|
|
2959
2959
|
fabric.util.getScript = getScript;
|
@@ -3644,11 +3644,6 @@ fabric.util.string = {
|
|
3644
3644
|
};
|
3645
3645
|
|
3646
3646
|
function resolveGradients(instances) {
|
3647
|
-
var activeInstance = fabric.Canvas.activeInstance,
|
3648
|
-
ctx = activeInstance ? activeInstance.getContext() : null;
|
3649
|
-
|
3650
|
-
if (!ctx) return;
|
3651
|
-
|
3652
3647
|
for (var i = instances.length; i--; ) {
|
3653
3648
|
var instanceFillValue = instances[i].get('fill');
|
3654
3649
|
|
@@ -3658,7 +3653,7 @@ fabric.util.string = {
|
|
3658
3653
|
|
3659
3654
|
if (fabric.gradientDefs[gradientId]) {
|
3660
3655
|
instances[i].set('fill',
|
3661
|
-
fabric.Gradient.fromElement(fabric.gradientDefs[gradientId],
|
3656
|
+
fabric.Gradient.fromElement(fabric.gradientDefs[gradientId], instances[i]));
|
3662
3657
|
}
|
3663
3658
|
}
|
3664
3659
|
}
|
@@ -3672,8 +3667,9 @@ fabric.util.string = {
|
|
3672
3667
|
* @param {Array} elements Array of elements to parse
|
3673
3668
|
* @param {Function} callback Being passed an array of fabric instances (transformed from SVG elements)
|
3674
3669
|
* @param {Object} options Options object
|
3670
|
+
* @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created.
|
3675
3671
|
*/
|
3676
|
-
function parseElements(elements, callback, options) {
|
3672
|
+
function parseElements(elements, callback, options, reviver) {
|
3677
3673
|
var instances = Array(elements.length), i = elements.length;
|
3678
3674
|
|
3679
3675
|
function checkIfDone() {
|
@@ -3692,15 +3688,18 @@ fabric.util.string = {
|
|
3692
3688
|
if (klass && klass.fromElement) {
|
3693
3689
|
try {
|
3694
3690
|
if (klass.async) {
|
3695
|
-
klass.fromElement(el, (function(index) {
|
3691
|
+
klass.fromElement(el, (function(index, el) {
|
3696
3692
|
return function(obj) {
|
3693
|
+
reviver && reviver(el, obj);
|
3697
3694
|
instances.splice(index, 0, obj);
|
3698
3695
|
checkIfDone();
|
3699
3696
|
};
|
3700
3697
|
})(index), options);
|
3701
3698
|
}
|
3702
3699
|
else {
|
3703
|
-
|
3700
|
+
var obj = klass.fromElement(el, options);
|
3701
|
+
reviver && reviver(el, obj);
|
3702
|
+
instances.splice(index, 0, obj);
|
3704
3703
|
checkIfDone();
|
3705
3704
|
}
|
3706
3705
|
}
|
@@ -3790,6 +3789,7 @@ fabric.util.string = {
|
|
3790
3789
|
* @method parseSVGDocument
|
3791
3790
|
* @param {SVGDocument} doc SVG document to parse
|
3792
3791
|
* @param {Function} callback Callback to call when parsing is finished; It's being passed an array of elements (parsed from a document).
|
3792
|
+
* @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created.
|
3793
3793
|
*/
|
3794
3794
|
fabric.parseSVGDocument = (function() {
|
3795
3795
|
|
@@ -3819,7 +3819,7 @@ fabric.util.string = {
|
|
3819
3819
|
return false;
|
3820
3820
|
}
|
3821
3821
|
|
3822
|
-
return function(doc, callback) {
|
3822
|
+
return function(doc, callback, reviver) {
|
3823
3823
|
if (!doc) return;
|
3824
3824
|
|
3825
3825
|
var startTime = new Date(),
|
@@ -3877,7 +3877,7 @@ fabric.util.string = {
|
|
3877
3877
|
if (callback) {
|
3878
3878
|
callback(instances, options);
|
3879
3879
|
}
|
3880
|
-
}, clone(options));
|
3880
|
+
}, clone(options), reviver);
|
3881
3881
|
};
|
3882
3882
|
})();
|
3883
3883
|
|
@@ -3921,8 +3921,9 @@ fabric.util.string = {
|
|
3921
3921
|
* @method loadSVGFromURL
|
3922
3922
|
* @param {String} url
|
3923
3923
|
* @param {Function} callback
|
3924
|
+
* @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created.
|
3924
3925
|
*/
|
3925
|
-
function loadSVGFromURL(url, callback) {
|
3926
|
+
function loadSVGFromURL(url, callback, reviver) {
|
3926
3927
|
|
3927
3928
|
url = url.replace(/^\n\s*/, '').trim();
|
3928
3929
|
|
@@ -3958,7 +3959,7 @@ fabric.util.string = {
|
|
3958
3959
|
options: options
|
3959
3960
|
});
|
3960
3961
|
callback(results, options);
|
3961
|
-
});
|
3962
|
+
}, reviver);
|
3962
3963
|
}
|
3963
3964
|
}
|
3964
3965
|
|
@@ -3982,8 +3983,9 @@ fabric.util.string = {
|
|
3982
3983
|
* @method loadSVGFromString
|
3983
3984
|
* @param {String} string
|
3984
3985
|
* @param {Function} callback
|
3986
|
+
* @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created.
|
3985
3987
|
*/
|
3986
|
-
function loadSVGFromString(string, callback) {
|
3988
|
+
function loadSVGFromString(string, callback, reviver) {
|
3987
3989
|
string = string.trim();
|
3988
3990
|
var doc;
|
3989
3991
|
if (typeof DOMParser !== 'undefined') {
|
@@ -4001,7 +4003,7 @@ fabric.util.string = {
|
|
4001
4003
|
|
4002
4004
|
fabric.parseSVGDocument(doc.documentElement, function (results, options) {
|
4003
4005
|
callback(results, options);
|
4004
|
-
});
|
4006
|
+
}, reviver);
|
4005
4007
|
}
|
4006
4008
|
|
4007
4009
|
function createSVGFontFacesMarkup(objects) {
|
@@ -4074,38 +4076,55 @@ fabric.util.string = {
|
|
4074
4076
|
}
|
4075
4077
|
}
|
4076
4078
|
|
4077
|
-
/**
|
4079
|
+
/**
|
4080
|
+
* @class Object
|
4081
|
+
* @memberOf fabric
|
4082
|
+
*/
|
4083
|
+
fabric.Gradient = fabric.util.createClass(/** @scope fabric.Gradient.prototype */ {
|
4078
4084
|
|
4079
|
-
|
4085
|
+
initialize: function(options) {
|
4080
4086
|
|
4081
|
-
/**
|
4082
|
-
* @method create
|
4083
|
-
* @static
|
4084
|
-
*/
|
4085
|
-
create: function(ctx, options) {
|
4086
4087
|
options || (options = { });
|
4087
4088
|
|
4088
|
-
|
4089
|
-
|
4090
|
-
|
4091
|
-
|
4092
|
-
|
4089
|
+
this.x1 = options.x1 || 0;
|
4090
|
+
this.y1 = options.y1 || 0;
|
4091
|
+
this.x2 = options.x2 || 0;
|
4092
|
+
this.y2 = options.y2 || 0;
|
4093
|
+
|
4094
|
+
this.colorStops = options.colorStops;
|
4095
|
+
},
|
4096
|
+
|
4097
|
+
toObject: function() {
|
4098
|
+
return {
|
4099
|
+
x1: this.x1,
|
4100
|
+
x2: this.x2,
|
4101
|
+
y1: this.y1,
|
4102
|
+
y2: this.y2,
|
4103
|
+
colorStops: this.colorStops
|
4104
|
+
};
|
4105
|
+
},
|
4093
4106
|
|
4094
|
-
|
4107
|
+
toLiveGradient: function(ctx) {
|
4108
|
+
var gradient = ctx.createLinearGradient(
|
4109
|
+
this.x1, this.y1, this.x2 || ctx.canvas.width, this.y2);
|
4095
4110
|
|
4096
|
-
for (var position in colorStops) {
|
4097
|
-
var colorValue = colorStops[position];
|
4111
|
+
for (var position in this.colorStops) {
|
4112
|
+
var colorValue = this.colorStops[position];
|
4098
4113
|
gradient.addColorStop(parseFloat(position), colorValue);
|
4099
4114
|
}
|
4115
|
+
|
4100
4116
|
return gradient;
|
4101
|
-
}
|
4117
|
+
}
|
4118
|
+
});
|
4119
|
+
|
4120
|
+
fabric.util.object.extend(fabric.Gradient, {
|
4102
4121
|
|
4103
4122
|
/**
|
4104
4123
|
* @method fromElement
|
4105
4124
|
* @static
|
4106
4125
|
* @see http://www.w3.org/TR/SVG/pservers.html#LinearGradientElement
|
4107
4126
|
*/
|
4108
|
-
fromElement: function(el,
|
4127
|
+
fromElement: function(el, instance) {
|
4109
4128
|
|
4110
4129
|
/**
|
4111
4130
|
* @example:
|
@@ -4147,7 +4166,7 @@ fabric.util.string = {
|
|
4147
4166
|
|
4148
4167
|
_convertPercentUnitsToValues(instance, coords);
|
4149
4168
|
|
4150
|
-
return fabric.Gradient
|
4169
|
+
return new fabric.Gradient({
|
4151
4170
|
x1: coords.x1,
|
4152
4171
|
y1: coords.y1,
|
4153
4172
|
x2: coords.x2,
|
@@ -4160,22 +4179,12 @@ fabric.util.string = {
|
|
4160
4179
|
* @method forObject
|
4161
4180
|
* @static
|
4162
4181
|
*/
|
4163
|
-
forObject: function(obj,
|
4182
|
+
forObject: function(obj, options) {
|
4164
4183
|
options || (options = { });
|
4165
|
-
|
4166
4184
|
_convertPercentUnitsToValues(obj, options);
|
4167
|
-
|
4168
|
-
var gradient = fabric.Gradient.create(ctx, {
|
4169
|
-
x1: options.x1,
|
4170
|
-
y1: options.y1,
|
4171
|
-
x2: options.x2,
|
4172
|
-
y2: options.y2,
|
4173
|
-
colorStops: options.colorStops
|
4174
|
-
});
|
4175
|
-
|
4176
|
-
return gradient;
|
4185
|
+
return new fabric.Gradient(options);
|
4177
4186
|
}
|
4178
|
-
};
|
4187
|
+
});
|
4179
4188
|
|
4180
4189
|
function _convertPercentUnitsToValues(object, options) {
|
4181
4190
|
for (var prop in options) {
|
@@ -5216,15 +5225,24 @@ fabric.util.string = {
|
|
5216
5225
|
add: function () {
|
5217
5226
|
this._objects.push.apply(this._objects, arguments);
|
5218
5227
|
for (var i = arguments.length; i--; ) {
|
5219
|
-
this.
|
5220
|
-
arguments[i].setCoords();
|
5221
|
-
this.fire('object:added', { target: arguments[i] });
|
5222
|
-
arguments[i].fire('added');
|
5228
|
+
this._initObject(arguments[i]);
|
5223
5229
|
}
|
5224
5230
|
this.renderOnAddition && this.renderAll();
|
5225
5231
|
return this;
|
5226
5232
|
},
|
5227
5233
|
|
5234
|
+
/**
|
5235
|
+
* @private
|
5236
|
+
* @method _initObject
|
5237
|
+
*/
|
5238
|
+
_initObject: function(obj) {
|
5239
|
+
this.stateful && obj.setupState();
|
5240
|
+
obj.setCoords();
|
5241
|
+
obj.canvas = this;
|
5242
|
+
this.fire('object:added', { target: obj });
|
5243
|
+
obj.fire('added');
|
5244
|
+
},
|
5245
|
+
|
5228
5246
|
/**
|
5229
5247
|
* Inserts an object to canvas at specified index and renders canvas.
|
5230
5248
|
* An object should be an instance of (or inherit from) fabric.Object
|
@@ -5241,12 +5259,7 @@ fabric.util.string = {
|
|
5241
5259
|
else {
|
5242
5260
|
this._objects.splice(index, 0, object);
|
5243
5261
|
}
|
5244
|
-
this.
|
5245
|
-
object.setCoords();
|
5246
|
-
|
5247
|
-
this.fire('object:added', { target: object });
|
5248
|
-
object.fire('added');
|
5249
|
-
|
5262
|
+
this._initObject(object);
|
5250
5263
|
this.renderOnAddition && this.renderAll();
|
5251
5264
|
return this;
|
5252
5265
|
},
|
@@ -5410,11 +5423,12 @@ fabric.util.string = {
|
|
5410
5423
|
* Exports canvas element to a dataurl image.
|
5411
5424
|
* @method toDataURL
|
5412
5425
|
* @param {String} format the format of the output image. Either "jpeg" or "png".
|
5426
|
+
* @param {Number} quality quality level (0..1)
|
5413
5427
|
* @return {String}
|
5414
5428
|
*/
|
5415
|
-
toDataURL: function (format) {
|
5429
|
+
toDataURL: function (format, quality) {
|
5416
5430
|
this.renderAll(true);
|
5417
|
-
var data = (this.upperCanvasEl || this.lowerCanvasEl).toDataURL('image/' + format);
|
5431
|
+
var data = (this.upperCanvasEl || this.lowerCanvasEl).toDataURL('image/' + format, quality);
|
5418
5432
|
this.renderAll();
|
5419
5433
|
return data;
|
5420
5434
|
},
|
@@ -5424,9 +5438,10 @@ fabric.util.string = {
|
|
5424
5438
|
* @method toDataURLWithMultiplier
|
5425
5439
|
* @param {String} format (png|jpeg)
|
5426
5440
|
* @param {Number} multiplier
|
5441
|
+
* @param {Number} quality (0..1)
|
5427
5442
|
* @return {String}
|
5428
5443
|
*/
|
5429
|
-
toDataURLWithMultiplier: function (format, multiplier) {
|
5444
|
+
toDataURLWithMultiplier: function (format, multiplier, quality) {
|
5430
5445
|
|
5431
5446
|
var origWidth = this.getWidth(),
|
5432
5447
|
origHeight = this.getHeight(),
|
@@ -5453,7 +5468,7 @@ fabric.util.string = {
|
|
5453
5468
|
|
5454
5469
|
this.renderAll(true);
|
5455
5470
|
|
5456
|
-
var dataURL = this.toDataURL(format);
|
5471
|
+
var dataURL = this.toDataURL(format, quality);
|
5457
5472
|
|
5458
5473
|
this.contextTop.scale(1 / multiplier, 1 / multiplier);
|
5459
5474
|
this.setWidth(origWidth).setHeight(origHeight);
|
@@ -6909,7 +6924,7 @@ fabric.util.string = {
|
|
6909
6924
|
|
6910
6925
|
/**
|
6911
6926
|
* Returns context of canvas where object selection is drawn
|
6912
|
-
* @method
|
6927
|
+
* @method getSelectionContext
|
6913
6928
|
* @return {CanvasRenderingContext2D}
|
6914
6929
|
*/
|
6915
6930
|
getSelectionContext: function() {
|
@@ -6918,7 +6933,7 @@ fabric.util.string = {
|
|
6918
6933
|
|
6919
6934
|
/**
|
6920
6935
|
* Returns <canvas> element on which object selection is drawn
|
6921
|
-
* @method
|
6936
|
+
* @method getSelectionElement
|
6922
6937
|
* @return {HTMLCanvasElement}
|
6923
6938
|
*/
|
6924
6939
|
getSelectionElement: function () {
|
@@ -7576,7 +7591,19 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, {
|
|
7576
7591
|
* @param {Object} [options] Options object
|
7577
7592
|
*/
|
7578
7593
|
initialize: function(options) {
|
7579
|
-
|
7594
|
+
if (options) {
|
7595
|
+
this.setOptions(options);
|
7596
|
+
this._initGradient(options);
|
7597
|
+
}
|
7598
|
+
},
|
7599
|
+
|
7600
|
+
/**
|
7601
|
+
* @method initGradient
|
7602
|
+
*/
|
7603
|
+
_initGradient: function(options) {
|
7604
|
+
if (options.fill && typeof options.fill == 'object' && !(options.fill instanceof fabric.Gradient)) {
|
7605
|
+
this.set('fill', new fabric.Gradient(options.fill));
|
7606
|
+
}
|
7580
7607
|
},
|
7581
7608
|
|
7582
7609
|
/**
|
@@ -7620,7 +7647,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, {
|
|
7620
7647
|
top: toFixed(this.top, this.NUM_FRACTION_DIGITS),
|
7621
7648
|
width: toFixed(this.width, this.NUM_FRACTION_DIGITS),
|
7622
7649
|
height: toFixed(this.height, this.NUM_FRACTION_DIGITS),
|
7623
|
-
fill: this.fill,
|
7650
|
+
fill: (this.fill && this.fill.toObject) ? this.fill.toObject() : this.fill,
|
7624
7651
|
overlayFill: this.overlayFill,
|
7625
7652
|
stroke: this.stroke,
|
7626
7653
|
strokeWidth: this.strokeWidth,
|
@@ -7833,7 +7860,9 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, {
|
|
7833
7860
|
ctx.fillStyle = this.overlayFill;
|
7834
7861
|
}
|
7835
7862
|
else if (this.fill) {
|
7836
|
-
ctx.fillStyle = this.fill
|
7863
|
+
ctx.fillStyle = this.fill.toLiveGradient
|
7864
|
+
? this.fill.toLiveGradient(ctx)
|
7865
|
+
: this.fill;
|
7837
7866
|
}
|
7838
7867
|
|
7839
7868
|
if (this.group && this.type === 'rect') {
|
@@ -8811,8 +8840,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, {
|
|
8811
8840
|
return this.toObject();
|
8812
8841
|
},
|
8813
8842
|
|
8814
|
-
setGradientFill: function(
|
8815
|
-
this.set('fill', fabric.Gradient.forObject(this,
|
8843
|
+
setGradientFill: function(options) {
|
8844
|
+
this.set('fill', fabric.Gradient.forObject(this, options));
|
8816
8845
|
},
|
8817
8846
|
|
8818
8847
|
animate: function(property, to, options) {
|
@@ -8843,6 +8872,91 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, {
|
|
8843
8872
|
options.onComplete && options.onComplete();
|
8844
8873
|
}
|
8845
8874
|
});
|
8875
|
+
},
|
8876
|
+
|
8877
|
+
/**
|
8878
|
+
* Centers object horizontally on canvas to which it was added last
|
8879
|
+
* @method centerH
|
8880
|
+
* @return {fabric.Object} thisArg
|
8881
|
+
*/
|
8882
|
+
centerH: function () {
|
8883
|
+
this.canvas.centerObjectH(this);
|
8884
|
+
return this;
|
8885
|
+
},
|
8886
|
+
|
8887
|
+
/**
|
8888
|
+
* Centers object vertically on canvas to which it was added last
|
8889
|
+
* @method centerV
|
8890
|
+
* @return {fabric.Object} thisArg
|
8891
|
+
* @chainable
|
8892
|
+
*/
|
8893
|
+
centerV: function () {
|
8894
|
+
this.canvas.centerObjectV(this);
|
8895
|
+
return this;
|
8896
|
+
},
|
8897
|
+
|
8898
|
+
/**
|
8899
|
+
* Centers object vertically and horizontally on canvas to which is was added last
|
8900
|
+
* @method center
|
8901
|
+
* @return {fabric.Object} thisArg
|
8902
|
+
* @chainable
|
8903
|
+
*/
|
8904
|
+
center: function () {
|
8905
|
+
return this.centerH().centerV();
|
8906
|
+
},
|
8907
|
+
|
8908
|
+
/**
|
8909
|
+
* Removes object from canvas to which it was added last
|
8910
|
+
* @method remove
|
8911
|
+
* @return {fabric.Object} thisArg
|
8912
|
+
* @chainable
|
8913
|
+
*/
|
8914
|
+
remove: function() {
|
8915
|
+
return this.canvas.remove(this);
|
8916
|
+
},
|
8917
|
+
|
8918
|
+
/**
|
8919
|
+
* Moves an object to the bottom of the stack of drawn objects
|
8920
|
+
* @method sendToBack
|
8921
|
+
* @return {fabric.Object} thisArg
|
8922
|
+
* @chainable
|
8923
|
+
*/
|
8924
|
+
sendToBack: function() {
|
8925
|
+
this.canvas.sendToBack(this);
|
8926
|
+
return this;
|
8927
|
+
},
|
8928
|
+
|
8929
|
+
/**
|
8930
|
+
* Moves an object to the top of the stack of drawn objects
|
8931
|
+
* @method bringToFront
|
8932
|
+
* @return {fabric.Object} thisArg
|
8933
|
+
* @chainable
|
8934
|
+
*/
|
8935
|
+
bringToFront: function() {
|
8936
|
+
this.canvas.bringToFront(this);
|
8937
|
+
return this;
|
8938
|
+
},
|
8939
|
+
|
8940
|
+
/**
|
8941
|
+
* Moves an object one level down in stack of drawn objects
|
8942
|
+
* @method sendBackwards
|
8943
|
+
* @return {fabric.Object} thisArg
|
8944
|
+
* @chainable
|
8945
|
+
*/
|
8946
|
+
sendBackwards: function() {
|
8947
|
+
this.canvas.sendBackwards(this);
|
8948
|
+
return this;
|
8949
|
+
},
|
8950
|
+
|
8951
|
+
/**
|
8952
|
+
* Moves an object one level up in stack of drawn objects
|
8953
|
+
* @method bringForward
|
8954
|
+
* @return {fabric.Object} thisArg
|
8955
|
+
* @chainable
|
8956
|
+
*/
|
8957
|
+
bringForward: function() {
|
8958
|
+
this.canvas.bringForward(this);
|
8959
|
+
return this;
|
8846
8960
|
}
|
8847
8961
|
});
|
8848
8962
|
|
@@ -10251,12 +10365,15 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, {
|
|
10251
10365
|
*/
|
10252
10366
|
_render: function(ctx) {
|
10253
10367
|
var current, // current instruction
|
10368
|
+
previous = null,
|
10254
10369
|
x = 0, // current x
|
10255
10370
|
y = 0, // current y
|
10256
10371
|
controlX = 0, // current control point x
|
10257
10372
|
controlY = 0, // current control point y
|
10258
10373
|
tempX,
|
10259
10374
|
tempY,
|
10375
|
+
tempControlX,
|
10376
|
+
tempControlY,
|
10260
10377
|
l = -(this.width / 2),
|
10261
10378
|
t = -(this.height / 2);
|
10262
10379
|
|
@@ -10425,13 +10542,31 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, {
|
|
10425
10542
|
break;
|
10426
10543
|
|
10427
10544
|
case 't': // shorthand quadraticCurveTo, relative
|
10545
|
+
|
10428
10546
|
// transform to absolute x,y
|
10429
10547
|
tempX = x + current[1];
|
10430
10548
|
tempY = y + current[2];
|
10549
|
+
|
10431
10550
|
|
10432
|
-
|
10433
|
-
|
10434
|
-
|
10551
|
+
if (previous[0].match(/[QqTt]/) === null) {
|
10552
|
+
// If there is no previous command or if the previous command was not a Q, q, T or t,
|
10553
|
+
// assume the control point is coincident with the current point
|
10554
|
+
controlX = x;
|
10555
|
+
controlY = y;
|
10556
|
+
}
|
10557
|
+
else if (previous[0] === 't') {
|
10558
|
+
// calculate reflection of previous control points for t
|
10559
|
+
controlX = 2 * x - tempControlX;
|
10560
|
+
controlY = 2 * y - tempControlY;
|
10561
|
+
}
|
10562
|
+
else if (previous[0] === 'q') {
|
10563
|
+
// calculate reflection of previous control points for q
|
10564
|
+
controlX = 2 * x - controlX;
|
10565
|
+
controlY = 2 * y - controlY;
|
10566
|
+
}
|
10567
|
+
|
10568
|
+
tempControlX = controlX;
|
10569
|
+
tempControlY = controlY;
|
10435
10570
|
|
10436
10571
|
ctx.quadraticCurveTo(
|
10437
10572
|
controlX + l,
|
@@ -10497,6 +10632,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, {
|
|
10497
10632
|
ctx.closePath();
|
10498
10633
|
break;
|
10499
10634
|
}
|
10635
|
+
previous = current
|
10500
10636
|
}
|
10501
10637
|
},
|
10502
10638
|
|
@@ -12532,16 +12668,16 @@ fabric.Image.filters.Tint = fabric.util.createClass( /** @scope fabric.Image.fil
|
|
12532
12668
|
iLen = data.length, i,
|
12533
12669
|
r, g, b, a;
|
12534
12670
|
|
12535
|
-
|
12536
|
-
|
12537
|
-
|
12538
|
-
|
12539
|
-
|
12671
|
+
var rgb = parseInt(this.color).toString(16);
|
12672
|
+
var cr = parseInt('0x'+rgb.substr(0, 2));
|
12673
|
+
var cg = parseInt('0x'+rgb.substr(2, 2));
|
12674
|
+
var cb = parseInt('0x'+rgb.substr(4, 2));
|
12675
|
+
|
12540
12676
|
for (i = 0; i < iLen; i+=4) {
|
12541
12677
|
|
12542
12678
|
a = data[i+3];
|
12543
12679
|
|
12544
|
-
if (a > 0){
|
12680
|
+
if (a > 0){
|
12545
12681
|
data[i] = cr;
|
12546
12682
|
data[i+1] = cg;
|
12547
12683
|
data[i+2] = cb;
|
@@ -13046,7 +13182,7 @@ fabric.Image.filters.Tint.fromObject = function(object) {
|
|
13046
13182
|
this.fontStyle,
|
13047
13183
|
this.fontWeight,
|
13048
13184
|
this.fontSize + 'px',
|
13049
|
-
this.fontFamily
|
13185
|
+
(fabric.isLikelyNode ? ('"' + this.fontFamily + '"') : this.fontFamily)
|
13050
13186
|
].join(' ');
|
13051
13187
|
},
|
13052
13188
|
|
@@ -13496,4 +13632,4 @@ fabric.Image.filters.Tint.fromObject = function(object) {
|
|
13496
13632
|
fabric.Canvas.prototype.setHeight = fabric.StaticCanvas.prototype.setHeight;
|
13497
13633
|
}
|
13498
13634
|
|
13499
|
-
})();
|
13635
|
+
})();
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fabric-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: railties
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70210922100120 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -24,18 +24,10 @@ dependencies:
|
|
24
24
|
version: '5.0'
|
25
25
|
type: :runtime
|
26
26
|
prerelease: false
|
27
|
-
version_requirements:
|
28
|
-
none: false
|
29
|
-
requirements:
|
30
|
-
- - ! '>='
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: 3.2.0
|
33
|
-
- - <
|
34
|
-
- !ruby/object:Gem::Version
|
35
|
-
version: '5.0'
|
27
|
+
version_requirements: *70210922100120
|
36
28
|
- !ruby/object:Gem::Dependency
|
37
29
|
name: thor
|
38
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirement: &70210922133420 !ruby/object:Gem::Requirement
|
39
31
|
none: false
|
40
32
|
requirements:
|
41
33
|
- - ~>
|
@@ -43,12 +35,7 @@ dependencies:
|
|
43
35
|
version: '0.14'
|
44
36
|
type: :runtime
|
45
37
|
prerelease: false
|
46
|
-
version_requirements:
|
47
|
-
none: false
|
48
|
-
requirements:
|
49
|
-
- - ~>
|
50
|
-
- !ruby/object:Gem::Version
|
51
|
-
version: '0.14'
|
38
|
+
version_requirements: *70210922133420
|
52
39
|
description: This gem provides fabric.js for your Rails 3 application via the asset
|
53
40
|
pipeline.
|
54
41
|
email:
|
@@ -82,9 +69,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
82
69
|
- - ! '>='
|
83
70
|
- !ruby/object:Gem::Version
|
84
71
|
version: '0'
|
85
|
-
segments:
|
86
|
-
- 0
|
87
|
-
hash: -4152026692481514148
|
88
72
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
89
73
|
none: false
|
90
74
|
requirements:
|
@@ -93,8 +77,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
93
77
|
version: 1.3.6
|
94
78
|
requirements: []
|
95
79
|
rubyforge_project: fabric-rails
|
96
|
-
rubygems_version: 1.8.
|
80
|
+
rubygems_version: 1.8.15
|
97
81
|
signing_key:
|
98
82
|
specification_version: 3
|
99
83
|
summary: Easily use fabric.js with Rails 3
|
100
84
|
test_files: []
|
85
|
+
has_rdoc:
|