Changeset - 4a2d5b5032ff
[Not reviewed]
default
0 1 0
Hasan Yavuz Ă–ZDERYA - 9 years ago 2017-04-01 13:18:04
hy@ozderya.net
prevent 0 width zoom which causes a confusing view
1 file changed with 6 insertions and 1 deletions:
0 comments (0 inline, 0 general)
src/scalepicker.cpp
Show inline comments
 
@@ -99,98 +99,103 @@ bool ScalePicker::eventFilter(QObject* o
 
        event->type() == QEvent::MouseMove)
 
    {
 
        updateSnapPoints();
 

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

	
 
        // do snapping unless Shift is pressed
 
        if (! (mouseEvent->modifiers() & Qt::ShiftModifier))
 
        {
 
            for (auto sp : snapPoints)
 
            {
 
                if (std::abs(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;
 
            }
 
            pickerOverlay->updateOverlay();
 
            scaleOverlay->updateOverlay();
 
        }
 
        else // event->type() == QEvent::MouseButtonRelease
 
        {
 
            pressed = false;
 
            if (started)
 
            {
 
                // finalize
 
                started = false;
 
                emit picked(firstPos, pos);
 
                if (firstPos != pos) // ignore 0 width zoom
 
                {
 
                    emit picked(firstPos, pos);
 
                }
 
            }
 
            pickerOverlay->updateOverlay();
 
            scaleOverlay->updateOverlay();
 
        }
 
        return true;
 
    }
 
    else if (event->type() == QEvent::Leave)
 
    {
 
        scaleOverlay->updateOverlay();
 
        pickerOverlay->updateOverlay();
 
        return true;
 
    }
 
    else
 
    {
 
        return QObject::eventFilter(object, event);
 
    }
 
}
 

	
 
const int TEXT_MARGIN = 4;
 

	
 
void ScalePicker::drawPlotOverlay(QPainter* painter)
 
{
 
    const double FILL_ALPHA = 0.2;
 

	
 
    painter->save();
 
    painter->setPen(_pen);
 

	
 
    if (started)
 
    {
 
        QColor color = _pen.color();
 
        color.setAlphaF(FILL_ALPHA);
 
        painter->setBrush(color);
 

	
 
        QRect rect;
 
        QwtText text = trackerText();
 
        auto tSize = text.textSize(painter->font());
 

	
 
        if (_scaleWidget->alignment() == QwtScaleDraw::BottomScale ||
 
            _scaleWidget->alignment() == QwtScaleDraw::TopScale)
 
        {
 
            int canvasHeight = painter->device()->height();
 
            int pickWidth = currentPosPx-firstPosPx;
 
            rect = QRect(posCanvasPx(firstPosPx), 0, pickWidth, canvasHeight);
 
        }
 
        else // vertical
 
        {
 
            int canvasWidth = painter->device()->width();
 
            int pickHeight = currentPosPx-firstPosPx;
 
            rect = QRect(0, posCanvasPx(firstPosPx), canvasWidth, pickHeight);
 
        }
 
        painter->drawRect(rect);
0 comments (0 inline, 0 general)