Streamline code for #1427

This commit is contained in:
Jürg Lehni 2019-06-09 23:35:33 +02:00
parent e3c298d3f4
commit 4ba406bfe3
3 changed files with 24 additions and 14 deletions

View file

@ -10,6 +10,7 @@
- Fix drawing with compound-paths as clip-items (#1361). - Fix drawing with compound-paths as clip-items (#1361).
- Fix drawing of path selection with small handle size (#1327). - Fix drawing of path selection with small handle size (#1327).
- Do not ignore `Group#clipItem.matrix` in `Group#internalBounds` (#1427).
- Correctly calculate bounds with nested empty items (#1467). - Correctly calculate bounds with nested empty items (#1467).
- Fix color change propagation on groups (#1152). - Fix color change propagation on groups (#1152).
- SVG Export: Fix error when `Item#matrix` is not invertible (#1580). - SVG Export: Fix error when `Item#matrix` is not invertible (#1580).

View file

@ -171,8 +171,7 @@ var Group = Item.extend(/** @lends Group# */{
_getBounds: function _getBounds(matrix, options) { _getBounds: function _getBounds(matrix, options) {
var clipItem = this._getClipItem(); var clipItem = this._getClipItem();
return clipItem return clipItem
? clipItem._getCachedBounds( ? clipItem._getCachedBounds(clipItem._matrix.prepended(matrix),
matrix && matrix.appended(clipItem._matrix) || clipItem._matrix,
Base.set({}, options, { stroke: false })) Base.set({}, options, { stroke: false }))
: _getBounds.base.call(this, matrix, options); : _getBounds.base.call(this, matrix, options);
}, },

View file

@ -167,15 +167,25 @@ test('Group#isEmpty(recursively)', function() {
equals(true, group.isEmpty(true)); equals(true, group.isEmpty(true));
}); });
test('group.getInternalBounds() with clip item without matrix applied', function() { test(
var point = new Point(100, 100); 'group.internalBounds with clip item without clip.applyMatrix = false',
var translation = new Point(100, 100); function() {
var item = new Path.Circle({ center: point, radius: 50, fillColor: 'orange' }); var point = new Point(100, 100);
var clip = new Path.Rectangle({ from: point.subtract(translation), to: point.add(translation) }); var translation = new Point(100, 100);
clip.applyMatrix = false; var item = new Path.Circle({
clip.translate(translation); center: point,
var group = new Group(clip, item); radius: 50,
group.clipped = true; fillColor: 'orange'
});
equals(group.getInternalBounds(), new Rectangle(point, point.add(translation.multiply(2)))); var clip = new Path.Rectangle({
}); from: point.subtract(translation),
to: point.add(translation)
});
clip.applyMatrix = false;
clip.translate(translation);
var group = new Group(clip, item);
group.clipped = true;
var expected = new Rectangle(point, point.add(translation.multiply(2)));
equals(group.internalBounds, expected);
}
);