Changeset - 02b5bd46073f
[Not reviewed]
default
0 2 0
Hasan Yavuz ÖZDERYA - 9 years ago 2017-02-24 15:47:13
hy@ozderya.net
draw triangles on scale
2 files changed with 39 insertions and 19 deletions:
0 comments (0 inline, 0 general)
src/scalepicker.cpp
Show inline comments
 
/*
 
  Copyright © 2015 Hasan Yavuz Özderya
 
  Copyright © 2017 Hasan Yavuz Özderya
 

	
 
  This file is part of serialplot.
 

	
 
@@ -191,27 +191,46 @@ void ScalePicker::drawPlotOverlay(QPaint
 
void ScalePicker::drawScaleOverlay(QPainter* painter)
 
{
 
    painter->save();
 
    painter->setPen(_pen);
 

	
 
    if (_scaleWidget->alignment() == QwtScaleDraw::BottomScale ||
 
        _scaleWidget->alignment() == QwtScaleDraw::TopScale)
 
    {
 
        int height = painter->device()->height();
 
        if (started) painter->drawLine(firstPosPx, 0, firstPosPx, height);
 
        if (started || _scaleWidget->underMouse())
 
        {
 
            painter->drawLine(currentPosPx, 0, currentPosPx, height);
 
        }
 
    }
 
    else // vertical
 
    // rotate & adjust coordinate system for vertical drawing
 
    if (_scaleWidget->alignment() == QwtScaleDraw::LeftScale ||
 
        _scaleWidget->alignment() == QwtScaleDraw::RightScale) // vertical
 
    {
 
        int width = painter->device()->width();
 
        if (started) painter->drawLine(0, firstPosPx, width, firstPosPx);
 
        if (started || _scaleWidget->underMouse())
 
        painter->rotate(90);
 
        painter->translate(0, -width);
 
    }
 

	
 
    // draw the indicators
 
    if (started) drawTriangle(painter, firstPosPx);
 
    if (started || _scaleWidget->underMouse())
 
    {
 
        drawTriangle(painter, currentPosPx);
 
    }
 

	
 
    painter->restore();
 
}
 

	
 
void ScalePicker::drawTriangle(QPainter* painter, int position)
 
{
 
    const double tan60 = 1.732;
 
    const double trsize = 10;
 
    const int TRIANGLE_NUM_POINTS = 3;
 
    const int MARGIN = 2;
 
    const QPointF points[TRIANGLE_NUM_POINTS] =
 
        {
 
            painter->drawLine(0, currentPosPx, width, currentPosPx);
 
        }
 
    }
 
            {0, 0},
 
            {-trsize/tan60 , trsize},
 
            {trsize/tan60 , trsize}
 
        };
 

	
 
    painter->save();
 
    painter->setPen(Qt::NoPen);
 
    painter->setBrush(_scaleWidget->palette().windowText());
 
    painter->setRenderHint(QPainter::Antialiasing);
 

	
 
    painter->translate(position, MARGIN);
 
    painter->drawPolygon(points, TRIANGLE_NUM_POINTS);
 

	
 
    painter->restore();
 
}
src/scalepicker.h
Show inline comments
 
/*
 
  Copyright © 2015 Hasan Yavuz Özderya
 
  Copyright © 2017 Hasan Yavuz Özderya
 

	
 
  This file is part of serialplot.
 

	
 
@@ -62,6 +62,7 @@ private:
 
    double position(double); // returns the axis mouse position relative to plot coordinates
 
    int positionPx(QMouseEvent*); // returns the axis mouse position in pixels
 
    double posCanvasPx(double pos); // returns the given position in canvas coordinates
 
    void drawTriangle(QPainter* painter, int position);
 

	
 
private slots:
 
    void updateSnapPoints();
0 comments (0 inline, 0 general)