Add fabric.util.groupSVGElements for creating fabric.<Element> or fabric.PathGroup out of a group of elements.

This commit is contained in:
kangax 2012-06-23 19:28:53 +02:00
parent 411c027cf5
commit 249c330ed6
7 changed files with 45 additions and 33 deletions

View file

@ -1,6 +1,6 @@
/*! Fabric.js Copyright 2008-2012, Bitsonnet (Juriy Zaytsev, Maxim Chernyak) */
var fabric = fabric || { version: "0.8.24" };
var fabric = fabric || { version: "0.8.25" };
if (typeof exports != 'undefined') {
exports.fabric = fabric;

36
dist/all.js vendored
View file

@ -1,6 +1,6 @@
/*! Fabric.js Copyright 2008-2012, Bitsonnet (Juriy Zaytsev, Maxim Chernyak) */
var fabric = fabric || { version: "0.8.24" };
var fabric = fabric || { version: "0.8.25" };
if (typeof exports != 'undefined') {
exports.fabric = fabric;
@ -1950,22 +1950,22 @@ fabric.Observable = {
callback && callback.call(context, url);
}
}
function enlivenObjects(objects, callback) {
function getKlass(type) {
return fabric[fabric.util.string.camelize(fabric.util.string.capitalize(type))];
}
var enlivenedObjects = [ ],
numLoadedAsyncObjects = 0,
// get length of all images
// get length of all images
numTotalAsyncObjects = objects.filter(function (o) {
return getKlass(o.type).async;
}).length;
var _this = this;
objects.forEach(function (o, index) {
if (!o.type) {
return;
@ -1985,12 +1985,23 @@ fabric.Observable = {
enlivenedObjects[index] = klass.fromObject(o);
}
});
if (numTotalAsyncObjects === 0 && callback) {
callback(enlivenedObjects);
}
}
function groupSVGElements(elements, options, path) {
var object = elements.length > 1
? new fabric.PathGroup(elements, options)
: elements[0];
if (typeof path !== 'undefined') {
object.setSourcePath(path);
}
return object;
}
fabric.util.removeFromArray = removeFromArray;
fabric.util.degreesToRadians = degreesToRadians;
fabric.util.toFixed = toFixed;
@ -2000,6 +2011,7 @@ fabric.Observable = {
fabric.util.requestAnimFrame = requestAnimFrame;
fabric.util.loadImage = loadImage;
fabric.util.enlivenObjects = enlivenObjects;
fabric.util.groupSVGElements = groupSVGElements;
})();
(function() {
@ -7072,13 +7084,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, {
}
else {
fabric.loadSVGFromURL(path, function (elements, options) {
if (elements.length > 1) {
var object = new fabric.PathGroup(elements, obj);
}
else {
var object = elements[0];
}
object.setSourcePath(path);
var object = fabric.util.groupSVGElements(elements, obj, path);
// copy parameters from serialied json to object (left, top, scaleX, scaleY, etc.)
// skip this step if an object is a PathGroup, since we already passed it options object before

4
dist/all.min.js vendored

File diff suppressed because one or more lines are too long

BIN
dist/all.min.js.gz vendored

Binary file not shown.

View file

@ -1,7 +1,7 @@
{
"name": "fabric",
"description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.",
"version": "0.8.24",
"version": "0.8.25",
"author": "Juriy Zaytsev <kangax@gmail.com>",
"keywords": ["canvas", "graphic", "graphics", "SVG", "node-canvas", "parser", "HTML5", "object model"],
"repository": "git://github.com/kangax/fabric.js",

View file

@ -115,13 +115,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, {
}
else {
fabric.loadSVGFromURL(path, function (elements, options) {
if (elements.length > 1) {
var object = new fabric.PathGroup(elements, obj);
}
else {
var object = elements[0];
}
object.setSourcePath(path);
var object = fabric.util.groupSVGElements(elements, obj, path);
// copy parameters from serialied json to object (left, top, scaleX, scaleY, etc.)
// skip this step if an object is a PathGroup, since we already passed it options object before

View file

@ -156,22 +156,22 @@
callback && callback.call(context, url);
}
}
function enlivenObjects(objects, callback) {
function getKlass(type) {
return fabric[fabric.util.string.camelize(fabric.util.string.capitalize(type))];
}
var enlivenedObjects = [ ],
numLoadedAsyncObjects = 0,
// get length of all images
// get length of all images
numTotalAsyncObjects = objects.filter(function (o) {
return getKlass(o.type).async;
}).length;
var _this = this;
objects.forEach(function (o, index) {
if (!o.type) {
return;
@ -191,12 +191,23 @@
enlivenedObjects[index] = klass.fromObject(o);
}
});
if (numTotalAsyncObjects === 0 && callback) {
callback(enlivenedObjects);
}
}
function groupSVGElements(elements, options, path) {
var object = elements.length > 1
? new fabric.PathGroup(elements, options)
: elements[0];
if (typeof path !== 'undefined') {
object.setSourcePath(path);
}
return object;
}
fabric.util.removeFromArray = removeFromArray;
fabric.util.degreesToRadians = degreesToRadians;
fabric.util.toFixed = toFixed;
@ -206,4 +217,5 @@
fabric.util.requestAnimFrame = requestAnimFrame;
fabric.util.loadImage = loadImage;
fabric.util.enlivenObjects = enlivenObjects;
fabric.util.groupSVGElements = groupSVGElements;
})();