static inline void qwtDrawPixmapSymbols( QPainter *painter, const QPointF *points, int numPoints, const QwtSymbol &symbol ) { QSize size = symbol.size(); if ( size.isEmpty() ) size = symbol.pixmap().size(); const QTransform transform = painter->transform(); if ( transform.isScaling() ) { const QRect r( 0, 0, size.width(), size.height() ); size = transform.mapRect( r ).size(); } QPixmap pm = symbol.pixmap(); if ( pm.size() != size ) pm = pm.scaled( size ); QPointF pinPoint( 0.5 * size.width(), 0.5 * size.height() ); if ( symbol.isPinPointEnabled() ) pinPoint = symbol.pinPoint(); painter->resetTransform(); for ( int i = 0; i < numPoints; i++ ) { const QPointF pos = transform.map( points[i] ) - pinPoint; QwtPainter::drawPixmap( painter, QRect( pos.toPoint(), pm.size() ), pm ); } }
static inline void qwtDrawSvgSymbols( QPainter *painter, const QPointF *points, int numPoints, QSvgRenderer *renderer, const QwtSymbol &symbol ) { if ( renderer == NULL || !renderer->isValid() ) return; const QRectF viewBox = renderer->viewBoxF(); if ( viewBox.isEmpty() ) return; QSizeF sz = symbol.size(); if ( !sz.isValid() ) sz = viewBox.size(); const double sx = sz.width() / viewBox.width(); const double sy = sz.height() / viewBox.height(); QPointF pinPoint = viewBox.center(); if ( symbol.isPinPointEnabled() ) pinPoint = symbol.pinPoint(); const double dx = sx * ( pinPoint.x() - viewBox.left() ); const double dy = sy * ( pinPoint.y() - viewBox.top() ); for ( int i = 0; i < numPoints; i++ ) { const double x = points[i].x() - dx; const double y = points[i].y() - dy; renderer->render( painter, QRectF( x, y, sz.width(), sz.height() ) ); } }
static inline void qwtDrawGraphicSymbols( QPainter *painter, const QPointF *points, int numPoints, const QwtGraphic &graphic, const QwtSymbol &symbol ) { const QRectF pointRect = graphic.controlPointRect(); if ( pointRect.isEmpty() ) return; double sx = 1.0; double sy = 1.0; const QSize sz = symbol.size(); if ( sz.isValid() ) { sx = sz.width() / pointRect.width(); sy = sz.height() / pointRect.height(); } QPointF pinPoint = pointRect.center(); if ( symbol.isPinPointEnabled() ) pinPoint = symbol.pinPoint(); const QTransform transform = painter->transform(); for ( int i = 0; i < numPoints; i++ ) { QTransform tr = transform; tr.translate( points[i].x(), points[i].y() ); tr.scale( sx, sy ); tr.translate( -pinPoint.x(), -pinPoint.y() ); painter->setTransform( tr ); graphic.render( painter ); } painter->setTransform( transform ); }