]> git.mxchange.org Git - flightgear.git/blobdiff - src/Canvas/window.cxx
Canvas window: Update for SimGear MouseEvent changes.
[flightgear.git] / src / Canvas / window.cxx
index 156ca043a1d877a8890480c15035ea0995726c51..cdebb5d0e12df21c0bbf206e1b96f2855d696202 100644 (file)
@@ -30,7 +30,14 @@ namespace canvas
     PropertyBasedElement(node),
     _image( simgear::canvas::CanvasPtr(),
             node,
-            simgear::canvas::Element::Style() )
+            simgear::canvas::Style() ),
+    _resizable(false),
+    _capture_events(true),
+    _resize_top(node, "resize-top"),
+    _resize_right(node, "resize-right"),
+    _resize_bottom(node, "resize-bottom"),
+    _resize_left(node, "resize-left"),
+    _resize_status(node, "resize-status")
   {
     _image.removeListener();
 
@@ -60,9 +67,21 @@ namespace canvas
   //----------------------------------------------------------------------------
   void Window::valueChanged(SGPropertyNode * node)
   {
-    if( node->getParent() == _node && node->getNameString() == "raise-top" )
-      doRaise(node);
-    else
+    bool handled = false;
+    if( node->getParent() == _node )
+    {
+      handled = true;
+      if( node->getNameString() == "raise-top" )
+        doRaise(node);
+      else if( node->getNameString()  == "resize" )
+        _resizable = node->getBoolValue();
+      else if( node->getNameString() == "capture-events" )
+        _capture_events = node->getBoolValue();
+      else
+        handled = false;
+    }
+
+    if( !handled )
       _image.valueChanged(node);
   }
 
@@ -73,7 +92,7 @@ namespace canvas
   }
 
   //----------------------------------------------------------------------------
-  const simgear::Rect<float>& Window::getRegion() const
+  const SGRect<float>& Window::getRegion() const
   {
     return _image.getRegion();
   }
@@ -91,18 +110,61 @@ namespace canvas
   }
 
   //----------------------------------------------------------------------------
-  bool Window::handleMouseEvent(const simgear::canvas::MouseEvent& event)
+  bool Window::isVisible() const
+  {
+    return _image.isVisible();
+  }
+
+  //----------------------------------------------------------------------------
+  bool Window::isResizable() const
+  {
+    return _resizable;
+  }
+
+  //----------------------------------------------------------------------------
+  bool Window::isCapturingEvents() const
+  {
+    return _capture_events;
+  }
+
+  //----------------------------------------------------------------------------
+  bool Window::handleMouseEvent(const simgear::canvas::MouseEventPtr& event)
   {
-    if( !getCanvas().expired() )
-      return getCanvas().lock()->handleMouseEvent(event);
-    else
-      return false;
+    return _image.handleEvent(event);
+  }
+
+  //----------------------------------------------------------------------------
+  void Window::handleResize(uint8_t mode, const osg::Vec2f& delta)
+  {
+    if( mode == NONE )
+    {
+      _resize_status = 0;
+      return;
+    }
+    else if( mode & INIT )
+    {
+      _resize_top    = getRegion().t();
+      _resize_right  = getRegion().r();
+      _resize_bottom = getRegion().b();
+      _resize_left   = getRegion().l();
+      _resize_status = 1;
+    }
+
+    if( mode & BOTTOM )
+      _resize_bottom += delta.y();
+    else if( mode & TOP )
+      _resize_top += delta.y();
+
+    if( mode & canvas::Window::RIGHT )
+      _resize_right += delta.x();
+    else if( mode & canvas::Window::LEFT )
+      _resize_left += delta.x();
   }
 
   //----------------------------------------------------------------------------
   void Window::doRaise(SGPropertyNode* node_raise)
   {
-    if( !node_raise->getBoolValue() )
+    if( node_raise && !node_raise->getBoolValue() )
       return;
 
     BOOST_FOREACH(osg::Group* parent, getGroup()->getParents())
@@ -114,7 +176,8 @@ namespace canvas
       parent->addChild(getGroup());
     }
 
-    node_raise->setBoolValue(false);
+    if( node_raise )
+      node_raise->setBoolValue(false);
   }
 
 } // namespace canvas