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:56:46 +02:00
parent 3f6933940e
commit 6e58fdac85
2 changed files with 16 additions and 11 deletions
+13 -10
View File
@@ -468,7 +468,10 @@ namespace canvas
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void Canvas::valueChanged(SGPropertyNode* node) 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; return;
_render_dirty = true; _render_dirty = true;
@@ -507,7 +510,7 @@ namespace canvas
} }
else if( node->getParent() == _node ) else if( node->getParent() == _node )
{ {
if( node->getNameString() == "background" ) if( name == "background" )
{ {
osg::Vec4 color; osg::Vec4 color;
if( _texture.getCamera() && parseColor(node->getStringValue(), color) ) if( _texture.getCamera() && parseColor(node->getStringValue(), color) )
@@ -516,35 +519,35 @@ namespace canvas
_render_dirty = true; _render_dirty = true;
} }
} }
else if( node->getNameString() == "mipmapping" else if( name == "mipmapping"
|| node->getNameString() == "coverage-samples" || name == "coverage-samples"
|| node->getNameString() == "color-samples" ) || name == "color-samples" )
{ {
_sampling_dirty = true; _sampling_dirty = true;
} }
else if( node->getNameString() == "additive-blend" ) else if( name == "additive-blend" )
{ {
_texture.useAdditiveBlend( node->getBoolValue() ); _texture.useAdditiveBlend( node->getBoolValue() );
} }
else if( node->getNameString() == "render-always" ) else if( name == "render-always" )
{ {
_render_always = node->getBoolValue(); _render_always = node->getBoolValue();
} }
else if( node->getNameString() == "size" ) else if( name == "size" )
{ {
if( node->getIndex() == 0 ) if( node->getIndex() == 0 )
setSizeX( node->getIntValue() ); setSizeX( node->getIntValue() );
else if( node->getIndex() == 1 ) else if( node->getIndex() == 1 )
setSizeY( node->getIntValue() ); setSizeY( node->getIntValue() );
} }
else if( node->getNameString() == "view" ) else if( name == "view" )
{ {
if( node->getIndex() == 0 ) if( node->getIndex() == 0 )
setViewWidth( node->getIntValue() ); setViewWidth( node->getIntValue() );
else if( node->getIndex() == 1 ) else if( node->getIndex() == 1 )
setViewHeight( node->getIntValue() ); setViewHeight( node->getIntValue() );
} }
else if( node->getNameString() == "freeze" ) else if( name == "freeze" )
_texture.setRender( node->getBoolValue() ); _texture.setRender( node->getBoolValue() );
else else
handled = false; handled = false;
+3 -1
View File
@@ -419,7 +419,9 @@ namespace canvas
if( parent == _node ) if( parent == _node )
{ {
const std::string& name = child->getNameString(); 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; SGPropertyNode const* style = child;
if( isStyleEmpty(child) ) if( isStyleEmpty(child) )