Canvas: Fix crash on hide/show after detaching element from scenegraph.
This commit is contained in:
parent
94bbed80d0
commit
b2cedc5332
@ -163,8 +163,7 @@ namespace canvas
|
|||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
void Element::update(double dt)
|
void Element::update(double dt)
|
||||||
{
|
{
|
||||||
if( !_transform->getNodeMask() )
|
if( !isVisible() )
|
||||||
// Don't do anything if element is hidden
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Trigger matrix update
|
// Trigger matrix update
|
||||||
@ -278,6 +277,14 @@ namespace canvas
|
|||||||
return _transform->getBound().contains(osg::Vec3f(pos, 0));
|
return _transform->getBound().contains(osg::Vec3f(pos, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void Element::setVisible(bool visible)
|
||||||
|
{
|
||||||
|
if( _transform.valid() )
|
||||||
|
// TODO check if we need another nodemask
|
||||||
|
_transform->setNodeMask(visible ? 0xffffffff : 0);
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
bool Element::isVisible() const
|
bool Element::isVisible() const
|
||||||
{
|
{
|
||||||
@ -393,9 +400,6 @@ namespace canvas
|
|||||||
}
|
}
|
||||||
else if( name == "update" )
|
else if( name == "update" )
|
||||||
return update(0);
|
return update(0);
|
||||||
else if( name == "visible" )
|
|
||||||
// TODO check if we need another nodemask
|
|
||||||
return _transform->setNodeMask( child->getBoolValue() ? 0xffffffff : 0 );
|
|
||||||
else if( boost::starts_with(name, "blend-") )
|
else if( boost::starts_with(name, "blend-") )
|
||||||
return (void)(_attributes_dirty |= BLEND_FUNC);
|
return (void)(_attributes_dirty |= BLEND_FUNC);
|
||||||
}
|
}
|
||||||
@ -636,6 +640,7 @@ namespace canvas
|
|||||||
|
|
||||||
addStyle("clip", "", &Element::setClip, false);
|
addStyle("clip", "", &Element::setClip, false);
|
||||||
addStyle("clip-frame", "", &Element::setClipFrame, false);
|
addStyle("clip-frame", "", &Element::setClipFrame, false);
|
||||||
|
addStyle("visible", "", &Element::setVisible, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
@ -117,8 +117,12 @@ namespace canvas
|
|||||||
const osg::Vec2f& local_pos ) const;
|
const osg::Vec2f& local_pos ) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get whether the element is visible or hidden (Can be changed with
|
* Set visibility of the element.
|
||||||
* setting property "visible" accordingly).
|
*/
|
||||||
|
void setVisible(bool visible);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get whether the element is visible or hidden.
|
||||||
*/
|
*/
|
||||||
bool isVisible() const;
|
bool isVisible() const;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user