From 714c8d8f4a0ec9eaabcd7f89d087faa1e4f17c21 Mon Sep 17 00:00:00 2001 From: Tom Cowland Date: Thu, 10 Dec 2020 16:46:20 +0000 Subject: [PATCH] GafferUI : Fix use of Gaffer Widget mouse event positions Fixes some cursor offsets introduced since we fixed the coordinates reported in `GafferUI.ButtonEvent` in #4053. --- python/GafferUI/PathListingWidget.py | 24 +++++++++++++++---- .../GafferUI/SpreadsheetUI/_PlugTableView.py | 21 ++++++++++++---- python/GafferUI/VectorDataWidget.py | 16 ++++++++++--- 3 files changed, 49 insertions(+), 12 deletions(-) diff --git a/python/GafferUI/PathListingWidget.py b/python/GafferUI/PathListingWidget.py index 9716922ca57..be0bfa30eef 100644 --- a/python/GafferUI/PathListingWidget.py +++ b/python/GafferUI/PathListingWidget.py @@ -172,12 +172,12 @@ def scrollToPath( self, path ) : # exists at that position. def pathAt( self, position ) : - position = self._qtWidget().viewport().mapFrom( + point = self._qtWidget().viewport().mapFrom( self._qtWidget(), QtCore.QPoint( position.x, position.y ) ) - index = self._qtWidget().indexAt( position ) + index = self._qtWidget().indexAt( point ) if not index.isValid() : return None @@ -514,7 +514,12 @@ def __buttonPress( self, widget, event ) : # This is further complicated by the fact that the button presses we simulate for Qt # will end up back in this function, so we have to be careful to ignore those. - index = self._qtWidget().indexAt( QtCore.QPoint( event.line.p0.x, event.line.p0.y ) ) + point = self._qtWidget().viewport().mapFrom( + self._qtWidget(), + QtCore.QPoint( event.line.p0.x, event.line.p0.y ) + ) + index = self._qtWidget().indexAt( point ) + if self._qtWidget().selectionModel().isSelected( index ) : # case 1 : existing selection. self.__borrowedButtonPress = event @@ -551,7 +556,11 @@ def __dragBegin( self, widget, event ) : self.__borrowedButtonPress = None # nothing to drag if there's no valid list entry under the pointer - index = self._qtWidget().indexAt( QtCore.QPoint( event.line.p0.x, event.line.p0.y ) ) + point = self._qtWidget().viewport().mapFrom( + self._qtWidget(), + QtCore.QPoint( event.line.p0.x, event.line.p0.y ) + ) + index = self._qtWidget().indexAt( point ) if not index.isValid() : return None @@ -568,9 +577,14 @@ def __dragEnd( self, widget, event ) : def __emitButtonPress( self, event ) : + point = self._qtWidget().viewport().mapFrom( + self._qtWidget(), + QtCore.QPoint( event.line.p0.x, event.line.p0.y ) + ) + qEvent = QtGui.QMouseEvent( QtCore.QEvent.MouseButtonPress, - QtCore.QPoint( event.line.p0.x, event.line.p0.y ), + point, QtCore.Qt.LeftButton, QtCore.Qt.LeftButton, QtCore.Qt.NoModifier diff --git a/python/GafferUI/SpreadsheetUI/_PlugTableView.py b/python/GafferUI/SpreadsheetUI/_PlugTableView.py index efc81089394..345ade3de52 100644 --- a/python/GafferUI/SpreadsheetUI/_PlugTableView.py +++ b/python/GafferUI/SpreadsheetUI/_PlugTableView.py @@ -146,7 +146,11 @@ def __init__( self, selectionModel, mode, **kw ) : def plugAt( self, position ) : - index = self._qtWidget().indexAt( QtCore.QPoint( position.x, position.y ) ) + point = self._qtWidget().viewport().mapFrom( + self._qtWidget(), + QtCore.QPoint( position.x, position.y ) + ) + index = self._qtWidget().indexAt( point ) return self._qtWidget().model().plugForIndex( index ) def selectedPlugs( self ) : @@ -357,7 +361,11 @@ def __buttonPress( self, widget, event ) : if event.buttons != event.Buttons.Right : return False - index = self._qtWidget().indexAt( QtCore.QPoint( event.line.p0.x, event.line.p0.y ) ) + point = self._qtWidget().viewport().mapFrom( + self._qtWidget(), + QtCore.QPoint( event.line.p0.x, event.line.p0.y ) + ) + index = self._qtWidget().indexAt( point ) # Disabled items won't show up in the selection model if not index.flags() & QtCore.Qt.ItemIsEnabled : @@ -417,7 +425,11 @@ def __buttonDoubleClick( self, widget, event ) : # - Presets: Return/Double click displays the popup menu, requires right-click # to display the edit window. - index = self._qtWidget().indexAt( QtCore.QPoint( event.line.p0.x, event.line.p0.y ) ) + point = self._qtWidget().viewport().mapFrom( + self._qtWidget(), + QtCore.QPoint( event.line.p0.x, event.line.p0.y ) + ) + index = self._qtWidget().indexAt( point ) if not index.flags() & QtCore.Qt.ItemIsEnabled : return True @@ -504,7 +516,8 @@ def __headerButtonPress( self, header, event ) : if event.buttons != event.Buttons.Right : return False - cellPlug = self.plugAt( event.line.p0 ) + column = self._qtWidget().columnAt( event.line.p0.x ) + cellPlug = self._qtWidget().model().plugForIndex( self._qtWidget().model().index( 0, column ) ) assert( cellPlug.ancestor( Gaffer.Spreadsheet.RowPlug ) == cellPlug.ancestor( Gaffer.Spreadsheet.RowsPlug ).defaultRow() ) menuDefinition = IECore.MenuDefinition() diff --git a/python/GafferUI/VectorDataWidget.py b/python/GafferUI/VectorDataWidget.py index 9479cc7b6b2..2a823074f4c 100644 --- a/python/GafferUI/VectorDataWidget.py +++ b/python/GafferUI/VectorDataWidget.py @@ -367,7 +367,8 @@ def getDragPointer( self ) : # data returned by getData(). def indexAt( self, position ) : - index = self.__tableView.indexAt( QtCore.QPoint( position[0], position[1] ) ) + point = self.__tableView.viewport().mapFrom( self.__tableView, QtCore.QPoint( position[0], position[1] ) ) + index = self.__tableView.indexAt( point ) return ( index.column(), index.row() ) ## Returns a list of ( columnIndex, rowIndex ) for the currently @@ -662,7 +663,11 @@ def __buttonPress( self, widget, event ) : # This is further complicated by the fact that the button presses we simulate for Qt # will end up back in this function, so we have to be careful to ignore those. - index = self.__tableView.indexAt( QtCore.QPoint( event.line.p0.x, event.line.p0.y ) ) + point = self.__tableView.viewport().mapFrom( + self.__tableView, + QtCore.QPoint( event.line.p0.x, event.line.p0.y ) + ) + index = self.__tableView.indexAt( point ) if self.__tableView.selectionModel().isSelected( index ) : # case 1 : existing selection. self.__borrowedButtonPress = event @@ -714,9 +719,14 @@ def __dragEnd( self, widget, event ) : def __emitButtonPress( self, event ) : + point = self.__tableView.viewport().mapFrom( + self.__tableView, + QtCore.QPoint( event.line.p0.x, event.line.p0.y ) + ) + qEvent = QtGui.QMouseEvent( QtCore.QEvent.MouseButtonPress, - QtCore.QPoint( event.line.p0.x, event.line.p0.y ), + point, QtCore.Qt.LeftButton, QtCore.Qt.LeftButton, QtCore.Qt.NoModifier