From 6e58fdac85bce5003d8bd3a045d787c12d49852c Mon Sep 17 00:00:00 2001 From: Thomas Geymayer Date: Tue, 27 May 2014 17:54:37 +0200 Subject: [PATCH] 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. --- simgear/canvas/Canvas.cxx | 23 +++++++++++++---------- simgear/canvas/elements/CanvasElement.cxx | 4 +++- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/simgear/canvas/Canvas.cxx b/simgear/canvas/Canvas.cxx index c199f54f..8b02f49c 100644 --- a/simgear/canvas/Canvas.cxx +++ b/simgear/canvas/Canvas.cxx @@ -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; diff --git a/simgear/canvas/elements/CanvasElement.cxx b/simgear/canvas/elements/CanvasElement.cxx index c763ab86..9bb75b12 100644 --- a/simgear/canvas/elements/CanvasElement.cxx +++ b/simgear/canvas/elements/CanvasElement.cxx @@ -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) ) -- 2.39.5