You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
593 lines
13 KiB
593 lines
13 KiB
/* -*- mode: C++ ; c-file-style: "stroustrup" -*- ***************************** |
|
* Qwt Widget Library |
|
* Copyright (C) 1997 Josef Wilgen |
|
* Copyright (C) 2002 Uwe Rathmann |
|
* |
|
* This library is free software; you can redistribute it and/or |
|
* modify it under the terms of the Qwt License, Version 1.0 |
|
*****************************************************************************/ |
|
|
|
#include "qwt_null_paintdevice.h" |
|
#include <qpaintengine.h> |
|
#include <qpixmap.h> |
|
|
|
class QwtNullPaintDevice::PrivateData |
|
{ |
|
public: |
|
PrivateData(): |
|
mode( QwtNullPaintDevice::NormalMode ) |
|
{ |
|
} |
|
|
|
QwtNullPaintDevice::Mode mode; |
|
}; |
|
|
|
class QwtNullPaintDevice::PaintEngine: public QPaintEngine |
|
{ |
|
public: |
|
PaintEngine(); |
|
|
|
virtual bool begin( QPaintDevice * ); |
|
virtual bool end(); |
|
|
|
virtual Type type () const; |
|
virtual void updateState(const QPaintEngineState &); |
|
|
|
virtual void drawRects(const QRect *, int ); |
|
virtual void drawRects(const QRectF *, int ); |
|
|
|
virtual void drawLines(const QLine *, int ); |
|
virtual void drawLines(const QLineF *, int ); |
|
|
|
virtual void drawEllipse(const QRectF &); |
|
virtual void drawEllipse(const QRect &); |
|
|
|
virtual void drawPath(const QPainterPath &); |
|
|
|
virtual void drawPoints(const QPointF *, int ); |
|
virtual void drawPoints(const QPoint *, int ); |
|
|
|
virtual void drawPolygon(const QPointF *, int , PolygonDrawMode ); |
|
virtual void drawPolygon(const QPoint *, int , PolygonDrawMode ); |
|
|
|
virtual void drawPixmap(const QRectF &, |
|
const QPixmap &, const QRectF &); |
|
|
|
virtual void drawTextItem(const QPointF &, const QTextItem &); |
|
|
|
virtual void drawTiledPixmap(const QRectF &, |
|
const QPixmap &, const QPointF &s); |
|
|
|
virtual void drawImage(const QRectF &, |
|
const QImage &, const QRectF &, Qt::ImageConversionFlags ); |
|
|
|
private: |
|
QwtNullPaintDevice *nullDevice(); |
|
}; |
|
|
|
QwtNullPaintDevice::PaintEngine::PaintEngine(): |
|
QPaintEngine( QPaintEngine::AllFeatures ) |
|
{ |
|
} |
|
|
|
bool QwtNullPaintDevice::PaintEngine::begin( QPaintDevice * ) |
|
{ |
|
setActive( true ); |
|
return true; |
|
} |
|
|
|
bool QwtNullPaintDevice::PaintEngine::end() |
|
{ |
|
setActive( false ); |
|
return true; |
|
} |
|
|
|
QPaintEngine::Type QwtNullPaintDevice::PaintEngine::type() const |
|
{ |
|
return QPaintEngine::User; |
|
} |
|
|
|
void QwtNullPaintDevice::PaintEngine::drawRects( |
|
const QRect *rects, int rectCount) |
|
{ |
|
QwtNullPaintDevice *device = nullDevice(); |
|
if ( device == NULL ) |
|
return; |
|
|
|
if ( device->mode() != QwtNullPaintDevice::NormalMode ) |
|
{ |
|
QPaintEngine::drawRects( rects, rectCount ); |
|
return; |
|
} |
|
|
|
device->drawRects( rects, rectCount ); |
|
} |
|
|
|
void QwtNullPaintDevice::PaintEngine::drawRects( |
|
const QRectF *rects, int rectCount) |
|
{ |
|
QwtNullPaintDevice *device = nullDevice(); |
|
if ( device == NULL ) |
|
return; |
|
|
|
if ( device->mode() != QwtNullPaintDevice::NormalMode ) |
|
{ |
|
QPaintEngine::drawRects( rects, rectCount ); |
|
return; |
|
} |
|
|
|
device->drawRects( rects, rectCount ); |
|
} |
|
|
|
void QwtNullPaintDevice::PaintEngine::drawLines( |
|
const QLine *lines, int lineCount) |
|
{ |
|
QwtNullPaintDevice *device = nullDevice(); |
|
if ( device == NULL ) |
|
return; |
|
|
|
if ( device->mode() != QwtNullPaintDevice::NormalMode ) |
|
{ |
|
QPaintEngine::drawLines( lines, lineCount ); |
|
return; |
|
} |
|
|
|
device->drawLines( lines, lineCount ); |
|
} |
|
|
|
void QwtNullPaintDevice::PaintEngine::drawLines( |
|
const QLineF *lines, int lineCount) |
|
{ |
|
QwtNullPaintDevice *device = nullDevice(); |
|
if ( device == NULL ) |
|
return; |
|
|
|
if ( device->mode() != QwtNullPaintDevice::NormalMode ) |
|
{ |
|
QPaintEngine::drawLines( lines, lineCount ); |
|
return; |
|
} |
|
|
|
device->drawLines( lines, lineCount ); |
|
} |
|
|
|
void QwtNullPaintDevice::PaintEngine::drawEllipse( |
|
const QRectF &rect) |
|
{ |
|
QwtNullPaintDevice *device = nullDevice(); |
|
if ( device == NULL ) |
|
return; |
|
|
|
if ( device->mode() != QwtNullPaintDevice::NormalMode ) |
|
{ |
|
QPaintEngine::drawEllipse( rect ); |
|
return; |
|
} |
|
|
|
device->drawEllipse( rect ); |
|
} |
|
|
|
void QwtNullPaintDevice::PaintEngine::drawEllipse( |
|
const QRect &rect) |
|
{ |
|
QwtNullPaintDevice *device = nullDevice(); |
|
if ( device == NULL ) |
|
return; |
|
|
|
if ( device->mode() != QwtNullPaintDevice::NormalMode ) |
|
{ |
|
QPaintEngine::drawEllipse( rect ); |
|
return; |
|
} |
|
|
|
device->drawEllipse( rect ); |
|
} |
|
|
|
|
|
void QwtNullPaintDevice::PaintEngine::drawPath( |
|
const QPainterPath &path) |
|
{ |
|
QwtNullPaintDevice *device = nullDevice(); |
|
if ( device == NULL ) |
|
return; |
|
|
|
device->drawPath( path ); |
|
} |
|
|
|
void QwtNullPaintDevice::PaintEngine::drawPoints( |
|
const QPointF *points, int pointCount) |
|
{ |
|
QwtNullPaintDevice *device = nullDevice(); |
|
if ( device == NULL ) |
|
return; |
|
|
|
if ( device->mode() != QwtNullPaintDevice::NormalMode ) |
|
{ |
|
QPaintEngine::drawPoints( points, pointCount ); |
|
return; |
|
} |
|
|
|
device->drawPoints( points, pointCount ); |
|
} |
|
|
|
void QwtNullPaintDevice::PaintEngine::drawPoints( |
|
const QPoint *points, int pointCount) |
|
{ |
|
QwtNullPaintDevice *device = nullDevice(); |
|
if ( device == NULL ) |
|
return; |
|
|
|
if ( device->mode() != QwtNullPaintDevice::NormalMode ) |
|
{ |
|
QPaintEngine::drawPoints( points, pointCount ); |
|
return; |
|
} |
|
|
|
device->drawPoints( points, pointCount ); |
|
} |
|
|
|
void QwtNullPaintDevice::PaintEngine::drawPolygon( |
|
const QPointF *points, int pointCount, PolygonDrawMode mode) |
|
{ |
|
QwtNullPaintDevice *device = nullDevice(); |
|
if ( device == NULL ) |
|
return; |
|
|
|
if ( device->mode() == QwtNullPaintDevice::PathMode ) |
|
{ |
|
QPainterPath path; |
|
|
|
if ( pointCount > 0 ) |
|
{ |
|
path.moveTo( points[0] ); |
|
for ( int i = 1; i < pointCount; i++ ) |
|
path.lineTo( points[i] ); |
|
|
|
if ( mode != PolylineMode ) |
|
path.closeSubpath(); |
|
} |
|
|
|
device->drawPath( path ); |
|
return; |
|
} |
|
|
|
device->drawPolygon( points, pointCount, mode ); |
|
} |
|
|
|
void QwtNullPaintDevice::PaintEngine::drawPolygon( |
|
const QPoint *points, int pointCount, PolygonDrawMode mode) |
|
{ |
|
QwtNullPaintDevice *device = nullDevice(); |
|
if ( device == NULL ) |
|
return; |
|
|
|
if ( device->mode() == QwtNullPaintDevice::PathMode ) |
|
{ |
|
QPainterPath path; |
|
|
|
if ( pointCount > 0 ) |
|
{ |
|
path.moveTo( points[0] ); |
|
for ( int i = 1; i < pointCount; i++ ) |
|
path.lineTo( points[i] ); |
|
|
|
if ( mode != PolylineMode ) |
|
path.closeSubpath(); |
|
} |
|
|
|
device->drawPath( path ); |
|
return; |
|
} |
|
|
|
device->drawPolygon( points, pointCount, mode ); |
|
} |
|
|
|
void QwtNullPaintDevice::PaintEngine::drawPixmap( |
|
const QRectF &rect, const QPixmap &pm, const QRectF &subRect ) |
|
{ |
|
QwtNullPaintDevice *device = nullDevice(); |
|
if ( device == NULL ) |
|
return; |
|
|
|
device->drawPixmap( rect, pm, subRect ); |
|
} |
|
|
|
void QwtNullPaintDevice::PaintEngine::drawTextItem( |
|
const QPointF &pos, const QTextItem &textItem) |
|
{ |
|
QwtNullPaintDevice *device = nullDevice(); |
|
if ( device == NULL ) |
|
return; |
|
|
|
if ( device->mode() != QwtNullPaintDevice::NormalMode ) |
|
{ |
|
QPaintEngine::drawTextItem( pos, textItem ); |
|
return; |
|
} |
|
|
|
device->drawTextItem( pos, textItem ); |
|
} |
|
|
|
void QwtNullPaintDevice::PaintEngine::drawTiledPixmap( |
|
const QRectF &rect, const QPixmap &pixmap, |
|
const QPointF &subRect) |
|
{ |
|
QwtNullPaintDevice *device = nullDevice(); |
|
if ( device == NULL ) |
|
return; |
|
|
|
if ( device->mode() != QwtNullPaintDevice::NormalMode ) |
|
{ |
|
QPaintEngine::drawTiledPixmap( rect, pixmap, subRect ); |
|
return; |
|
} |
|
|
|
device->drawTiledPixmap( rect, pixmap, subRect ); |
|
} |
|
|
|
void QwtNullPaintDevice::PaintEngine::drawImage( |
|
const QRectF &rect, const QImage &image, |
|
const QRectF &subRect, Qt::ImageConversionFlags flags) |
|
{ |
|
QwtNullPaintDevice *device = nullDevice(); |
|
if ( device == NULL ) |
|
return; |
|
|
|
device->drawImage( rect, image, subRect, flags ); |
|
} |
|
|
|
void QwtNullPaintDevice::PaintEngine::updateState( |
|
const QPaintEngineState &state) |
|
{ |
|
QwtNullPaintDevice *device = nullDevice(); |
|
if ( device == NULL ) |
|
return; |
|
|
|
device->updateState( state ); |
|
} |
|
|
|
inline QwtNullPaintDevice *QwtNullPaintDevice::PaintEngine::nullDevice() |
|
{ |
|
if ( !isActive() ) |
|
return NULL; |
|
|
|
return static_cast<QwtNullPaintDevice *>( paintDevice() ); |
|
} |
|
|
|
//! Constructor |
|
QwtNullPaintDevice::QwtNullPaintDevice(): |
|
d_engine( NULL ) |
|
{ |
|
d_data = new PrivateData; |
|
} |
|
|
|
//! Destructor |
|
QwtNullPaintDevice::~QwtNullPaintDevice() |
|
{ |
|
delete d_engine; |
|
delete d_data; |
|
} |
|
|
|
/*! |
|
Set the render mode |
|
|
|
\param mode New mode |
|
\sa mode() |
|
*/ |
|
void QwtNullPaintDevice::setMode( Mode mode ) |
|
{ |
|
d_data->mode = mode; |
|
} |
|
|
|
/*! |
|
\return Render mode |
|
\sa setMode() |
|
*/ |
|
QwtNullPaintDevice::Mode QwtNullPaintDevice::mode() const |
|
{ |
|
return d_data->mode; |
|
} |
|
|
|
//! See QPaintDevice::paintEngine() |
|
QPaintEngine *QwtNullPaintDevice::paintEngine() const |
|
{ |
|
if ( d_engine == NULL ) |
|
{ |
|
QwtNullPaintDevice *that = |
|
const_cast< QwtNullPaintDevice * >( this ); |
|
|
|
that->d_engine = new PaintEngine(); |
|
} |
|
|
|
return d_engine; |
|
} |
|
|
|
/*! |
|
See QPaintDevice::metric() |
|
|
|
\param deviceMetric Type of metric |
|
\return Metric information for the given paint device metric. |
|
|
|
\sa sizeMetrics() |
|
*/ |
|
int QwtNullPaintDevice::metric( PaintDeviceMetric deviceMetric ) const |
|
{ |
|
int value; |
|
|
|
switch ( deviceMetric ) |
|
{ |
|
case PdmWidth: |
|
{ |
|
value = sizeMetrics().width(); |
|
break; |
|
} |
|
case PdmHeight: |
|
{ |
|
value = sizeMetrics().height(); |
|
break; |
|
} |
|
case PdmNumColors: |
|
{ |
|
value = 0xffffffff; |
|
break; |
|
} |
|
case PdmDepth: |
|
{ |
|
value = 32; |
|
break; |
|
} |
|
case PdmPhysicalDpiX: |
|
case PdmPhysicalDpiY: |
|
case PdmDpiY: |
|
case PdmDpiX: |
|
{ |
|
value = 72; |
|
break; |
|
} |
|
case PdmWidthMM: |
|
{ |
|
value = qRound( metric( PdmWidth ) * 25.4 / metric( PdmDpiX ) ); |
|
break; |
|
} |
|
case PdmHeightMM: |
|
{ |
|
value = qRound( metric( PdmHeight ) * 25.4 / metric( PdmDpiY ) ); |
|
break; |
|
} |
|
default: |
|
value = 0; |
|
} |
|
return value; |
|
|
|
} |
|
|
|
//! See QPaintEngine::drawRects() |
|
void QwtNullPaintDevice::drawRects( |
|
const QRect *rects, int rectCount) |
|
{ |
|
Q_UNUSED(rects); |
|
Q_UNUSED(rectCount); |
|
} |
|
|
|
//! See QPaintEngine::drawRects() |
|
void QwtNullPaintDevice::drawRects( |
|
const QRectF *rects, int rectCount) |
|
{ |
|
Q_UNUSED(rects); |
|
Q_UNUSED(rectCount); |
|
} |
|
|
|
//! See QPaintEngine::drawLines() |
|
void QwtNullPaintDevice::drawLines( |
|
const QLine *lines, int lineCount) |
|
{ |
|
Q_UNUSED(lines); |
|
Q_UNUSED(lineCount); |
|
} |
|
|
|
//! See QPaintEngine::drawLines() |
|
void QwtNullPaintDevice::drawLines( |
|
const QLineF *lines, int lineCount) |
|
{ |
|
Q_UNUSED(lines); |
|
Q_UNUSED(lineCount); |
|
} |
|
|
|
//! See QPaintEngine::drawEllipse() |
|
void QwtNullPaintDevice::drawEllipse( const QRectF &rect ) |
|
{ |
|
Q_UNUSED(rect); |
|
} |
|
|
|
//! See QPaintEngine::drawEllipse() |
|
void QwtNullPaintDevice::drawEllipse( const QRect &rect ) |
|
{ |
|
Q_UNUSED(rect); |
|
} |
|
|
|
//! See QPaintEngine::drawPath() |
|
void QwtNullPaintDevice::drawPath( const QPainterPath &path ) |
|
{ |
|
Q_UNUSED(path); |
|
} |
|
|
|
//! See QPaintEngine::drawPoints() |
|
void QwtNullPaintDevice::drawPoints( |
|
const QPointF *points, int pointCount) |
|
{ |
|
Q_UNUSED(points); |
|
Q_UNUSED(pointCount); |
|
} |
|
|
|
//! See QPaintEngine::drawPoints() |
|
void QwtNullPaintDevice::drawPoints( |
|
const QPoint *points, int pointCount) |
|
{ |
|
Q_UNUSED(points); |
|
Q_UNUSED(pointCount); |
|
} |
|
|
|
//! See QPaintEngine::drawPolygon() |
|
void QwtNullPaintDevice::drawPolygon( |
|
const QPointF *points, int pointCount, |
|
QPaintEngine::PolygonDrawMode mode) |
|
{ |
|
Q_UNUSED(points); |
|
Q_UNUSED(pointCount); |
|
Q_UNUSED(mode); |
|
} |
|
|
|
//! See QPaintEngine::drawPolygon() |
|
void QwtNullPaintDevice::drawPolygon( |
|
const QPoint *points, int pointCount, |
|
QPaintEngine::PolygonDrawMode mode) |
|
{ |
|
Q_UNUSED(points); |
|
Q_UNUSED(pointCount); |
|
Q_UNUSED(mode); |
|
} |
|
|
|
//! See QPaintEngine::drawPixmap() |
|
void QwtNullPaintDevice::drawPixmap( const QRectF &rect, |
|
const QPixmap &pm, const QRectF &subRect ) |
|
{ |
|
Q_UNUSED(rect); |
|
Q_UNUSED(pm); |
|
Q_UNUSED(subRect); |
|
} |
|
|
|
//! See QPaintEngine::drawTextItem() |
|
void QwtNullPaintDevice::drawTextItem( |
|
const QPointF &pos, const QTextItem &textItem) |
|
{ |
|
Q_UNUSED(pos); |
|
Q_UNUSED(textItem); |
|
} |
|
|
|
//! See QPaintEngine::drawTiledPixmap() |
|
void QwtNullPaintDevice::drawTiledPixmap( |
|
const QRectF &rect, const QPixmap &pixmap, |
|
const QPointF &subRect) |
|
{ |
|
Q_UNUSED(rect); |
|
Q_UNUSED(pixmap); |
|
Q_UNUSED(subRect); |
|
} |
|
|
|
//! See QPaintEngine::drawImage() |
|
void QwtNullPaintDevice::drawImage( |
|
const QRectF &rect, const QImage &image, |
|
const QRectF &subRect, Qt::ImageConversionFlags flags) |
|
{ |
|
Q_UNUSED(rect); |
|
Q_UNUSED(image); |
|
Q_UNUSED(subRect); |
|
Q_UNUSED(flags); |
|
} |
|
|
|
//! See QPaintEngine::updateState() |
|
void QwtNullPaintDevice::updateState( |
|
const QPaintEngineState &state ) |
|
{ |
|
Q_UNUSED(state); |
|
}
|
|
|