【发布时间】:2014-11-06 00:47:15
【问题描述】:
当我有一组织物 IText 对象并一起更改它们的所有字体大小时,分组的文本对象都会根据字体大小缩小或增大,但组控件和边框保持原位而不是大小也发生变化.我的问题是,如何在更改组内的对象后让组控件自动调整大小?
查看 Fabric 的代码,我无法弄清楚组的边界是如何设置的。我曾尝试在组上调用 _setCoords() 和 setCoords(),但这会将组移动到画布上的 0、0 并保持高度和宽度相同。调用_setCoords(true) 无效。
我还尝试了以下代码,其中我尝试将旧组替换为包含相同对象的新组,理论上这会划定新边界,但这似乎是一个笨拙的解决方案。此外,它不起作用:新的组边界和控件不会出现。
var selected = [];
var all = scope.canvas.getObjects();
for(var x in all) {
if(all.active) {
selected[selected.length] = x;
}
}
scope.canvas._discardActiveGroup();
var objects = [];
for(var x in selected) {
objects[x] = scope.canvas.getObjects()[x];
}
var group = new fabric.Group(objects,{
originX: 'center',
originY: 'center',
canvas: scope.canvas
});
//Using $timeout so that this will wait until current $scope digest is finished
$timeout(function () {
scope.canvas.setActiveGroup(group);
scope.canvas.renderAll();
}, 0);
scope.canvas.renderAll();
编辑:
我认为这与另一个问题有关,即在文本对象因字体大小更改而更改大小后,其选择区域仍保持在大小更改之前的位置。也就是说,如果您在预调整大小的边界矩形内单击,它会选择对象,而不管调整后的边界矩形如何。只有在选择了一些其他对象或取消选择所有对象后,选择才能按预期对对象进行。我为对象调用setCoords(),因此它们的边界绘制正确。
【问题讨论】: