From 225c8bdd565d2f42601320449966651d05b81203 Mon Sep 17 00:00:00 2001 From: Jason Harris Date: Wed, 25 Oct 2006 01:17:21 +0000 Subject: [PATCH] Convert plotting data to floating-point variants (QPoint-->QPointF, QPolygon-->QPolygonF, etc). Moved mapToPoint() definition from kplotwidget.h to kplotwidget.cpp. CCMAIL: kde-edu@kde.org svn path=/trunk/KDE/kdeedu/libkdeedu/; revision=598923 --- kdeeduplot/kplotwidget.cpp | 21 ++++++++++++++------- kdeeduplot/kplotwidget.h | 6 +----- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/kdeeduplot/kplotwidget.cpp b/kdeeduplot/kplotwidget.cpp index dff2dbc..557dd37 100644 --- a/kdeeduplot/kplotwidget.cpp +++ b/kdeeduplot/kplotwidget.cpp @@ -190,7 +190,7 @@ QList KPlotWidget::pointsUnderPoint( const QPoint& p ) const { continue; for ( QList::ConstIterator dpit = po->points()->begin(); dpit != po->points()->constEnd(); ++dpit ) { - if ( ( p - mapToPoint( **dpit ) ).manhattanLength() <= 4 ) + if ( ( p - mapToPoint( **dpit ).toPoint() ).manhattanLength() <= 4 ) pts << po; } } @@ -226,6 +226,12 @@ void KPlotWidget::setPixRect() { PixRect = QRect( 0, 0, newWidth, newHeight ); } +QPointF KPlotWidget::mapToPoint( const QPointF& p ) const { + float px = PixRect.left() + PixRect.width()*( p.x() - DataRect.x() )/DataRect.width(); + float py = PixRect.top() + PixRect.height()*( DataRect.y() + DataRect.height() - p.y() )/DataRect.height(); + return QPointF( px, py ); +} + void KPlotWidget::paintEvent( QPaintEvent *e ) { // let QFrame draw its default stuff (like the frame) QFrame::paintEvent( e ); @@ -260,9 +266,9 @@ void KPlotWidget::drawObjects( QPainter *p ) { for ( QList::ConstIterator dpit = po->points()->begin(); dpit != po->points()->constEnd(); ++dpit ) { - QPoint q = mapToPoint( **dpit ); - int x1 = q.x() - po->size()/2; - int y1 = q.y() - po->size()/2; + QPointF q = mapToPoint( **dpit ); + float x1 = q.x() - 0.5*po->size(); + float y1 = q.y() - 0.5*po->size(); switch( po->param() ) { case KPlotObject::CIRCLE : p->drawEllipse( x1, y1, po->size(), po->size() ); break; @@ -279,16 +285,17 @@ void KPlotWidget::drawObjects( QPainter *p ) { case KPlotObject::CURVE : { p->setPen( QPen( po->color(), po->size(), (Qt::PenStyle)po->param() ) ); - QPolygon poly; + QPolygonF poly; for ( QList::ConstIterator dpit = po->points()->begin(); dpit != po->points()->constEnd(); ++dpit ) poly << mapToPoint( **dpit ); p->drawPolyline( poly ); break; } + //FIXME: implement non-overlapping labels case KPlotObject::LABEL : //draw label centered at point in x, and slightly below point in y. { - QPoint q = mapToPoint( *(po->points()->first()) ); + QPointF q = mapToPoint( *(po->points()->first()) ); p->drawText( q.x()-20, q.y()+6, 40, 10, Qt::AlignCenter | Qt::TextDontClip, po->name() ); break; } @@ -298,7 +305,7 @@ void KPlotWidget::drawObjects( QPainter *p ) { p->setPen( QPen( po->color(), po->size(), (Qt::PenStyle)po->param() ) ); p->setBrush( po->color() ); - QPolygon a( po->count() ); + QPolygonF a( po->count() ); for ( QList::ConstIterator dpit = po->points()->begin(); dpit != po->points()->constEnd(); ++dpit ) a << mapToPoint( **dpit ); diff --git a/kdeeduplot/kplotwidget.h b/kdeeduplot/kplotwidget.h index c1339e3..a4a198b 100644 --- a/kdeeduplot/kplotwidget.h +++ b/kdeeduplot/kplotwidget.h @@ -292,11 +292,7 @@ public: * Used mainly when drawing. * @return the coordinate in the pixel coordinate system */ - QPoint mapToPoint( const QPointF& p ) const { - int px = PixRect.left() + int( PixRect.width()*( p.x() - DataRect.x() )/DataRect.width() ); - int py = PixRect.top() + int( PixRect.height()*( DataRect.y() + DataRect.height() - p.y() )/DataRect.height() ); - return QPoint( px, py ); - } + QPointF mapToPoint( const QPointF& p ) const; /** * Retrieve the pointer to the axis of type @p a. -- 2.47.3