Skip to content

Commit

Permalink
version 179
Browse files Browse the repository at this point in the history
  • Loading branch information
asturur committed Sep 17, 2017
1 parent 4fab433 commit e984b2f
Show file tree
Hide file tree
Showing 7 changed files with 70 additions and 56 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
**Version 1.7.19**

- Fixed drawing path displacement [#4318](https://github.com/kangax/fabric.js/pull/4318)
- Fixed the flip of images with scale equally [#4313](https://github.com/kangax/fabric.js/pull/4313)
- Improved touch detection [#4302](https://github.com/kangax/fabric.js/pull/4302)

**Version 1.7.18**

- Fixed doubling of subtargets for preserveObjectStacking = true [#4297](https://github.com/kangax/fabric.js/pull/4297)
Expand Down
2 changes: 1 addition & 1 deletion HEADER.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */

var fabric = fabric || { version: "1.7.18" };
var fabric = fabric || { version: "1.7.19" };
if (typeof exports !== 'undefined') {
exports.fabric = fabric;
}
Expand Down
59 changes: 34 additions & 25 deletions dist/fabric.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/* build: `node build.js modules=ALL exclude=json,gestures minifier=uglifyjs` */
/*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */

var fabric = fabric || { version: "1.7.18" };
var fabric = fabric || { version: "1.7.19" };
if (typeof exports !== 'undefined') {
exports.fabric = fabric;
}
Expand Down Expand Up @@ -30,7 +30,8 @@ else {
* True when in environment that supports touch events
* @type boolean
*/
fabric.isTouchSupported = "ontouchstart" in fabric.document.documentElement;

fabric.isTouchSupported = 'ontouchstart' in fabric.window;

/**
* True when in environment that's probably Node.js
Expand Down Expand Up @@ -8123,7 +8124,7 @@ fabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype
* @private
*/
_render: function() {
var ctx = this.canvas.contextTop,
var ctx = this.canvas.contextTop, i, len,
v = this.canvas.viewportTransform,
p1 = this._points[0],
p2 = this._points[1];
Expand All @@ -8137,12 +8138,15 @@ fabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype
//then we should be drawing a dot. A path isn't drawn between two identical dots
//that's why we set them apart a bit
if (this._points.length === 2 && p1.x === p2.x && p1.y === p2.y) {
p1.x -= 0.5;
p2.x += 0.5;
var width = this.width / 1000;
p1 = new fabric.Point(p1.x, p1.y);
p2 = new fabric.Point(p2.x, p2.y);
p1.x -= width;
p2.x += width;
}
ctx.moveTo(p1.x, p1.y);

for (var i = 1, len = this._points.length; i < len; i++) {
for (i = 1, len = this._points.length; i < len; i++) {
// we pick the point between pi + 1 & pi + 2 as the
// end point and p1 as our control point.
var midPoint = p1.midPointFrom(p2);
Expand All @@ -8165,23 +8169,26 @@ fabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype
* @return {String} SVG path
*/
convertPointsToSVGPath: function(points) {
var path = [],
var path = [], i, width = this.width / 1000,
p1 = new fabric.Point(points[0].x, points[0].y),
p2 = new fabric.Point(points[1].x, points[1].y);

path.push('M ', points[0].x, ' ', points[0].y, ' ');
for (var i = 1, len = points.length; i < len; i++) {
var midPoint = p1.midPointFrom(p2);
// p1 is our bezier control point
// midpoint is our endpoint
// start point is p(i-1) value.
path.push('Q ', p1.x, ' ', p1.y, ' ', midPoint.x, ' ', midPoint.y, ' ');
p1 = new fabric.Point(points[i].x, points[i].y);
p2 = new fabric.Point(points[1].x, points[1].y),
len = points.length;

path.push('M ', p1.x - width, ' ', p1.y, ' ');
for (i = 1; i < len; i++) {
if (!p1.eq(p2)) {
var midPoint = p1.midPointFrom(p2);
// p1 is our bezier control point
// midpoint is our endpoint
// start point is p(i-1) value.
path.push('Q ', p1.x, ' ', p1.y, ' ', midPoint.x, ' ', midPoint.y, ' ');
}
p1 = points[i];
if ((i + 1) < points.length) {
p2 = new fabric.Point(points[i + 1].x, points[i + 1].y);
p2 = points[i + 1];
}
}
path.push('L ', p1.x, ' ', p1.y, ' ');
path.push('L ', p1.x + width, ' ', p1.y, ' ');
return path;
},

Expand All @@ -8198,10 +8205,11 @@ fabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype
strokeLineCap: this.strokeLineCap,
strokeLineJoin: this.strokeLineJoin,
strokeDashArray: this.strokeDashArray,
originX: 'center',
originY: 'center'
});

var position = new fabric.Point(path.left + path.width / 2, path.top + path.height / 2);
position = path.translateToGivenOrigin(position, 'center', 'center', path.originX, path.originY);
path.top = position.y;
path.left = position.x;
if (this.shadow) {
this.shadow.affectStroke = true;
path.setShadow(this.shadow);
Expand Down Expand Up @@ -9504,12 +9512,13 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab
var dist = localMouse.y + localMouse.x,
lastDist = _dim.y * transform.original.scaleY / target.scaleY +
_dim.x * transform.original.scaleX / target.scaleX,
scaled;
scaled, signX = localMouse.x / Math.abs(localMouse.x),
signY = localMouse.y / Math.abs(localMouse.y);

// We use transform.scaleX/Y instead of target.scaleX/Y
// because the object may have a min scale and we'll loose the proportions
transform.newScaleX = transform.original.scaleX * dist / lastDist;
transform.newScaleY = transform.original.scaleY * dist / lastDist;
transform.newScaleX = signX * Math.abs(transform.original.scaleX * dist / lastDist);
transform.newScaleY = signY * Math.abs(transform.original.scaleY * dist / lastDist);
scaled = transform.newScaleX !== target.scaleX || transform.newScaleY !== target.scaleY;
target.set('scaleX', transform.newScaleX);
target.set('scaleY', transform.newScaleY);
Expand Down
10 changes: 1 addition & 9 deletions dist/fabric.min.js

Large diffs are not rendered by default.

Binary file modified dist/fabric.min.js.gz
Binary file not shown.
47 changes: 27 additions & 20 deletions dist/fabric.require.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
var fabric = fabric || {
version: "1.7.18"
version: "1.7.19"
};

if (typeof exports !== "undefined") {
Expand All @@ -19,7 +19,7 @@ if (typeof document !== "undefined" && typeof window !== "undefined") {
}
}

fabric.isTouchSupported = "ontouchstart" in fabric.document.documentElement;
fabric.isTouchSupported = "ontouchstart" in fabric.window;

fabric.isLikelyNode = typeof Buffer !== "undefined" && typeof window === "undefined";

Expand Down Expand Up @@ -4078,16 +4078,19 @@ fabric.BaseBrush = fabric.util.createClass({
this._addPoint(pointerPoint);
},
_render: function() {
var ctx = this.canvas.contextTop, v = this.canvas.viewportTransform, p1 = this._points[0], p2 = this._points[1];
var ctx = this.canvas.contextTop, i, len, v = this.canvas.viewportTransform, p1 = this._points[0], p2 = this._points[1];
ctx.save();
ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);
ctx.beginPath();
if (this._points.length === 2 && p1.x === p2.x && p1.y === p2.y) {
p1.x -= .5;
p2.x += .5;
var width = this.width / 1e3;
p1 = new fabric.Point(p1.x, p1.y);
p2 = new fabric.Point(p2.x, p2.y);
p1.x -= width;
p2.x += width;
}
ctx.moveTo(p1.x, p1.y);
for (var i = 1, len = this._points.length; i < len; i++) {
for (i = 1, len = this._points.length; i < len; i++) {
var midPoint = p1.midPointFrom(p2);
ctx.quadraticCurveTo(p1.x, p1.y, midPoint.x, midPoint.y);
p1 = this._points[i];
Expand All @@ -4098,17 +4101,19 @@ fabric.BaseBrush = fabric.util.createClass({
ctx.restore();
},
convertPointsToSVGPath: function(points) {
var path = [], p1 = new fabric.Point(points[0].x, points[0].y), p2 = new fabric.Point(points[1].x, points[1].y);
path.push("M ", points[0].x, " ", points[0].y, " ");
for (var i = 1, len = points.length; i < len; i++) {
var midPoint = p1.midPointFrom(p2);
path.push("Q ", p1.x, " ", p1.y, " ", midPoint.x, " ", midPoint.y, " ");
p1 = new fabric.Point(points[i].x, points[i].y);
var path = [], i, width = this.width / 1e3, p1 = new fabric.Point(points[0].x, points[0].y), p2 = new fabric.Point(points[1].x, points[1].y), len = points.length;
path.push("M ", p1.x - width, " ", p1.y, " ");
for (i = 1; i < len; i++) {
if (!p1.eq(p2)) {
var midPoint = p1.midPointFrom(p2);
path.push("Q ", p1.x, " ", p1.y, " ", midPoint.x, " ", midPoint.y, " ");
}
p1 = points[i];
if (i + 1 < points.length) {
p2 = new fabric.Point(points[i + 1].x, points[i + 1].y);
p2 = points[i + 1];
}
}
path.push("L ", p1.x, " ", p1.y, " ");
path.push("L ", p1.x + width, " ", p1.y, " ");
return path;
},
createPath: function(pathData) {
Expand All @@ -4118,10 +4123,12 @@ fabric.BaseBrush = fabric.util.createClass({
strokeWidth: this.width,
strokeLineCap: this.strokeLineCap,
strokeLineJoin: this.strokeLineJoin,
strokeDashArray: this.strokeDashArray,
originX: "center",
originY: "center"
strokeDashArray: this.strokeDashArray
});
var position = new fabric.Point(path.left + path.width / 2, path.top + path.height / 2);
position = path.translateToGivenOrigin(position, "center", "center", path.originX, path.originY);
path.top = position.y;
path.left = position.x;
if (this.shadow) {
this.shadow.affectStroke = true;
path.setShadow(this.shadow);
Expand Down Expand Up @@ -4724,9 +4731,9 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, {
return scaled;
},
_scaleObjectEqually: function(localMouse, target, transform, _dim) {
var dist = localMouse.y + localMouse.x, lastDist = _dim.y * transform.original.scaleY / target.scaleY + _dim.x * transform.original.scaleX / target.scaleX, scaled;
transform.newScaleX = transform.original.scaleX * dist / lastDist;
transform.newScaleY = transform.original.scaleY * dist / lastDist;
var dist = localMouse.y + localMouse.x, lastDist = _dim.y * transform.original.scaleY / target.scaleY + _dim.x * transform.original.scaleX / target.scaleX, scaled, signX = localMouse.x / Math.abs(localMouse.x), signY = localMouse.y / Math.abs(localMouse.y);
transform.newScaleX = signX * Math.abs(transform.original.scaleX * dist / lastDist);
transform.newScaleY = signY * Math.abs(transform.original.scaleY * dist / lastDist);
scaled = transform.newScaleX !== target.scaleX || transform.newScaleY !== target.scaleY;
target.set("scaleX", transform.newScaleX);
target.set("scaleY", transform.newScaleY);
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "fabric",
"description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.",
"homepage": "http://fabricjs.com/",
"version": "1.7.18",
"version": "1.7.19",
"author": "Juriy Zaytsev <[email protected]>",
"contributors": [
{
Expand Down

0 comments on commit e984b2f

Please sign in to comment.