mirror of
https://github.com/konvajs/konva.git
synced 2025-04-05 20:48:28 +08:00
Merge pull request #908 from 3stack-software/upstream-fix-906
Make Node#isVisible() consistent with drawing behaviour
This commit is contained in:
commit
57a436ae98
4
konva.min.js
vendored
4
konva.min.js
vendored
File diff suppressed because one or more lines are too long
74
src/Node.ts
74
src/Node.ts
@ -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());
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user