Salome HOME
Fix problem with rubber band in the VTK viewer.
authorrnv <rnv@opencascade.com>
Fri, 8 Jul 2016 09:15:37 +0000 (12:15 +0300)
committerrnv <rnv@opencascade.com>
Fri, 8 Jul 2016 09:15:37 +0000 (12:15 +0300)
src/SVTK/SVTK_InteractorStyle.cxx
src/SVTK/SVTK_InteractorStyle.h

index bc55113a3481007f78e154496e93c0368710d0ae..cd5396b4261a85e212bf36b2c5376d81b5881216 100644 (file)
 #include <vtkPerspectiveTransform.h> 
 #include <vtkMatrix4x4.h>
 
+#include <QtxRubberBand.h>
+
 #include <QPixmap>
 #include <QWidget>
-#include <QRubberBand>
 #include <QPolygon>
 
 #include <algorithm>
@@ -1616,17 +1617,28 @@ void SVTK_InteractorStyle::DominantCombinedSwitch()
 */
 void SVTK_InteractorStyle::drawRect()
 {
-  if ( !myRectBand ) {
-    myRectBand = new QRubberBand( QRubberBand::Rectangle, GetRenderWidget() );
-    QPalette palette;
-    palette.setColor(myRectBand->foregroundRole(), Qt::white);
-    myRectBand->setPalette(palette);
-  }
-  myRectBand->hide();
+  if ( !myRectBand )
+    myRectBand = new QtxRectRubberBand( GetRenderWidget() );
 
+  myRectBand->setUpdatesEnabled ( false );
   QRect aRect = SUIT_Tools::makeRect(myPoint.x(), myPoint.y(), myOtherPoint.x(), myOtherPoint.y());
-  myRectBand->setGeometry( aRect );
-  myRectBand->setVisible( aRect.isValid() );
+  myRectBand->initGeometry( aRect );
+
+  if ( !myRectBand->isVisible() )
+    myRectBand->show();
+
+  myRectBand->setUpdatesEnabled ( true );
+}
+
+/*!
+  \brief Delete rubber band on the end on the dragging operation.
+*/
+void SVTK_InteractorStyle::endDrawRect()
+{
+  if ( myRectBand ) {
+    myRectBand->clearGeometry();
+    myRectBand->hide();
+  }
 }
 
 bool isIntersect( const QPoint& theStart1, const QPoint& theEnd1,
@@ -1754,17 +1766,6 @@ void SVTK_InteractorStyle::drawPolygon()
   }
 }
 
-/*!
-  \brief Delete rubber band on the end on the dragging operation.
-*/
-void SVTK_InteractorStyle::endDrawRect()
-{
-  if ( myRectBand ) myRectBand->hide();
-
-  delete myRectBand;
-  myRectBand = 0;
-}
-
 /*!
   \brief Delete rubber band on the end on the dragging operation.
 */
index 08ae6f021dcafff6cc112bf4de68eb37716ca2c3..360e0841a336f5de61d45992331bea5e86bf9263 100644 (file)
@@ -134,7 +134,7 @@ class SVTK_Selector;
 class SVTK_GenericRenderWindowInteractor;
 class SVTK_Actor;
 
-class QRubberBand;
+class QtxRectRubberBand;
 
 #define VTK_INTERACTOR_STYLE_CAMERA_NONE    0
 #define VTK_INTERACTOR_STYLE_CAMERA_ROTATE  1
@@ -371,7 +371,7 @@ class SVTK_EXPORT SVTK_InteractorStyle: public vtkInteractorStyle
   double                          myBBCenter[3];
   bool                            myBBFirstCheck;
 
-  QRubberBand*                    myRectBand; //!< selection rectangle rubber band
+  QtxRectRubberBand*              myRectBand; //!< selection rectangle rubber band
   QtxPolyRubberBand*              myPolygonBand; //!< polygonal selection
   QVector<QPoint>                 myPolygonPoints;
   PolygonState                    myPoligonState;