canvas: exclude data-* properties from triggering an update.

Allows using data-* properties on canvas and elements,
similar to HTML5, without triggering a new rendering of
the canvas.
This commit is contained in:
Thomas Geymayer
2014-05-27 17:54:37 +02:00
parent 3f6933940e
commit 6e58fdac85
2 changed files with 16 additions and 11 deletions

View File

@@ -468,7 +468,10 @@ namespace canvas
//----------------------------------------------------------------------------
void Canvas::valueChanged(SGPropertyNode* node)
{
if( boost::starts_with(node->getNameString(), "status") )
const std::string& name = node->getNameString();
if( boost::starts_with(name, "status")
|| boost::starts_with(name, "data-") )
return;
_render_dirty = true;
@@ -507,7 +510,7 @@ namespace canvas
}
else if( node->getParent() == _node )
{
if( node->getNameString() == "background" )
if( name == "background" )
{
osg::Vec4 color;
if( _texture.getCamera() && parseColor(node->getStringValue(), color) )
@@ -516,35 +519,35 @@ namespace canvas
_render_dirty = true;
}
}
else if( node->getNameString() == "mipmapping"
|| node->getNameString() == "coverage-samples"
|| node->getNameString() == "color-samples" )
else if( name == "mipmapping"
|| name == "coverage-samples"
|| name == "color-samples" )
{
_sampling_dirty = true;
}
else if( node->getNameString() == "additive-blend" )
else if( name == "additive-blend" )
{
_texture.useAdditiveBlend( node->getBoolValue() );
}
else if( node->getNameString() == "render-always" )
else if( name == "render-always" )
{
_render_always = node->getBoolValue();
}
else if( node->getNameString() == "size" )
else if( name == "size" )
{
if( node->getIndex() == 0 )
setSizeX( node->getIntValue() );
else if( node->getIndex() == 1 )
setSizeY( node->getIntValue() );
}
else if( node->getNameString() == "view" )
else if( name == "view" )
{
if( node->getIndex() == 0 )
setViewWidth( node->getIntValue() );
else if( node->getIndex() == 1 )
setViewHeight( node->getIntValue() );
}
else if( node->getNameString() == "freeze" )
else if( name == "freeze" )
_texture.setRender( node->getBoolValue() );
else
handled = false;

View File

@@ -419,7 +419,9 @@ namespace canvas
if( parent == _node )
{
const std::string& name = child->getNameString();
if( StyleInfo const* style_info = getStyleInfo(name) )
if( boost::starts_with(name, "data-") )
return;
else if( StyleInfo const* style_info = getStyleInfo(name) )
{
SGPropertyNode const* style = child;
if( isStyleEmpty(child) )