Changeset - 09bde1185cf5
[Not reviewed]
default
0 1 0
Hasan Yavuz Ă–ZDERYA - 10 years ago 2015-11-07 16:34:28
hy@ozderya.net
disable snapping with shift key
1 file changed with 8 insertions and 5 deletions:
0 comments (0 inline, 0 general)
scalepicker.cpp
Show inline comments
 
@@ -81,55 +81,58 @@ void ScaleOverlay::drawOverlay(QPainter*
 
ScalePicker::ScalePicker(QwtScaleWidget* scaleWidget, QWidget* canvas) :
 
    QObject(scaleWidget)
 
{
 
    _scaleWidget = scaleWidget;
 
    _canvas = canvas;
 
    scaleWidget->installEventFilter(this);
 
    scaleWidget->setMouseTracking(true);
 
    pickerOverlay = new PlotOverlay(canvas, this);
 
    scaleOverlay = new ScaleOverlay(scaleWidget, this);
 
    started = false;
 
    pressed = false;
 
}
 

	
 
bool ScalePicker::eventFilter(QObject* object, QEvent* event)
 
{
 
    if (event->type() == QEvent::MouseButtonPress ||
 
        event->type() == QEvent::MouseButtonRelease ||
 
        event->type() == QEvent::MouseMove)
 
    {
 
        updateSnapPoints();
 

	
 
        QMouseEvent* mouseEvent = (QMouseEvent*) event;
 
        double posPx = this->positionPx(mouseEvent);
 

	
 
        // do snapping
 
        for (double sp : snapPoints)
 
        // do snapping unless Shift is pressed
 
        if (! (mouseEvent->modifiers() & Qt::ShiftModifier))
 
        {
 
            if (fabs(posPx-sp) <= SNAP_DISTANCE)
 
            for (double sp : snapPoints)
 
            {
 
                posPx = sp;
 
                break;
 
                if (fabs(posPx-sp) <= SNAP_DISTANCE)
 
                {
 
                    posPx = sp;
 
                    break;
 
                }
 
            }
 
        }
 

	
 
        double pos = this->position(posPx);
 
        currentPosPx = posPx;
 

	
 
        if (event->type() == QEvent::MouseButtonPress &&
 
            mouseEvent->button() == Qt::LeftButton)
 
        {
 
            pressed = true; // not yet started
 
            firstPos = pos;
 
            firstPosPx = posPx;
 
        }
 
        else if (event->type() == QEvent::MouseMove)
 
        {
 
            // make sure pick size is big enough, so that just
 
            // clicking won't trigger pick
 
            if (!started && pressed && (fabs(posPx-firstPosPx) > MIN_PICK_SIZE))
 
            {
 
                started = true;
 
                emit pickStarted(pos);
 
            }
 
            else if (started)
 
            {
0 comments (0 inline, 0 general)