28
28
QgsComposerMouseHandles::QgsComposerMouseHandles ( QgsComposition *composition ) : QObject( 0 ),
29
29
QGraphicsRectItem( 0 ),
30
30
mComposition( composition ),
31
+ mGraphicsView( 0 ),
31
32
mBeginHandleWidth( 0 ),
32
33
mBeginHandleHeight( 0 ),
33
34
mIsDragging( false ),
@@ -47,6 +48,29 @@ QgsComposerMouseHandles::~QgsComposerMouseHandles()
47
48
48
49
}
49
50
51
+ QGraphicsView* QgsComposerMouseHandles::graphicsView ()
52
+ {
53
+ // have we already found the current view?
54
+ if ( mGraphicsView )
55
+ {
56
+ return mGraphicsView ;
57
+ }
58
+
59
+ // otherwise, try and find current view attached to composition
60
+ if ( scene () )
61
+ {
62
+ QList<QGraphicsView*> viewList = scene ()->views ();
63
+ if ( viewList.size () > 0 )
64
+ {
65
+ mGraphicsView = viewList.at ( 0 );
66
+ return mGraphicsView ;
67
+ }
68
+ }
69
+
70
+ // no view attached to composition
71
+ return 0 ;
72
+ }
73
+
50
74
void QgsComposerMouseHandles::paint ( QPainter* painter, const QStyleOptionGraphicsItem* itemStyle, QWidget* pWidget )
51
75
{
52
76
Q_UNUSED ( itemStyle );
@@ -216,13 +240,11 @@ QRectF QgsComposerMouseHandles::selectionBounds() const
216
240
return bounds;
217
241
}
218
242
219
- double QgsComposerMouseHandles::rectHandlerBorderTolerance () const
243
+ double QgsComposerMouseHandles::rectHandlerBorderTolerance ()
220
244
{
221
245
// calculate size for resize handles
222
246
// get view scale factor
223
- QList<QGraphicsView*> viewList = mComposition ->views ();
224
- QGraphicsView* currentView = viewList.at ( 0 );
225
- double viewScaleFactor = currentView->transform ().m11 ();
247
+ double viewScaleFactor = graphicsView ()->transform ().m11 ();
226
248
227
249
// size of handle boxes depends on zoom level in composer view
228
250
double rectHandlerSize = 10.0 / viewScaleFactor;
@@ -357,7 +379,24 @@ QgsComposerMouseHandles::MouseAction QgsComposerMouseHandles::mouseActionForScen
357
379
358
380
void QgsComposerMouseHandles::hoverMoveEvent ( QGraphicsSceneHoverEvent * event )
359
381
{
360
- setCursor ( cursorForPosition ( event->pos () ) );
382
+ setViewportCursor ( cursorForPosition ( event->pos () ) );
383
+ }
384
+
385
+ void QgsComposerMouseHandles::hoverLeaveEvent ( QGraphicsSceneHoverEvent * event )
386
+ {
387
+ Q_UNUSED ( event );
388
+ setViewportCursor ( Qt::ArrowCursor );
389
+ }
390
+
391
+ void QgsComposerMouseHandles::setViewportCursor ( Qt::CursorShape cursor )
392
+ {
393
+ // workaround qt bug #3732 by setting cursor for QGraphicsView viewport,
394
+ // rather then setting it directly here
395
+
396
+ if ( !mComposition ->preventCursorChange () )
397
+ {
398
+ graphicsView ()->viewport ()->setCursor ( cursor );
399
+ }
361
400
}
362
401
363
402
void QgsComposerMouseHandles::mouseMoveEvent ( QGraphicsSceneMouseEvent* event )
@@ -466,7 +505,7 @@ void QgsComposerMouseHandles::mouseReleaseEvent( QGraphicsSceneMouseEvent* event
466
505
467
506
// reset default action
468
507
mCurrentMouseMoveAction = QgsComposerMouseHandles::MoveItem;
469
- setCursor ( Qt::ArrowCursor );
508
+ setViewportCursor ( Qt::ArrowCursor );
470
509
// redraw handles
471
510
resetTransform ();
472
511
updateHandles ();
0 commit comments