X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSVTK%2FSVTK_RenderWindowInteractor.cxx;h=ac07e118c22a87257ff3833547f9a329635b537c;hb=e6caa123c65e3c4a3017364ec5bb4225fd898465;hp=314406dd6d6838ded80eb302ca430ab52c67bf97;hpb=e07448c48ea5b2127e34fc7b8c3427d01c7ce17b;p=modules%2Fgui.git diff --git a/src/SVTK/SVTK_RenderWindowInteractor.cxx b/src/SVTK/SVTK_RenderWindowInteractor.cxx index 314406dd6..ac07e118c 100644 --- a/src/SVTK/SVTK_RenderWindowInteractor.cxx +++ b/src/SVTK/SVTK_RenderWindowInteractor.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -6,7 +6,7 @@ // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -57,6 +57,10 @@ static bool GENERATE_SUIT_EVENTS = true; static bool FOCUS_UNDER_MOUSE = false; +// workaround about the bug in vtkImplicitPlaneWidget class +// that eats mouse button release event +// causing clipping plane preview in SMESH sticking up +#define Fix_Of_vtkImplicitPlaneWidget_bug /*! Constructor @@ -292,8 +296,22 @@ QVTK_RenderWindowInteractor GetDevice()->LeftButtonReleaseEvent(); else if( event->button() & Qt::MidButton ) GetDevice()->MiddleButtonReleaseEvent(); - else if( event->button() & Qt::RightButton ) + else if( event->button() & Qt::RightButton ) { +#if defined(Fix_Of_vtkImplicitPlaneWidget_bug) + GetDevice()->SetEventInformationFlipY( -99999, -99999, + event->modifiers() & Qt::ControlModifier, + event->modifiers() & Qt::ShiftModifier); + bool blocked = blockSignals( true ); + GetDevice()->LeftButtonPressEvent(); + GetDevice()->LeftButtonReleaseEvent(); + blockSignals( blocked ); + GetDevice()->SetEventInformationFlipY(event->x(), + event->y(), + event->modifiers() & Qt::ControlModifier, + event->modifiers() & Qt::ShiftModifier); +#endif GetDevice()->RightButtonReleaseEvent(); + } } @@ -724,17 +742,25 @@ void SVTK_RenderWindowInteractor ::mouseReleaseEvent( QMouseEvent *event ) { + SVTK_InteractorStyle* style = 0; bool aRightBtn = event->button() == Qt::RightButton; bool isOperation = false; + bool isPolygonalSelection = false; if( aRightBtn && GetInteractorStyle()) { - SVTK_InteractorStyle* style = dynamic_cast( GetInteractorStyle() ); + style = dynamic_cast( GetInteractorStyle() ); if ( style ) isOperation = style->CurrentState() != VTK_INTERACTOR_STYLE_CAMERA_NONE; } QVTK_RenderWindowInteractor::mouseReleaseEvent(event); - if ( aRightBtn && !isOperation && !( event->modifiers() & Qt::ControlModifier ) && + if ( style ) { + isPolygonalSelection = style->GetPolygonState() == Finished; + style->SetPolygonState( Disable ); + } + + if ( aRightBtn && !isOperation && !isPolygonalSelection && + !( event->modifiers() & Qt::ControlModifier ) && !( event->modifiers() & Qt::ShiftModifier ) ) { QContextMenuEvent aEvent( QContextMenuEvent::Mouse, event->pos(), event->globalPos() ); @@ -752,6 +778,12 @@ void SVTK_RenderWindowInteractor ::mouseDoubleClickEvent( QMouseEvent* event ) { + if( GetInteractorStyle() && event->button() == Qt::LeftButton ) { + SVTK_InteractorStyle* style = dynamic_cast( GetInteractorStyle() ); + if ( style ) + style->OnMouseButtonDoubleClick(); + } + QVTK_RenderWindowInteractor::mouseDoubleClickEvent(event); if(GENERATE_SUIT_EVENTS)