Fix selection behavior when segment lists are cleared, in which case we expect the path to remain selected.

This commit is contained in:
Jürg Lehni 2011-06-20 19:08:34 +01:00
parent 8909216cc0
commit 2f2b3ed7e0
2 changed files with 17 additions and 5 deletions

View file

@ -86,7 +86,7 @@ var Path = this.Path = PathItem.extend({
if (!this._segments) { if (!this._segments) {
this._segments = []; this._segments = [];
} else { } else {
this.setSelected(false); this._selectedSegmentState = 0;
this._segments.length = 0; this._segments.length = 0;
// Make sure new curves are calculated next time we call getCurves() // Make sure new curves are calculated next time we call getCurves()
if (this._curves) if (this._curves)
@ -644,8 +644,12 @@ var Path = this.Path = PathItem.extend({
_updateSelection: function(segment, oldState, newState) { _updateSelection: function(segment, oldState, newState) {
segment._selectionState = newState; segment._selectionState = newState;
this.setSelected( var total = this._selectedSegmentState += newState - oldState;
(this._selectedSegmentState += newState - oldState) > 0); // Set this path as selected in case we have selected segments. Do not
// unselect if we're down to 0, as the path itself can still remain
// selected even when empty.
if (total > 0)
this.setSelected(true);
}, },
/** /**

View file

@ -108,10 +108,10 @@ test('Is the path deselected after setting a new list of segments?', function()
path.segments = [[0, 10]]; path.segments = [[0, 10]];
equals(function() { equals(function() {
return path.selected; return path.selected;
}, false); }, true);
equals(function() { equals(function() {
return paper.project.selectedItems.length; return paper.project.selectedItems.length;
}, 0); }, 1);
}); });
test('After setting Path#fullySelected=true on an empty path, subsequent segments should be selected', function() { test('After setting Path#fullySelected=true on an empty path, subsequent segments should be selected', function() {
@ -154,7 +154,15 @@ test('After simplifying a path using #simplify(), the path should stay fullySele
path.add(i * 10, 10); path.add(i * 10, 10);
}; };
path.fullySelected = true; path.fullySelected = true;
equals(function() {
return path.selected;
}, true);
path.simplify(); path.simplify();
equals(function() {
return path.selected;
}, true);
equals(function() { equals(function() {
return path.fullySelected; return path.fullySelected;
}, true); }, true);