fabric.CustomGroup
by mcannon
HTML
<script src="https://rawgit.com/kangax/fabric.js/master/dist/fabric.js"></script>
<canvas id="c" width="400" height="400"></canvas>
CSS
canvas {
border: 1px solid #999;
}
img {
display: none;
}
JavaScript
/**
* fabric.js template for bug reports
*
* Please update the name of the jsfiddle (see Fiddle Options).
* This templates uses latest dev verison of fabric.js (https://rawgithub.com/kangax/fabric.js/master/dist/all.js).
*/
// initialize fabric canvas and assign to global windows object for debug
var canvas = window._canvas = new fabric.Canvas('c');
// Do some initializing stuff
fabric.Object.prototype.set({
transparentCorners: false,
cornerColor: 'rgba(102,153,255,0.5)',
cornerSize: 12,
padding: 5
});
// ADD YOUR CODE HERE
fabric.CustomGroup = fabric.util.createClass(fabric.Group, {
type: 'customGroup',
initialize: function (objects, options) {
options || (options = {});
console.log('CustomGroup', objects);
this.callSuper('initialize', objects, options);
this.set('customAttribute', options.customAttribute || 'undefinedCustomAttribute');
},
toObject: function () {
return fabric.util.object.extend(this.callSuper('toObject'), {
customAttribute: this.get('customAttribute')
});
},
_render: function (ctx) {
this.callSuper('_render', ctx);
}
});
/*
* Synchronous loaded object
*/
fabric.CustomGroup.fromObject = function (object, callback) {
var _enlivenedObjects;
fabric.util.enlivenObjects(object.objects, function (enlivenedObjects) {
delete object.objects;
_enlivenedObjects = enlivenedObjects;
});
return new fabric.CustomGroup(_enlivenedObjects, object);
};
/*
* Async loaded object
*/
/*fabric.CustomGroup.fromObject = function (object, callback) {
fabric.util.enlivenObjects(object.objects, function (enlivenedObjects) {
delete object.objects;
callback && callback(new fabric.CustomGroup(enlivenedObjects, object));
});
};
fabric.CustomGroup.async = true;
*/
var rect = new fabric.Rect({
left: 100,
top: 100,
fill: 'red',
width: 20,
height: 20
});
var cgroup = new...