]> git.mxchange.org Git - simgear.git/commitdiff
Canvas: Fix crash on hide/show after detaching element from scenegraph.
authorThomas Geymayer <tomgey@gmail.com>
Sat, 22 Feb 2014 00:44:29 +0000 (01:44 +0100)
committerThomas Geymayer <tomgey@gmail.com>
Sat, 22 Feb 2014 00:51:54 +0000 (01:51 +0100)
simgear/canvas/elements/CanvasElement.cxx
simgear/canvas/elements/CanvasElement.hxx

index 34088814abade7cebbb11d5890295b34daaa30d6..44dffc54e1c8d467a41b72117d1a4da0cec223a1 100644 (file)
@@ -163,8 +163,7 @@ namespace canvas
   //----------------------------------------------------------------------------
   void Element::update(double dt)
   {
-    if( !_transform->getNodeMask() )
-      // Don't do anything if element is hidden
+    if( !isVisible() )
       return;
 
     // Trigger matrix update
@@ -278,6 +277,14 @@ namespace canvas
       return _transform->getBound().contains(osg::Vec3f(pos, 0));
   }
 
+  //----------------------------------------------------------------------------
+  void Element::setVisible(bool visible)
+  {
+    if( _transform.valid() )
+      // TODO check if we need another nodemask
+      _transform->setNodeMask(visible ? 0xffffffff : 0);
+  }
+
   //----------------------------------------------------------------------------
   bool Element::isVisible() const
   {
@@ -393,9 +400,6 @@ namespace canvas
       }
       else if( name == "update" )
         return update(0);
-      else if( name == "visible" )
-        // TODO check if we need another nodemask
-        return _transform->setNodeMask( child->getBoolValue() ? 0xffffffff : 0 );
       else if( boost::starts_with(name, "blend-") )
         return (void)(_attributes_dirty |= BLEND_FUNC);
     }
@@ -636,6 +640,7 @@ namespace canvas
 
     addStyle("clip", "", &Element::setClip, false);
     addStyle("clip-frame", "", &Element::setClipFrame, false);
+    addStyle("visible", "", &Element::setVisible, false);
   }
 
   //----------------------------------------------------------------------------
index e56a943ca5813da8ed75ad006f9ae50c07fdc41b..79a6265bcfbfdf2bfc28d36a6f1575c46587685f 100644 (file)
@@ -117,8 +117,12 @@ namespace canvas
                              const osg::Vec2f& local_pos ) const;
 
       /**
-       * Get whether the element is visible or hidden (Can be changed with
-       * setting property "visible" accordingly).
+       * Set visibility of the element.
+       */
+      void setVisible(bool visible);
+
+      /**
+       * Get whether the element is visible or hidden.
        */
       bool isVisible() const;