Merge pull request #908 from 3stack-software/upstream-fix-906

Make Node#isVisible() consistent with drawing behaviour
This commit is contained in:
Anton Lavrenov 2020-05-13 09:22:46 -05:00 committed by GitHub
commit 57a436ae98
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 16871 additions and 16913 deletions

33696
konva.js

File diff suppressed because it is too large Load Diff

4
konva.min.js vendored

File diff suppressed because one or more lines are too long

View File

@ -1016,43 +1016,32 @@ export abstract class Node<Config extends NodeConfig = NodeConfig> {
} }
} }
/** /**
* determine if node is visible by taking into account ancestors. * determine if node is visible by taking into account ancestors.
* *
* Parent | Self | isVisible * Parent | Self | isVisible
* visible | visible | * visible | visible |
* ----------+-----------+------------ * ----------+-----------+------------
* T | T | T * T | T | T
* T | F | F * T | F | F
* F | T | T * F | T | F
* F | F | F * F | F | F
* ----------+-----------+------------ * @method
* T | I | T * @name Konva.Node#isVisible
* F | I | F * @returns {Boolean}
* I | I | T */
* @method
* @name Konva.Node#isVisible
* @returns {Boolean}
*/
isVisible() { isVisible() {
return this._getCache(VISIBLE, this._isVisible); return this._getCache(VISIBLE, this._isVisible);
} }
_isVisible(relativeTo) { _isVisible(relativeTo) {
var visible = this.visible(), const visible = this.visible();
parent = this.getParent(); if (!visible) {
return false;
// the following conditions are a simplification of the truth table above. }
// please modify carefully const parent = this.getParent();
if (visible === 'inherit') { if (parent && parent !== relativeTo) {
if (parent && parent !== relativeTo) { return parent._isVisible(relativeTo);
return parent._isVisible(relativeTo);
} else {
return true;
}
} else if (relativeTo && relativeTo !== parent) {
return visible && parent._isVisible(relativeTo);
} else { } else {
return visible; return true;
} }
} }
/** /**
@ -3040,24 +3029,15 @@ Factory.addGetterSetter(Node, 'filters', null, function (val) {
* ]); * ]);
*/ */
Factory.addGetterSetter(Node, 'visible', 'inherit', function (val) { Factory.addGetterSetter(Node, 'visible', true, getBooleanValidator());
var isValid = val === true || val === false || val === 'inherit';
if (!isValid) {
Util.warn(
val +
' is a not valid value for "visible" attribute. The value may be true, false or "inherit".'
);
}
return val;
});
/** /**
* get/set visible attr. Can be "inherit", true, or false. The default is "inherit". * get/set visible attr. Can be true, or false. The default is true.
* If you need to determine if a node is visible or not * If you need to determine if a node is visible or not
* by taking into account its parents, use the isVisible() method * by taking into account its parents, use the isVisible() method
* @name Konva.Node#visible * @name Konva.Node#visible
* @method * @method
* @param {Boolean|String} visible * @param {Boolean} visible
* @returns {Boolean|String} * @returns {Boolean}
* @example * @example
* // get visible attr * // get visible attr
* var visible = node.visible(); * var visible = node.visible();
@ -3065,11 +3045,9 @@ Factory.addGetterSetter(Node, 'visible', 'inherit', function (val) {
* // make invisible * // make invisible
* node.visible(false); * node.visible(false);
* *
* // make visible * // make visible (according to the parent)
* node.visible(true); * node.visible(true);
* *
* // make visible according to the parent
* node.visible('inherit');
*/ */
Factory.addGetterSetter(Node, 'transformsEnabled', 'all', getStringValidator()); Factory.addGetterSetter(Node, 'transformsEnabled', 'all', getStringValidator());

View File

@ -3202,35 +3202,35 @@ suite('Node', function () {
assert.equal(layer.isVisible(), false); assert.equal(layer.isVisible(), false);
assert.equal(circle.isVisible(), false); assert.equal(circle.isVisible(), false);
stage.setVisible('inherit'); stage.setVisible(true);
layer.setVisible(false); layer.setVisible(false);
assert.equal(stage.isVisible(), true); assert.equal(stage.isVisible(), true);
assert.equal(layer.isVisible(), false); assert.equal(layer.isVisible(), false);
assert.equal(circle.isVisible(), false); assert.equal(circle.isVisible(), false);
layer.setVisible('inherit'); layer.setVisible(true);
circle.setVisible(false); circle.setVisible(false);
assert.equal(stage.isVisible(), true); assert.equal(stage.isVisible(), true);
assert.equal(layer.isVisible(), true); assert.equal(layer.isVisible(), true);
assert.equal(circle.isVisible(), false); assert.equal(circle.isVisible(), false);
circle.setVisible('inherit'); circle.setVisible(true);
stage.setVisible(true); stage.setVisible(true);
assert.equal(stage.isVisible(), true); assert.equal(stage.isVisible(), true);
assert.equal(layer.isVisible(), true); assert.equal(layer.isVisible(), true);
assert.equal(circle.isVisible(), true); assert.equal(circle.isVisible(), true);
stage.setVisible('inherit'); stage.setVisible(true);
layer.setVisible(true); layer.setVisible(true);
assert.equal(stage.isVisible(), true); assert.equal(stage.isVisible(), true);
assert.equal(layer.isVisible(), true); assert.equal(layer.isVisible(), true);
assert.equal(circle.isVisible(), true); assert.equal(circle.isVisible(), true);
layer.setVisible('inherit'); layer.setVisible(true);
circle.setVisible(true); circle.setVisible(true);
assert.equal(stage.isVisible(), true); assert.equal(stage.isVisible(), true);