<!DOCTYPE html>
<html>
<head>
<script data-require="jquery@*" data-semver="2.2.0" src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.5.0/fabric.min.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="extend.js"></script>
<script src="script.js"></script>
</head>
<body>
<canvas id="canvas"></canvas>
</body>
</html>
$(function(){
fabric.util.object.extend(fabric.Object.prototype, {
getAbsoluteCenterPoint: function() {
var point = this.getCenterPoint();
if (!this.group)
return point;
var groupPoint = this.group.getAbsoluteCenterPoint();
return {
x: point.x + groupPoint.x,
y: point.y + groupPoint.y
};
},
containsInGroupPoint: function(point) {
if (!this.group)
return this.containsPoint(point);
var center = this.getAbsoluteCenterPoint();
var thisPos = {
xStart: center.x - this.width/2,
xEnd: center.x + this.width/2,
yStart: center.y - this.height/2,
yEnd: center.y + this.height/2
};
if (point.x >= thisPos.xStart && point.x <= (thisPos.xEnd)) {
if (point.y >= thisPos.yStart && point.y <= thisPos.yEnd) {
return true;
}
}
return false;
}
});
var canvas = new fabric.Canvas('canvas');
canvas.setHeight($(window).height());
canvas.setWidth($(window).width());
var rect1 = new fabric.Rect({width:100, height:100, id:'a', left:10, top:10, fill:'#ccc', selectable: true})
var rect2 = new fabric.Rect({width:100, height:100, id:'b', left:150, top:10, fill:'#cc0000', selectable: true})
var group = new fabric.Group();
group.addWithUpdate(rect1);
group.addWithUpdate(rect2);
group.set({
top:100,
left:200,
selectable: false
});
group.hasControls = false;
group.hasBorders = false;
canvas.add(group);
canvas.on('mouse:down', function(options) {
var mousePos = canvas.getPointer(options.e);
console.log('mouse pos', mousePos);
if (!options.target || !options.target.isType('group'))
return;
options.target.forEachObject(function(object,i) {
if(object.containsInGroupPoint(mousePos)){
object.hasControls = true;
console.log('HIT !', object);
}
});
});
})
/* Styles go here */