Changeset - a61946d36dde
[Not reviewed]
default
0 1 0
Hasan Yavuz Ă–ZDERYA - 9 years ago 2017-02-25 07:39:04
hy@ozderya.net
show tracker text when picking on scales
1 file changed with 36 insertions and 5 deletions:
0 comments (0 inline, 0 general)
src/scalepicker.cpp
Show inline comments
 
@@ -20,12 +20,13 @@
 
#include <QEvent>
 
#include <QMouseEvent>
 
#include <QPainter>
 
#include <qwt_scale_widget.h>
 
#include <qwt_scale_map.h>
 
#include <qwt_scale_div.h>
 
#include <qwt_text.h>
 
#include <math.h>
 

	
 
#include "scalepicker.h"
 

	
 
// minimum size for pick (in pixels)
 
#define MIN_PICK_SIZE (2)
 
@@ -104,13 +105,13 @@ bool ScalePicker::eventFilter(QObject* o
 

	
 
        // do snapping unless Shift is pressed
 
        if (! (mouseEvent->modifiers() & Qt::ShiftModifier))
 
        {
 
            for (auto sp : snapPoints)
 
            {
 
                if (fabs(posPx-sp) <= SNAP_DISTANCE)
 
                if (std::abs(posPx-sp) <= SNAP_DISTANCE)
 
                {
 
                    posPx = sp;
 
                    break;
 
                }
 
            }
 
        }
 
@@ -133,15 +134,15 @@ bool ScalePicker::eventFilter(QObject* o
 
            {
 
                started = true;
 
                emit pickStarted(pos);
 
            }
 
            else if (started)
 
            {
 
                pickerOverlay->updateOverlay();
 
                emit picking(firstPos, pos);
 
            }
 
            pickerOverlay->updateOverlay();
 
            scaleOverlay->updateOverlay();
 
        }
 
        else // event->type() == QEvent::MouseButtonRelease
 
        {
 
            pressed = false;
 
            if (started)
 
@@ -153,28 +154,31 @@ bool ScalePicker::eventFilter(QObject* o
 
        }
 
        return true;
 
    }
 
    else if (event->type() == QEvent::Leave)
 
    {
 
        scaleOverlay->updateOverlay();
 
        pickerOverlay->updateOverlay();
 
        return true;
 
    }
 
    else
 
    {
 
        return QObject::eventFilter(object, event);
 
    }
 
}
 

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

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

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

	
 
        QRect rect;
 
        if (_scaleWidget->alignment() == QwtScaleDraw::BottomScale ||
 
@@ -186,14 +190,41 @@ void ScalePicker::drawPlotOverlay(QPaint
 
        else // vertical
 
        {
 
            int width = painter->device()->width();
 
            rect = QRect(0, posCanvasPx(firstPosPx), width, currentPosPx-firstPosPx);
 
        }
 
        painter->drawRect(rect);
 
        painter->restore();
 
    }
 
    else if (_scaleWidget->underMouse())
 
    {
 
        QwtText text(QString("%1").arg(position(currentPosPx)));
 
        int canvasPosPx = posCanvasPx(currentPosPx);
 
        auto tsize = text.textSize(painter->font());
 
        QPointF topLeft;
 

	
 
        if (_scaleWidget->alignment() == QwtScaleDraw::BottomScale)
 
        {
 
            int height = painter->device()->height();
 
            topLeft = QPointF(canvasPosPx-tsize.width()/2, height-tsize.height());
 
        }
 
        else if (_scaleWidget->alignment() == QwtScaleDraw::TopScale)
 
        {
 
            topLeft = QPointF(canvasPosPx-tsize.width()/2, 0);
 
        }
 
        else if (_scaleWidget->alignment() == QwtScaleDraw::LeftScale)
 
        {
 
            topLeft = QPointF(TEXT_MARGIN, canvasPosPx-tsize.height()/2);
 
        }
 
        else                    // right scale
 
        {
 
            int width = painter->device()->width();
 
            topLeft = QPointF(width-tsize.width()-TEXT_MARGIN, canvasPosPx-tsize.height()/2);
 
        }
 
        text.draw(painter, QRectF(topLeft, tsize));
 
    }
 
    painter->restore();
 
}
 

	
 
void ScalePicker::drawScaleOverlay(QPainter* painter)
 
{
 
    painter->save();
 

	
0 comments (0 inline, 0 general)