mirror of
https://github.com/Hopiu/fabric.js.git
synced 2026-05-03 03:24:42 +00:00
Build distribution. Version 1.1.13
This commit is contained in:
parent
2b6b64dd02
commit
8c8f91a444
5 changed files with 133 additions and 128 deletions
|
|
@ -1,6 +1,6 @@
|
|||
/*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */
|
||||
|
||||
var fabric = fabric || { version: "1.1.12" };
|
||||
var fabric = fabric || { version: "1.1.13" };
|
||||
|
||||
if (typeof exports !== 'undefined') {
|
||||
exports.fabric = fabric;
|
||||
|
|
|
|||
247
dist/all.js
vendored
247
dist/all.js
vendored
|
|
@ -1,7 +1,7 @@
|
|||
/* build: `node build.js modules=ALL exclude=gestures` */
|
||||
/*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */
|
||||
|
||||
var fabric = fabric || { version: "1.1.12" };
|
||||
var fabric = fabric || { version: "1.1.13" };
|
||||
|
||||
if (typeof exports !== 'undefined') {
|
||||
exports.fabric = fabric;
|
||||
|
|
@ -8036,23 +8036,11 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab
|
|||
*/
|
||||
containsPoint: function (e, target) {
|
||||
var pointer = this.getPointer(e),
|
||||
xy = this._normalizePointer(target, pointer),
|
||||
x = xy.x,
|
||||
y = xy.y;
|
||||
xy = this._normalizePointer(target, pointer);
|
||||
|
||||
// http://www.geog.ubc.ca/courses/klink/gis.notes/ncgia/u32.html
|
||||
// http://idav.ucdavis.edu/~okreylos/TAship/Spring2000/PointInPolygon.html
|
||||
|
||||
// we iterate through each object. If target found, return it.
|
||||
var iLines = target._getImageLines(target.oCoords),
|
||||
xpoints = target._findCrossPoints(x, y, iLines);
|
||||
|
||||
// if xcount is odd then we clicked inside the object
|
||||
// For the specific case of square images xcount === 1 in all true cases
|
||||
if ((xpoints && xpoints % 2 === 1) || target._findTargetCorner(e, this._offset)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
return (target.containsPoint(xy) || target._findTargetCorner(e, this._offset));
|
||||
},
|
||||
|
||||
/**
|
||||
|
|
@ -8502,7 +8490,9 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab
|
|||
if (!currentObject) continue;
|
||||
|
||||
if (currentObject.intersectsWithRect(selectionX1Y1, selectionX2Y2) ||
|
||||
currentObject.isContainedWithinRect(selectionX1Y1, selectionX2Y2)) {
|
||||
currentObject.isContainedWithinRect(selectionX1Y1, selectionX2Y2) ||
|
||||
currentObject.containsPoint(selectionX1Y1) ||
|
||||
currentObject.containsPoint(selectionX2Y2)) {
|
||||
|
||||
if (this.selection && currentObject.selectable) {
|
||||
currentObject.set('active', true);
|
||||
|
|
@ -10998,12 +10988,12 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati
|
|||
fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {
|
||||
|
||||
/**
|
||||
* Returns true if object intersects with an area formed by 2 points
|
||||
* @param {Object} selectionTL
|
||||
* @param {Object} selectionBR
|
||||
* @return {Boolean}
|
||||
* Checks if object intersects with an area formed by 2 points
|
||||
* @param {Object} pointTL top-left point of area
|
||||
* @param {Object} pointBR bottom-right point of area
|
||||
* @return {Boolean} true if object intersects with an area formed by 2 points
|
||||
*/
|
||||
intersectsWithRect: function(selectionTL, selectionBR) {
|
||||
intersectsWithRect: function(pointTL, pointBR) {
|
||||
var oCoords = this.oCoords,
|
||||
tl = new fabric.Point(oCoords.tl.x, oCoords.tl.y),
|
||||
tr = new fabric.Point(oCoords.tr.x, oCoords.tr.y),
|
||||
|
|
@ -11012,16 +11002,16 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati
|
|||
|
||||
var intersection = fabric.Intersection.intersectPolygonRectangle(
|
||||
[tl, tr, br, bl],
|
||||
selectionTL,
|
||||
selectionBR
|
||||
pointTL,
|
||||
pointBR
|
||||
);
|
||||
return intersection.status === 'Intersection';
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns true if object intersects with another object
|
||||
* Checks if object intersects with another object
|
||||
* @param {Object} other Object to test
|
||||
* @return {Boolean}
|
||||
* @return {Boolean} true if object intersects with another object
|
||||
*/
|
||||
intersectsWithObject: function(other) {
|
||||
// extracts coords
|
||||
|
|
@ -11045,30 +11035,121 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati
|
|||
},
|
||||
|
||||
/**
|
||||
* Returns true if object is fully contained within area of another object
|
||||
* Checks if object is fully contained within area of another object
|
||||
* @param {Object} other Object to test
|
||||
* @return {Boolean}
|
||||
* @return {Boolean} true if object is fully contained within area of another object
|
||||
*/
|
||||
isContainedWithinObject: function(other) {
|
||||
return this.isContainedWithinRect(other.oCoords.tl, other.oCoords.br);
|
||||
var boundingRect = other.getBoundingRect(),
|
||||
point1 = new fabric.Point(boundingRect.left, boundingRect.top),
|
||||
point2 = new fabric.Point(boundingRect.left + boundingRect.width, boundingRect.top + boundingRect.height);
|
||||
|
||||
return this.isContainedWithinRect(point1, point2);
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns true if object is fully contained within area formed by 2 points
|
||||
* @param {Object} selectionTL
|
||||
* @param {Object} selectionBR
|
||||
* @return {Boolean}
|
||||
* Checks if object is fully contained within area formed by 2 points
|
||||
* @param {Object} pointTL top-left point of area
|
||||
* @param {Object} pointBR bottom-right point of area
|
||||
* @return {Boolean} true if object is fully contained within area formed by 2 points
|
||||
*/
|
||||
isContainedWithinRect: function(selectionTL, selectionBR) {
|
||||
var oCoords = this.oCoords,
|
||||
tl = new fabric.Point(oCoords.tl.x, oCoords.tl.y),
|
||||
tr = new fabric.Point(oCoords.tr.x, oCoords.tr.y),
|
||||
bl = new fabric.Point(oCoords.bl.x, oCoords.bl.y);
|
||||
isContainedWithinRect: function(pointTL, pointBR) {
|
||||
var boundingRect = this.getBoundingRect();
|
||||
|
||||
return tl.x > selectionTL.x
|
||||
&& tr.x < selectionBR.x
|
||||
&& tl.y > selectionTL.y
|
||||
&& bl.y < selectionBR.y;
|
||||
return (
|
||||
boundingRect.left > pointTL.x &&
|
||||
boundingRect.left + boundingRect.width < pointBR.x &&
|
||||
boundingRect.top > pointTL.y &&
|
||||
boundingRect.top + boundingRect.height < pointBR.y
|
||||
);
|
||||
},
|
||||
|
||||
/**
|
||||
* Checks if point is inside the object
|
||||
* @param {Object} point
|
||||
* @return {Boolean} true if point is inside the object
|
||||
*/
|
||||
containsPoint: function(point) {
|
||||
var lines = this._getImageLines(this.oCoords),
|
||||
xPoints = this._findCrossPoints(point, lines);
|
||||
|
||||
// if xPoints is odd then point is inside the object
|
||||
return (xPoints !== 0 && xPoints % 2 === 1);
|
||||
},
|
||||
|
||||
/**
|
||||
* Method that returns an object with the object edges in it, given the coordinates of the corners
|
||||
* @private
|
||||
* @param {Object} oCoords Coordinates of the object corners
|
||||
*/
|
||||
_getImageLines: function(oCoords) {
|
||||
return {
|
||||
topline: {
|
||||
o: oCoords.tl,
|
||||
d: oCoords.tr
|
||||
},
|
||||
rightline: {
|
||||
o: oCoords.tr,
|
||||
d: oCoords.br
|
||||
},
|
||||
bottomline: {
|
||||
o: oCoords.br,
|
||||
d: oCoords.bl
|
||||
},
|
||||
leftline: {
|
||||
o: oCoords.bl,
|
||||
d: oCoords.tl
|
||||
}
|
||||
};
|
||||
},
|
||||
|
||||
/**
|
||||
* Helper method to determine how many cross points are between the 4 object edges
|
||||
* and the horizontal line determined by a point on canvas
|
||||
* @private
|
||||
* @param {Object} point
|
||||
* @param {Object} oCoords Coordinates of the image being evaluated
|
||||
*/
|
||||
_findCrossPoints: function(point, oCoords) {
|
||||
var b1, b2, a1, a2, xi, yi,
|
||||
xcount = 0,
|
||||
iLine;
|
||||
|
||||
for (var lineKey in oCoords) {
|
||||
iLine = oCoords[lineKey];
|
||||
// optimisation 1: line below point. no cross
|
||||
if ((iLine.o.y < point.y) && (iLine.d.y < point.y)) {
|
||||
continue;
|
||||
}
|
||||
// optimisation 2: line above point. no cross
|
||||
if ((iLine.o.y >= point.y) && (iLine.d.y >= point.y)) {
|
||||
continue;
|
||||
}
|
||||
// optimisation 3: vertical line case
|
||||
if ((iLine.o.x === iLine.d.x) && (iLine.o.x >= point.x)) {
|
||||
xi = iLine.o.x;
|
||||
yi = point.y;
|
||||
}
|
||||
// calculate the intersection point
|
||||
else {
|
||||
b1 = 0;
|
||||
b2 = (iLine.d.y - iLine.o.y) / (iLine.d.x - iLine.o.x);
|
||||
a1 = point.y- b1 * point.x;
|
||||
a2 = iLine.o.y - b2 * iLine.o.x;
|
||||
|
||||
xi = - (a1 - a2) / (b1 - b2);
|
||||
yi = a1 + b1 * xi;
|
||||
}
|
||||
// dont count xi < point.x cases
|
||||
if (xi >= point.x) {
|
||||
xcount += 1;
|
||||
}
|
||||
// optimisation 4: specific for square images
|
||||
if (xcount === 2) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return xcount;
|
||||
},
|
||||
|
||||
/**
|
||||
|
|
@ -11358,7 +11439,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot
|
|||
var pointer = getPointer(e, this.canvas.upperCanvasEl),
|
||||
ex = pointer.x - offset.left,
|
||||
ey = pointer.y - offset.top,
|
||||
xpoints,
|
||||
xPoints,
|
||||
lines;
|
||||
|
||||
for (var i in this.oCoords) {
|
||||
|
|
@ -11371,7 +11452,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot
|
|||
continue;
|
||||
}
|
||||
|
||||
lines = this._getImageLines(this.oCoords[i].corner, i);
|
||||
lines = this._getImageLines(this.oCoords[i].corner);
|
||||
|
||||
// debugging
|
||||
|
||||
|
|
@ -11387,8 +11468,8 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot
|
|||
// canvas.contextTop.fillRect(lines.rightline.d.x, lines.rightline.d.y, 2, 2);
|
||||
// canvas.contextTop.fillRect(lines.rightline.o.x, lines.rightline.o.y, 2, 2);
|
||||
|
||||
xpoints = this._findCrossPoints(ex, ey, lines);
|
||||
if (xpoints % 2 === 1 && xpoints !== 0) {
|
||||
xPoints = this._findCrossPoints({x: ex, y: ey}, lines);
|
||||
if (xPoints !== 0 && xPoints % 2 === 1) {
|
||||
this.__corner = i;
|
||||
return i;
|
||||
}
|
||||
|
|
@ -11396,82 +11477,6 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot
|
|||
return false;
|
||||
},
|
||||
|
||||
/**
|
||||
* Helper method to determine how many cross points are between the 4 image edges
|
||||
* and the horizontal line determined by the position of our mouse when clicked on canvas
|
||||
* @private
|
||||
* @param ex {Number} x coordinate of the mouse
|
||||
* @param ey {Number} y coordinate of the mouse
|
||||
* @param oCoords {Object} Coordinates of the image being evaluated
|
||||
*/
|
||||
_findCrossPoints: function(ex, ey, oCoords) {
|
||||
var b1, b2, a1, a2, xi, yi,
|
||||
xcount = 0,
|
||||
iLine;
|
||||
|
||||
for (var lineKey in oCoords) {
|
||||
iLine = oCoords[lineKey];
|
||||
// optimisation 1: line below dot. no cross
|
||||
if ((iLine.o.y < ey) && (iLine.d.y < ey)) {
|
||||
continue;
|
||||
}
|
||||
// optimisation 2: line above dot. no cross
|
||||
if ((iLine.o.y >= ey) && (iLine.d.y >= ey)) {
|
||||
continue;
|
||||
}
|
||||
// optimisation 3: vertical line case
|
||||
if ((iLine.o.x === iLine.d.x) && (iLine.o.x >= ex)) {
|
||||
xi = iLine.o.x;
|
||||
yi = ey;
|
||||
}
|
||||
// calculate the intersection point
|
||||
else {
|
||||
b1 = 0;
|
||||
b2 = (iLine.d.y-iLine.o.y)/(iLine.d.x-iLine.o.x);
|
||||
a1 = ey-b1*ex;
|
||||
a2 = iLine.o.y-b2*iLine.o.x;
|
||||
|
||||
xi = - (a1-a2)/(b1-b2);
|
||||
yi = a1+b1*xi;
|
||||
}
|
||||
// dont count xi < ex cases
|
||||
if (xi >= ex) {
|
||||
xcount += 1;
|
||||
}
|
||||
// optimisation 4: specific for square images
|
||||
if (xcount === 2) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return xcount;
|
||||
},
|
||||
|
||||
/**
|
||||
* Method that returns an object with the object edges in it, given the coordinates of the corners
|
||||
* @private
|
||||
* @param {Object} oCoords Coordinates of the image corners
|
||||
*/
|
||||
_getImageLines: function(oCoords) {
|
||||
return {
|
||||
topline: {
|
||||
o: oCoords.tl,
|
||||
d: oCoords.tr
|
||||
},
|
||||
rightline: {
|
||||
o: oCoords.tr,
|
||||
d: oCoords.br
|
||||
},
|
||||
bottomline: {
|
||||
o: oCoords.br,
|
||||
d: oCoords.bl
|
||||
},
|
||||
leftline: {
|
||||
o: oCoords.bl,
|
||||
d: oCoords.tl
|
||||
}
|
||||
};
|
||||
},
|
||||
|
||||
/**
|
||||
* Sets the coordinates of the draggable boxes in the corners of
|
||||
* the image used to scale/rotate it.
|
||||
|
|
|
|||
10
dist/all.min.js
vendored
10
dist/all.min.js
vendored
File diff suppressed because one or more lines are too long
BIN
dist/all.min.js.gz
vendored
BIN
dist/all.min.js.gz
vendored
Binary file not shown.
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "fabric",
|
||||
"description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.",
|
||||
"version": "1.1.12",
|
||||
"version": "1.1.13",
|
||||
"author": "Juriy Zaytsev <kangax@gmail.com>",
|
||||
"keywords": ["canvas", "graphic", "graphics", "SVG", "node-canvas", "parser", "HTML5", "object model"],
|
||||
"repository": "git://github.com/kangax/fabric.js",
|
||||
|
|
|
|||
Loading…
Reference in a new issue