Skip to content

Commit

Permalink
Shift + drag over the start or end handle will move the whole range w…
Browse files Browse the repository at this point in the history
…ithout

changing its width
  • Loading branch information
nyalldawson committed Nov 26, 2020
1 parent aa832aa commit ac5295c
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 2 deletions.
13 changes: 11 additions & 2 deletions src/gui/qgsrangeslider.cpp
Expand Up @@ -430,21 +430,29 @@ void QgsRangeSlider::mousePressEvent( QMouseEvent *event )

mPreDragLowerValue = mLowerValue;
mPreDragUpperValue = mUpperValue;
mRangeDragOffset = 0;

if ( overLowerControl && overUpperControl )
if ( ( overLowerControl || overUpperControl ) && event->modifiers() & Qt::ShiftModifier )
{
mActiveControl = Range; // shift + drag over handle moves the whole range
mRangeDragOffset = overUpperControl ? mUpperClickOffset : mLowerClickOffset;
}
else if ( overLowerControl && overUpperControl )
mActiveControl = Both;
else if ( overLowerControl )
mActiveControl = Lower;
else if ( overUpperControl )
mActiveControl = Upper;
else if ( overSelectedRange )
{
mActiveControl = Range;
}
else
mActiveControl = None;

if ( mActiveControl != None )
{
mStartDragPos = pixelPosToRangeValue( pick( event->pos() ) );
mStartDragPos = pixelPosToRangeValue( pick( event->pos() ) - mRangeDragOffset );
}
}

Expand Down Expand Up @@ -531,6 +539,7 @@ void QgsRangeSlider::mouseMoveEvent( QMouseEvent *event )

case Range:
{
newPosition = pixelPosToRangeValue( pick( event->pos() ) - mRangeDragOffset ) ;
int delta = newPosition - mStartDragPos;

if ( delta > 0 )
Expand Down
1 change: 1 addition & 0 deletions src/gui/qgsrangeslider.h
Expand Up @@ -238,6 +238,7 @@ class GUI_EXPORT QgsRangeSlider : public QWidget
int mStartDragPos = -1;
int mLowerClickOffset = 0;
int mUpperClickOffset = 0;
int mRangeDragOffset = 0;
int mPreDragLowerValue = -1;
int mPreDragUpperValue = -1;
Control mHoverControl = None;
Expand Down

0 comments on commit ac5295c

Please sign in to comment.