X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fcanvas%2Felements%2FCanvasGroup.cxx;h=9bfb8c2f26d3df44be309cc8815c591423dde953;hb=1f431323635de0dd86d60a0fc58efa9557983ef8;hp=5cd403ccd2b5876bca04cbd22154ad88b6edf6e3;hpb=fc49be1e05fb2bc13fb26c43cf6efeed14033a9d;p=simgear.git diff --git a/simgear/canvas/elements/CanvasGroup.cxx b/simgear/canvas/elements/CanvasGroup.cxx index 5cd403cc..9bfb8c2f 100644 --- a/simgear/canvas/elements/CanvasGroup.cxx +++ b/simgear/canvas/elements/CanvasGroup.cxx @@ -46,6 +46,9 @@ namespace canvas return el; } + //---------------------------------------------------------------------------- + ElementFactories Group::_child_factories; + //---------------------------------------------------------------------------- Group::Group( const CanvasWeakPtr& canvas, const SGPropertyNode_ptr& node, @@ -53,11 +56,14 @@ namespace canvas Element* parent ): Element(canvas, node, parent_style, parent) { - _child_factories["group"] = &createElement; - _child_factories["image"] = &createElement; - _child_factories["map" ] = &createElement; - _child_factories["path" ] = &createElement; - _child_factories["text" ] = &createElement; + if( !isInit() ) + { + _child_factories["group"] = &createElement; + _child_factories["image"] = &createElement; + _child_factories["map" ] = &createElement; + _child_factories["path" ] = &createElement; + _child_factories["text" ] = &createElement; + } } //---------------------------------------------------------------------------- @@ -137,6 +143,10 @@ namespace canvas //---------------------------------------------------------------------------- bool Group::setStyle(const SGPropertyNode* style) { + // Don't propagate styles directly applicable to this group + if( Element::setStyle(style) ) + return true; + if( style->getParent() != _node && _style.find(style->getNameString()) != _style.end() ) return false; @@ -179,7 +189,7 @@ namespace canvas if( child->getParent() != _node ) return; - ChildFactories::iterator child_factory = + ElementFactories::iterator child_factory = _child_factories.find( child->getNameString() ); if( child_factory != _child_factories.end() ) { @@ -189,11 +199,18 @@ namespace canvas _transform->addChild( element->getMatrixTransform() ); _children.push_back( ChildList::value_type(child, element) ); + // ...and ensure correct ordering + handleZIndexChanged( --_children.end() ); + return; } - _style[ child->getNameString() ] = child; - setStyle(child); + if( !Element::setStyle(child) ) + { + // Only add style if not applicable to group itself + _style[ child->getNameString() ] = child; + setStyle(child); + } } //---------------------------------------------------------------------------- @@ -231,13 +248,13 @@ namespace canvas { if( node->getParent()->getParent() == _node && node->getNameString() == "z-index" ) - return handleZIndexChanged(node->getParent(), node->getIntValue()); + return handleZIndexChanged( findChild(node->getParent()), + node->getIntValue() ); } //---------------------------------------------------------------------------- - void Group::handleZIndexChanged(SGPropertyNode* node, int z_index) + void Group::handleZIndexChanged(ChildList::iterator child, int z_index) { - ChildList::iterator child = findChild(node); if( child == _children.end() ) return;