fabric-rails 0.0.6 → 0.0.7
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 +4 -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 +250 -78
- 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.7)
|
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.9.
|
4
|
+
var fabric = fabric || { version: "0.9.5" };
|
5
5
|
|
6
6
|
if (typeof exports != 'undefined') {
|
7
7
|
exports.fabric = fabric;
|
@@ -1984,14 +1984,17 @@ fabric.Observable.off = fabric.Observable.stopObserving;
|
|
1984
1984
|
return fabric[fabric.util.string.camelize(fabric.util.string.capitalize(type))];
|
1985
1985
|
}
|
1986
1986
|
|
1987
|
-
|
1988
|
-
|
1989
|
-
|
1990
|
-
|
1991
|
-
|
1992
|
-
|
1987
|
+
function onLoaded() {
|
1988
|
+
if (++numLoadedObjects === numTotalObjects) {
|
1989
|
+
if (callback) {
|
1990
|
+
callback(enlivenedObjects);
|
1991
|
+
}
|
1992
|
+
}
|
1993
|
+
}
|
1993
1994
|
|
1994
|
-
var
|
1995
|
+
var enlivenedObjects = [ ],
|
1996
|
+
numLoadedObjects = 0,
|
1997
|
+
numTotalObjects = objects.length;
|
1995
1998
|
|
1996
1999
|
objects.forEach(function (o, index) {
|
1997
2000
|
if (!o.type) {
|
@@ -2001,21 +2004,14 @@ fabric.Observable.off = fabric.Observable.stopObserving;
|
|
2001
2004
|
if (klass.async) {
|
2002
2005
|
klass.fromObject(o, function (o) {
|
2003
2006
|
enlivenedObjects[index] = o;
|
2004
|
-
|
2005
|
-
if (callback) {
|
2006
|
-
callback(enlivenedObjects);
|
2007
|
-
}
|
2008
|
-
}
|
2007
|
+
onLoaded();
|
2009
2008
|
});
|
2010
2009
|
}
|
2011
2010
|
else {
|
2012
2011
|
enlivenedObjects[index] = klass.fromObject(o);
|
2012
|
+
onLoaded();
|
2013
2013
|
}
|
2014
2014
|
});
|
2015
|
-
|
2016
|
-
if (numTotalAsyncObjects === 0 && callback) {
|
2017
|
-
callback(enlivenedObjects);
|
2018
|
-
}
|
2019
2015
|
}
|
2020
2016
|
|
2021
2017
|
function groupSVGElements(elements, options, path) {
|
@@ -4957,6 +4953,13 @@ fabric.util.string = {
|
|
4957
4953
|
*/
|
4958
4954
|
clipTo: null,
|
4959
4955
|
|
4956
|
+
/**
|
4957
|
+
* Indicates whether object controls (borders/corners) are rendered above overlay image
|
4958
|
+
* @property
|
4959
|
+
* @type Boolean
|
4960
|
+
*/
|
4961
|
+
controlsAboveOverlay: false,
|
4962
|
+
|
4960
4963
|
/**
|
4961
4964
|
* Callback; invoked right before object is about to be scaled/rotated
|
4962
4965
|
* @method onBeforeScaleRotate
|
@@ -5212,7 +5215,18 @@ fabric.util.string = {
|
|
5212
5215
|
* @private
|
5213
5216
|
*/
|
5214
5217
|
_draw: function (ctx, object) {
|
5215
|
-
|
5218
|
+
if (!object) return;
|
5219
|
+
|
5220
|
+
if (this.controlsAboveOverlay) {
|
5221
|
+
var hasBorders = object.hasBorders, hasCorners = object.hasCorners;
|
5222
|
+
object.hasBorders = object.hasCorners = false;
|
5223
|
+
object.render(ctx);
|
5224
|
+
object.hasBorders = hasBorders;
|
5225
|
+
object.hasCorners = hasCorners;
|
5226
|
+
}
|
5227
|
+
else {
|
5228
|
+
object.render(ctx);
|
5229
|
+
}
|
5216
5230
|
},
|
5217
5231
|
|
5218
5232
|
/**
|
@@ -5375,7 +5389,11 @@ fabric.util.string = {
|
|
5375
5389
|
}
|
5376
5390
|
|
5377
5391
|
if (this.overlayImage) {
|
5378
|
-
|
5392
|
+
this.contextContainer.drawImage(this.overlayImage, 0, 0);
|
5393
|
+
}
|
5394
|
+
|
5395
|
+
if (this.controlsAboveOverlay) {
|
5396
|
+
this.drawControls(this.contextContainer);
|
5379
5397
|
}
|
5380
5398
|
|
5381
5399
|
if (this.onFpsUpdate) {
|
@@ -5399,7 +5417,7 @@ fabric.util.string = {
|
|
5399
5417
|
this.clearContext(this.contextTop || this.contextContainer);
|
5400
5418
|
|
5401
5419
|
if (this.overlayImage) {
|
5402
|
-
|
5420
|
+
this.contextContainer.drawImage(this.overlayImage, 0, 0);
|
5403
5421
|
}
|
5404
5422
|
|
5405
5423
|
// we render the top context - last object
|
@@ -5419,6 +5437,31 @@ fabric.util.string = {
|
|
5419
5437
|
return this;
|
5420
5438
|
},
|
5421
5439
|
|
5440
|
+
/**
|
5441
|
+
* Draws objects' controls (borders/corners)
|
5442
|
+
* @method drawControls
|
5443
|
+
* @param {Object} ctx context to render controls on
|
5444
|
+
*/
|
5445
|
+
drawControls: function(ctx) {
|
5446
|
+
var activeGroup = this.getActiveGroup();
|
5447
|
+
if (activeGroup) {
|
5448
|
+
ctx.save();
|
5449
|
+
fabric.Group.prototype.transform.call(activeGroup, ctx);
|
5450
|
+
activeGroup.drawBorders(ctx).drawCorners(ctx);
|
5451
|
+
ctx.restore();
|
5452
|
+
}
|
5453
|
+
else {
|
5454
|
+
for (var i = 0, len = this._objects.length; i < len; ++i) {
|
5455
|
+
if (!this._objects[i].active) continue;
|
5456
|
+
|
5457
|
+
ctx.save();
|
5458
|
+
fabric.Object.prototype.transform.call(this._objects[i], ctx);
|
5459
|
+
this._objects[i].drawBorders(ctx).drawCorners(ctx);
|
5460
|
+
ctx.restore();
|
5461
|
+
}
|
5462
|
+
}
|
5463
|
+
},
|
5464
|
+
|
5422
5465
|
/**
|
5423
5466
|
* Exports canvas element to a dataurl image.
|
5424
5467
|
* @method toDataURL
|
@@ -6502,7 +6545,7 @@ fabric.util.string = {
|
|
6502
6545
|
ey: pointer.y,
|
6503
6546
|
left: target.left,
|
6504
6547
|
top: target.top,
|
6505
|
-
theta: target.
|
6548
|
+
theta: target._theta,
|
6506
6549
|
width: target.width * target.scaleX
|
6507
6550
|
};
|
6508
6551
|
|
@@ -6705,7 +6748,7 @@ fabric.util.string = {
|
|
6705
6748
|
var lastAngle = atan2(t.ey - t.top - o.top, t.ex - t.left - o.left),
|
6706
6749
|
curAngle = atan2(y - t.top - o.top, x - t.left - o.left);
|
6707
6750
|
|
6708
|
-
t.target.
|
6751
|
+
t.target._theta = (curAngle - lastAngle) + t.theta;
|
6709
6752
|
},
|
6710
6753
|
|
6711
6754
|
/**
|
@@ -7486,58 +7529,141 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, {
|
|
7486
7529
|
|
7487
7530
|
/**
|
7488
7531
|
* @property
|
7489
|
-
* @type
|
7532
|
+
* @type Number
|
7490
7533
|
*/
|
7491
|
-
|
7534
|
+
top: 0,
|
7492
7535
|
|
7493
7536
|
/**
|
7494
|
-
* @
|
7537
|
+
* @property
|
7495
7538
|
* @type Number
|
7496
7539
|
*/
|
7497
|
-
|
7540
|
+
left: 0,
|
7498
7541
|
|
7499
7542
|
/**
|
7500
|
-
* @
|
7543
|
+
* @property
|
7501
7544
|
* @type Number
|
7502
7545
|
*/
|
7503
|
-
|
7546
|
+
width: 0,
|
7504
7547
|
|
7505
7548
|
/**
|
7506
|
-
* List of properties to consider when checking if state of an object is changed (fabric.Object#hasStateChanged);
|
7507
|
-
* as well as for history (undo/redo) purposes
|
7508
7549
|
* @property
|
7509
|
-
* @type
|
7550
|
+
* @type Number
|
7510
7551
|
*/
|
7511
|
-
stateProperties: (
|
7512
|
-
'top left width height scaleX scaleY flipX flipY ' +
|
7513
|
-
'theta angle opacity cornersize fill overlayFill ' +
|
7514
|
-
'stroke strokeWidth strokeDashArray fillRule ' +
|
7515
|
-
'borderScaleFactor transformMatrix selectable'
|
7516
|
-
).split(' '),
|
7517
|
-
|
7518
|
-
top: 0,
|
7519
|
-
left: 0,
|
7520
|
-
width: 0,
|
7521
7552
|
height: 0,
|
7553
|
+
|
7554
|
+
/**
|
7555
|
+
* @property
|
7556
|
+
* @type Number
|
7557
|
+
*/
|
7522
7558
|
scaleX: 1,
|
7559
|
+
|
7560
|
+
/**
|
7561
|
+
* @property
|
7562
|
+
* @type Number
|
7563
|
+
*/
|
7523
7564
|
scaleY: 1,
|
7565
|
+
|
7566
|
+
/**
|
7567
|
+
* @property
|
7568
|
+
* @type Boolean
|
7569
|
+
*/
|
7524
7570
|
flipX: false,
|
7571
|
+
|
7572
|
+
/**
|
7573
|
+
* @property
|
7574
|
+
* @type Boolean
|
7575
|
+
*/
|
7525
7576
|
flipY: false,
|
7526
|
-
|
7577
|
+
|
7578
|
+
/**
|
7579
|
+
* @property
|
7580
|
+
* @type Number
|
7581
|
+
*/
|
7527
7582
|
opacity: 1,
|
7583
|
+
|
7584
|
+
/**
|
7585
|
+
* @property
|
7586
|
+
* @type Number
|
7587
|
+
*/
|
7528
7588
|
angle: 0,
|
7589
|
+
|
7590
|
+
/**
|
7591
|
+
* @property
|
7592
|
+
* @type Number
|
7593
|
+
*/
|
7529
7594
|
cornersize: 12,
|
7595
|
+
|
7596
|
+
/**
|
7597
|
+
* @property
|
7598
|
+
* @type Number
|
7599
|
+
*/
|
7530
7600
|
padding: 0,
|
7601
|
+
|
7602
|
+
/**
|
7603
|
+
* @property
|
7604
|
+
* @type String
|
7605
|
+
*/
|
7531
7606
|
borderColor: 'rgba(102,153,255,0.75)',
|
7607
|
+
|
7608
|
+
/**
|
7609
|
+
* @property
|
7610
|
+
* @type String
|
7611
|
+
*/
|
7532
7612
|
cornerColor: 'rgba(102,153,255,0.5)',
|
7613
|
+
|
7614
|
+
/**
|
7615
|
+
* @property
|
7616
|
+
* @type String
|
7617
|
+
*/
|
7533
7618
|
fill: 'rgb(0,0,0)',
|
7619
|
+
|
7620
|
+
/**
|
7621
|
+
* @property
|
7622
|
+
* @type String
|
7623
|
+
*/
|
7534
7624
|
fillRule: 'source-over',
|
7625
|
+
|
7626
|
+
/**
|
7627
|
+
* @property
|
7628
|
+
* @type String
|
7629
|
+
*/
|
7535
7630
|
overlayFill: null,
|
7631
|
+
|
7632
|
+
/**
|
7633
|
+
* @property
|
7634
|
+
* @type String
|
7635
|
+
*/
|
7536
7636
|
stroke: null,
|
7637
|
+
|
7638
|
+
/**
|
7639
|
+
* @property
|
7640
|
+
* @type Number
|
7641
|
+
*/
|
7537
7642
|
strokeWidth: 1,
|
7643
|
+
|
7644
|
+
/**
|
7645
|
+
* @property
|
7646
|
+
* @type Array
|
7647
|
+
*/
|
7538
7648
|
strokeDashArray: null,
|
7649
|
+
|
7650
|
+
/**
|
7651
|
+
* @property
|
7652
|
+
* @type Number
|
7653
|
+
*/
|
7539
7654
|
borderOpacityWhenMoving: 0.4,
|
7655
|
+
|
7656
|
+
/**
|
7657
|
+
* @property
|
7658
|
+
* @type Number
|
7659
|
+
*/
|
7540
7660
|
borderScaleFactor: 1,
|
7661
|
+
|
7662
|
+
/**
|
7663
|
+
* Transform matrix
|
7664
|
+
* @property
|
7665
|
+
* @type Array
|
7666
|
+
*/
|
7541
7667
|
transformMatrix: null,
|
7542
7668
|
|
7543
7669
|
/**
|
@@ -7575,6 +7701,28 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, {
|
|
7575
7701
|
*/
|
7576
7702
|
rotatingPointOffset: 40,
|
7577
7703
|
|
7704
|
+
/**
|
7705
|
+
* @private
|
7706
|
+
* @property
|
7707
|
+
* @type Number
|
7708
|
+
*/
|
7709
|
+
_theta: 0,
|
7710
|
+
|
7711
|
+
includeDefaultValues: true,
|
7712
|
+
|
7713
|
+
/**
|
7714
|
+
* List of properties to consider when checking if state of an object is changed (fabric.Object#hasStateChanged);
|
7715
|
+
* as well as for history (undo/redo) purposes
|
7716
|
+
* @property
|
7717
|
+
* @type Array
|
7718
|
+
*/
|
7719
|
+
stateProperties: (
|
7720
|
+
'top left width height scaleX scaleY flipX flipY ' +
|
7721
|
+
'theta angle opacity cornersize fill overlayFill ' +
|
7722
|
+
'stroke strokeWidth strokeDashArray fillRule ' +
|
7723
|
+
'borderScaleFactor transformMatrix selectable'
|
7724
|
+
).split(' '),
|
7725
|
+
|
7578
7726
|
/**
|
7579
7727
|
* @method callSuper
|
7580
7728
|
* @param {String} methodName
|
@@ -7628,7 +7776,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, {
|
|
7628
7776
|
transform: function(ctx) {
|
7629
7777
|
ctx.globalAlpha = this.opacity;
|
7630
7778
|
ctx.translate(this.left, this.top);
|
7631
|
-
ctx.rotate(this.
|
7779
|
+
ctx.rotate(this._theta);
|
7632
7780
|
ctx.scale(
|
7633
7781
|
this.scaleX * (this.flipX ? -1 : 1),
|
7634
7782
|
this.scaleY * (this.flipY ? -1 : 1)
|
@@ -7642,23 +7790,25 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, {
|
|
7642
7790
|
*/
|
7643
7791
|
toObject: function() {
|
7644
7792
|
|
7793
|
+
var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS;
|
7794
|
+
|
7645
7795
|
var object = {
|
7646
7796
|
type: this.type,
|
7647
|
-
left: toFixed(this.left,
|
7648
|
-
top: toFixed(this.top,
|
7649
|
-
width: toFixed(this.width,
|
7650
|
-
height: toFixed(this.height,
|
7797
|
+
left: toFixed(this.left, NUM_FRACTION_DIGITS),
|
7798
|
+
top: toFixed(this.top, NUM_FRACTION_DIGITS),
|
7799
|
+
width: toFixed(this.width, NUM_FRACTION_DIGITS),
|
7800
|
+
height: toFixed(this.height, NUM_FRACTION_DIGITS),
|
7651
7801
|
fill: (this.fill && this.fill.toObject) ? this.fill.toObject() : this.fill,
|
7652
7802
|
overlayFill: this.overlayFill,
|
7653
7803
|
stroke: this.stroke,
|
7654
7804
|
strokeWidth: this.strokeWidth,
|
7655
7805
|
strokeDashArray: this.strokeDashArray,
|
7656
|
-
scaleX: toFixed(this.scaleX,
|
7657
|
-
scaleY: toFixed(this.scaleY,
|
7658
|
-
angle: toFixed(this.getAngle(),
|
7806
|
+
scaleX: toFixed(this.scaleX, NUM_FRACTION_DIGITS),
|
7807
|
+
scaleY: toFixed(this.scaleY, NUM_FRACTION_DIGITS),
|
7808
|
+
angle: toFixed(this.getAngle(), NUM_FRACTION_DIGITS),
|
7659
7809
|
flipX: this.flipX,
|
7660
7810
|
flipY: this.flipY,
|
7661
|
-
opacity: toFixed(this.opacity,
|
7811
|
+
opacity: toFixed(this.opacity, NUM_FRACTION_DIGITS),
|
7662
7812
|
selectable: this.selectable,
|
7663
7813
|
hasControls: this.hasControls,
|
7664
7814
|
hasBorders: this.hasBorders,
|
@@ -7780,10 +7930,10 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, {
|
|
7780
7930
|
|
7781
7931
|
_set: function(key, value) {
|
7782
7932
|
var shouldConstrainValue = (key === 'scaleX' || key === 'scaleY') &&
|
7783
|
-
value <
|
7933
|
+
value < fabric.Object.MIN_SCALE_LIMIT;
|
7784
7934
|
|
7785
7935
|
if (shouldConstrainValue) {
|
7786
|
-
value =
|
7936
|
+
value = fabric.Object.MIN_SCALE_LIMIT;
|
7787
7937
|
}
|
7788
7938
|
if (key === 'angle') {
|
7789
7939
|
this.setAngle(value);
|
@@ -7962,7 +8112,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, {
|
|
7962
8112
|
* @return {Number} angle value
|
7963
8113
|
*/
|
7964
8114
|
getAngle: function() {
|
7965
|
-
return this.
|
8115
|
+
return this._theta * 180 / Math.PI;
|
7966
8116
|
},
|
7967
8117
|
|
7968
8118
|
/**
|
@@ -7972,7 +8122,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, {
|
|
7972
8122
|
* @return {Object} thisArg
|
7973
8123
|
*/
|
7974
8124
|
setAngle: function(value) {
|
7975
|
-
this.
|
8125
|
+
this._theta = value / 180 * Math.PI;
|
7976
8126
|
this.angle = value;
|
7977
8127
|
return this;
|
7978
8128
|
},
|
@@ -7985,8 +8135,10 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, {
|
|
7985
8135
|
*/
|
7986
8136
|
setCoords: function() {
|
7987
8137
|
|
7988
|
-
|
7989
|
-
|
8138
|
+
var strokeWidth = this.strokeWidth > 1 ? this.strokeWidth : 0;
|
8139
|
+
|
8140
|
+
this.currentWidth = (this.width + strokeWidth) * this.scaleX;
|
8141
|
+
this.currentHeight = (this.height + strokeWidth) * this.scaleY;
|
7990
8142
|
|
7991
8143
|
this._hypotenuse = Math.sqrt(
|
7992
8144
|
Math.pow(this.currentWidth / 2, 2) +
|
@@ -7995,9 +8147,9 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, {
|
|
7995
8147
|
this._angle = Math.atan(this.currentHeight / this.currentWidth);
|
7996
8148
|
|
7997
8149
|
// offset added for rotate and scale actions
|
7998
|
-
var offsetX = Math.cos(this._angle + this.
|
7999
|
-
offsetY = Math.sin(this._angle + this.
|
8000
|
-
theta = this.
|
8150
|
+
var offsetX = Math.cos(this._angle + this._theta) * this._hypotenuse,
|
8151
|
+
offsetY = Math.sin(this._angle + this._theta) * this._hypotenuse,
|
8152
|
+
theta = this._theta,
|
8001
8153
|
sinTh = Math.sin(theta),
|
8002
8154
|
cosTh = Math.cos(theta);
|
8003
8155
|
|
@@ -8097,15 +8249,17 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, {
|
|
8097
8249
|
drawBorders: function(ctx) {
|
8098
8250
|
if (!this.hasBorders) return;
|
8099
8251
|
|
8100
|
-
var padding2 = this.padding * 2
|
8252
|
+
var padding2 = this.padding * 2,
|
8253
|
+
MIN_SCALE_LIMIT = fabric.Object.MIN_SCALE_LIMIT,
|
8254
|
+
strokeWidth = this.strokeWidth > 1 ? this.strokeWidth : 0;
|
8101
8255
|
|
8102
8256
|
ctx.save();
|
8103
8257
|
|
8104
8258
|
ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;
|
8105
8259
|
ctx.strokeStyle = this.borderColor;
|
8106
8260
|
|
8107
|
-
var scaleX = 1 / (this.scaleX <
|
8108
|
-
scaleY = 1 / (this.scaleY <
|
8261
|
+
var scaleX = 1 / (this.scaleX < MIN_SCALE_LIMIT ? MIN_SCALE_LIMIT : this.scaleX),
|
8262
|
+
scaleY = 1 / (this.scaleY < MIN_SCALE_LIMIT ? MIN_SCALE_LIMIT : this.scaleY);
|
8109
8263
|
|
8110
8264
|
ctx.lineWidth = 1 / this.borderScaleFactor;
|
8111
8265
|
|
@@ -8115,14 +8269,14 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, {
|
|
8115
8269
|
h = this.getHeight();
|
8116
8270
|
|
8117
8271
|
ctx.strokeRect(
|
8118
|
-
~~(-(w / 2) - this.padding -
|
8119
|
-
~~(-(h / 2) - this.padding -
|
8120
|
-
~~(w + padding2 +
|
8121
|
-
~~(h + padding2 +
|
8272
|
+
~~(-(w / 2) - this.padding - strokeWidth / 2 * this.scaleX) + 0.5, // offset needed to make lines look sharper
|
8273
|
+
~~(-(h / 2) - this.padding - strokeWidth / 2 * this.scaleY) + 0.5,
|
8274
|
+
~~(w + padding2 + strokeWidth * this.scaleX),
|
8275
|
+
~~(h + padding2 + strokeWidth * this.scaleY)
|
8122
8276
|
);
|
8123
8277
|
|
8124
8278
|
if (this.hasRotatingPoint && !this.hideCorners && !this.lockRotation) {
|
8125
|
-
var rotateHeight = (this.flipY ? h : -h) / 2;
|
8279
|
+
var rotateHeight = (this.flipY ? h + strokeWidth * this.scaleY : -h - strokeWidth * this.scaleY) / 2;
|
8126
8280
|
var rotateWidth = (-w/2);
|
8127
8281
|
|
8128
8282
|
ctx.beginPath();
|
@@ -8280,7 +8434,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, {
|
|
8280
8434
|
_left = left + this.width/2 - scaleOffsetX;
|
8281
8435
|
|
8282
8436
|
_top = this.flipY ?
|
8283
|
-
(top + height + (this.rotatingPointOffset / this.scaleY) - sizeY/2
|
8437
|
+
(top + height + (this.rotatingPointOffset / this.scaleY) - sizeY/2 + strokeWidth2)
|
8284
8438
|
: (top - (this.rotatingPointOffset / this.scaleY) - sizeY/2 - strokeWidth2);
|
8285
8439
|
|
8286
8440
|
ctx.fillRect(_left, _top, sizeX, sizeY);
|
@@ -8635,8 +8789,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, {
|
|
8635
8789
|
cornerHypotenuse = Math.sqrt(2 * Math.pow(this.cornersize, 2)) / 2,
|
8636
8790
|
cosHalfOffset = cornerHypotenuse * Math.cos(theta),
|
8637
8791
|
sinHalfOffset = cornerHypotenuse * Math.sin(theta),
|
8638
|
-
sinTh = Math.sin(this.
|
8639
|
-
cosTh = Math.cos(this.
|
8792
|
+
sinTh = Math.sin(this._theta),
|
8793
|
+
cosTh = Math.cos(this._theta);
|
8640
8794
|
|
8641
8795
|
coords.tl.corner = {
|
8642
8796
|
tl: {
|
@@ -8989,6 +9143,24 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, {
|
|
8989
9143
|
|
8990
9144
|
extend(fabric.Object.prototype, fabric.Observable);
|
8991
9145
|
|
9146
|
+
extend(fabric.Object, {
|
9147
|
+
|
9148
|
+
/**
|
9149
|
+
* @static
|
9150
|
+
* @constant
|
9151
|
+
* @type Number
|
9152
|
+
*/
|
9153
|
+
NUM_FRACTION_DIGITS: 2,
|
9154
|
+
|
9155
|
+
/**
|
9156
|
+
* @static
|
9157
|
+
* @constant
|
9158
|
+
* @type Number
|
9159
|
+
*/
|
9160
|
+
MIN_SCALE_LIMIT: 0.1
|
9161
|
+
|
9162
|
+
});
|
9163
|
+
|
8992
9164
|
})(typeof exports != 'undefined' ? exports : this);
|
8993
9165
|
|
8994
9166
|
(function(global) {
|
@@ -10023,8 +10195,9 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, {
|
|
10023
10195
|
maxX = max(points, 'x'),
|
10024
10196
|
maxY = max(points, 'y');
|
10025
10197
|
|
10026
|
-
this.width = maxX - minX;
|
10027
|
-
this.height = maxY - minY;
|
10198
|
+
this.width = (maxX - minX) || 1;
|
10199
|
+
this.height = (maxY - minY) || 1;
|
10200
|
+
|
10028
10201
|
this.minX = minX;
|
10029
10202
|
this.minY = minY;
|
10030
10203
|
},
|
@@ -10852,8 +11025,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, {
|
|
10852
11025
|
var minX = min(aX),
|
10853
11026
|
minY = min(aY),
|
10854
11027
|
deltaX = 0,
|
10855
|
-
deltaY = 0
|
10856
|
-
strokeWidthOffset = this.strokeWidth > 1 ? (this.strokeWidth * 2) : 0;
|
11028
|
+
deltaY = 0;
|
10857
11029
|
|
10858
11030
|
var o = {
|
10859
11031
|
top: minY - deltaY,
|
@@ -10862,8 +11034,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, {
|
|
10862
11034
|
right: max(aX) - deltaX
|
10863
11035
|
};
|
10864
11036
|
|
10865
|
-
o.width = o.right - o.left
|
10866
|
-
o.height = o.bottom - o.top
|
11037
|
+
o.width = o.right - o.left;
|
11038
|
+
o.height = o.bottom - o.top;
|
10867
11039
|
|
10868
11040
|
return o;
|
10869
11041
|
}
|
@@ -13611,4 +13783,4 @@ fabric.Image.filters.Tint.fromObject = function(object) {
|
|
13611
13783
|
fabric.Canvas.prototype.setHeight = fabric.StaticCanvas.prototype.setHeight;
|
13612
13784
|
}
|
13613
13785
|
|
13614
|
-
})();
|
13786
|
+
})();
|
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.7
|
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-
|
12
|
+
date: 2012-09-04 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: &70255214594200 !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: *70255214594200
|
36
28
|
- !ruby/object:Gem::Dependency
|
37
29
|
name: thor
|
38
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirement: &70255214627500 !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: *70255214627500
|
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: -240717121770573638
|
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:
|