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 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).
- Fix color change propagation on groups (#1152).
- 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) {
var clipItem = this._getClipItem();
return clipItem
? clipItem._getCachedBounds(
matrix && matrix.appended(clipItem._matrix) || clipItem._matrix,
? clipItem._getCachedBounds(clipItem._matrix.prepended(matrix),
Base.set({}, options, { stroke: false }))
: _getBounds.base.call(this, matrix, options);
},

View file

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