The title says all. When a fabric.IText
is part of a fabric.Group
, it no longer reacts like a editable text.
Here is a use-case: http://jsfi
I know is too late, but here is a working code for your problem: http://jsfiddle.net/fd4yrxq6/2/
I just made some little changes using the anwares above:
...
// ungroup objects in group
var items;
var ungroup = function (group) {
items = group._objects;
group._restoreObjectsState();
canvas.remove(group);
canvas.renderAll();
for (var i = 0; i < items.length; i++) {
canvas.add(items[i]);
}
// if you have disabled render on addition
canvas.renderAll();
};
...
dimensionText.on('editing:exited', function () {
for (var i = 0; i < items.length; i++) {
canvas.remove(items[i]);
}
var grp = new fabric.Group(items, {});
canvas.add(grp);
grp.on('mousedown', fabricDblClick(grp, function (obj) {
ungroup(grp);
canvas.setActiveObject(dimensionText);
dimensionText.enterEditing();
dimensionText.selectAll();
}));
});
...
var canvas = new fabric.Canvas('canvas');
canvas.setWidth(300);
canvas.setHeight(300);
// Double-click event handler
var fabricDblClick = function (obj, handler) {
return function () {
if (obj.clicked) handler(obj);
else {
obj.clicked = true;
setTimeout(function () {
obj.clicked = false;
}, 500);
}
};
};
// ungroup objects in group
var items;
var ungroup = function (group) {
items = group._objects;
group._restoreObjectsState();
canvas.remove(group);
canvas.renderAll();
for (var i = 0; i < items.length; i++) {
canvas.add(items[i]);
}
// if you have disabled render on addition
canvas.renderAll();
};
// Re-group when text editing finishes
var dimensionText = new fabric.IText("Dimension Text", {
fontFamily: 'Comic Sans',
fontSize: 14,
stroke: '#000',
strokeWidth: 1,
fill: "#000",
left: 170,
top: 60
});
dimensionText.on('editing:exited', function () {
for (var i = 0; i < items.length; i++) {
canvas.remove(items[i]);
}
var grp = new fabric.Group(items, {});
canvas.add(grp);
grp.on('mousedown', fabricDblClick(grp, function (obj) {
ungroup(grp);
canvas.setActiveObject(dimensionText);
dimensionText.enterEditing();
dimensionText.selectAll();
}));
});
function addRuler() {
var dimension_mark = new fabric.Path('M0,0L0,-5L0,5L0,0L150,0L150,-5L150,5L150,0z');
dimension_mark.set({
left: 150,
top: 70,
stroke: '#333333',
strokeWidth: 2,
scaleY: 1
});
var dimension_group = new fabric.Group([dimension_mark, dimensionText], {
left: 50,
top: 50
});
canvas.add(dimension_group);
dimension_group.on('mousedown', fabricDblClick(dimension_group, function (obj) {
ungroup(dimension_group);
canvas.setActiveObject(dimensionText);
dimensionText.enterEditing();
dimensionText.selectAll();
canvas.renderAll();
}));
}
addRuler();
style = {
left: 100,
top: 100,
width: 20,
height: 20,
fill: "green",
lockRotation: true
};
var rectangle = new fabric.Polygon([
{ x: 20, y: 0 },
{ x: 0, y: 20 },
{ x: 20, y: 40 },
{ x: 40, y: 20 },
], style);
canvas.add(rectangle);
.canvas {
border: 1px solid Black;
width: 300px;
height: 300px;
}
Fabric.js - iText editing from Group