X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fcanvas%2FCanvas.cxx;h=3112fcb3b9133eb7f5628c4b10adbdf9e8b1f61c;hb=9be53e746f477e7612b7145eb397d415f773ffa5;hp=acb8da88232bc19d9ed3e21d8378c0e1853574b7;hpb=b99f53fda3b06378668bdccd4a9d07161f263366;p=simgear.git diff --git a/simgear/canvas/Canvas.cxx b/simgear/canvas/Canvas.cxx index acb8da88..3112fcb3 100644 --- a/simgear/canvas/Canvas.cxx +++ b/simgear/canvas/Canvas.cxx @@ -18,7 +18,8 @@ #include "Canvas.hxx" #include -#include +#include +#include #include #include @@ -135,6 +136,15 @@ namespace canvas _dependent_canvases.erase(canvas); } + //---------------------------------------------------------------------------- + GroupPtr Canvas::createGroup(const std::string& name) + { + return boost::dynamic_pointer_cast + ( + _root_group->createChild("group", name) + ); + } + //---------------------------------------------------------------------------- void Canvas::enableRendering(bool force) { @@ -373,6 +383,21 @@ namespace canvas if( node->getParent()->getParent() == _node && node->getParent()->getNameString() == "placement" ) { + bool placement_dirty = false; + BOOST_FOREACH(Placements& placements, _placements) + { + BOOST_FOREACH(PlacementPtr& placement, placements) + { + // check if change can be directly handled by placement + if( placement->getProps() == node->getParent() + && !placement->childChanged(node) ) + placement_dirty = true; + } + } + + if( !placement_dirty ) + return; + // prevent double updates... for( size_t i = 0; i < _dirty_placements.size(); ++i ) {