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.
237 lines
5.5 KiB
237 lines
5.5 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_painter_command.h" |
|
|
|
//! Construct an invalid command |
|
QwtPainterCommand::QwtPainterCommand(): |
|
d_type( Invalid ) |
|
{ |
|
} |
|
|
|
//! Copy constructor |
|
QwtPainterCommand::QwtPainterCommand( const QPainterPath &path ): |
|
d_type( Path ) |
|
{ |
|
d_path = new QPainterPath( path ); |
|
} |
|
|
|
/*! |
|
Constructor for Pixmap paint operation |
|
|
|
\param rect Target rectangle |
|
\param pixmap Pixmap |
|
\param subRect Rectangle inside the pixmap |
|
|
|
\sa QPainter::drawPixmap() |
|
*/ |
|
QwtPainterCommand::QwtPainterCommand( const QRectF &rect, |
|
const QPixmap &pixmap, const QRectF& subRect ): |
|
d_type( Pixmap ) |
|
{ |
|
d_pixmapData = new PixmapData(); |
|
d_pixmapData->rect = rect; |
|
d_pixmapData->pixmap = pixmap; |
|
d_pixmapData->subRect = subRect; |
|
} |
|
|
|
/*! |
|
Constructor for Image paint operation |
|
|
|
\param rect Target rectangle |
|
\param image Image |
|
\param subRect Rectangle inside the image |
|
\param flags Conversion flags |
|
|
|
\sa QPainter::drawImage() |
|
*/ |
|
QwtPainterCommand::QwtPainterCommand( const QRectF &rect, |
|
const QImage &image, const QRectF& subRect, |
|
Qt::ImageConversionFlags flags ): |
|
d_type( Image ) |
|
{ |
|
d_imageData = new ImageData(); |
|
d_imageData->rect = rect; |
|
d_imageData->image = image; |
|
d_imageData->subRect = subRect; |
|
d_imageData->flags = flags; |
|
} |
|
|
|
/*! |
|
Constructor for State paint operation |
|
\param state Paint engine state |
|
*/ |
|
QwtPainterCommand::QwtPainterCommand( const QPaintEngineState &state ): |
|
d_type( State ) |
|
{ |
|
d_stateData = new StateData(); |
|
|
|
d_stateData->flags = state.state(); |
|
|
|
if ( d_stateData->flags & QPaintEngine::DirtyPen ) |
|
d_stateData->pen = state.pen(); |
|
|
|
if ( d_stateData->flags & QPaintEngine::DirtyBrush ) |
|
d_stateData->brush = state.brush(); |
|
|
|
if ( d_stateData->flags & QPaintEngine::DirtyBrushOrigin ) |
|
d_stateData->brushOrigin = state.brushOrigin(); |
|
|
|
if ( d_stateData->flags & QPaintEngine::DirtyFont ) |
|
d_stateData->font = state.font(); |
|
|
|
if ( d_stateData->flags & QPaintEngine::DirtyBackground ) |
|
{ |
|
d_stateData->backgroundMode = state.backgroundMode(); |
|
d_stateData->backgroundBrush = state.backgroundBrush(); |
|
} |
|
|
|
if ( d_stateData->flags & QPaintEngine::DirtyTransform ) |
|
d_stateData->transform = state.transform(); |
|
|
|
if ( d_stateData->flags & QPaintEngine::DirtyClipEnabled ) |
|
d_stateData->isClipEnabled = state.isClipEnabled(); |
|
|
|
if ( d_stateData->flags & QPaintEngine::DirtyClipRegion ) |
|
{ |
|
d_stateData->clipRegion = state.clipRegion(); |
|
d_stateData->clipOperation = state.clipOperation(); |
|
} |
|
|
|
if ( d_stateData->flags & QPaintEngine::DirtyClipPath ) |
|
{ |
|
d_stateData->clipPath = state.clipPath(); |
|
d_stateData->clipOperation = state.clipOperation(); |
|
} |
|
|
|
if ( d_stateData->flags & QPaintEngine::DirtyHints ) |
|
d_stateData->renderHints = state.renderHints(); |
|
|
|
if ( d_stateData->flags & QPaintEngine::DirtyCompositionMode ) |
|
d_stateData->compositionMode = state.compositionMode(); |
|
|
|
if ( d_stateData->flags & QPaintEngine::DirtyOpacity ) |
|
d_stateData->opacity = state.opacity(); |
|
} |
|
|
|
/*! |
|
Copy constructor |
|
\param other Command to be copied |
|
|
|
*/ |
|
QwtPainterCommand::QwtPainterCommand(const QwtPainterCommand &other) |
|
{ |
|
copy( other ); |
|
} |
|
|
|
//! Destructor |
|
QwtPainterCommand::~QwtPainterCommand() |
|
{ |
|
reset(); |
|
} |
|
|
|
/*! |
|
Assignment operator |
|
|
|
\param other Command to be copied |
|
\return Modified command |
|
*/ |
|
QwtPainterCommand &QwtPainterCommand::operator=(const QwtPainterCommand &other) |
|
{ |
|
reset(); |
|
copy( other ); |
|
|
|
return *this; |
|
} |
|
|
|
void QwtPainterCommand::copy( const QwtPainterCommand &other ) |
|
{ |
|
d_type = other.d_type; |
|
|
|
switch( other.d_type ) |
|
{ |
|
case Path: |
|
{ |
|
d_path = new QPainterPath( *other.d_path ); |
|
break; |
|
} |
|
case Pixmap: |
|
{ |
|
d_pixmapData = new PixmapData( *other.d_pixmapData ); |
|
break; |
|
} |
|
case Image: |
|
{ |
|
d_imageData = new ImageData( *other.d_imageData ); |
|
break; |
|
} |
|
case State: |
|
{ |
|
d_stateData = new StateData( *other.d_stateData ); |
|
break; |
|
} |
|
default: |
|
break; |
|
} |
|
} |
|
|
|
void QwtPainterCommand::reset() |
|
{ |
|
switch( d_type ) |
|
{ |
|
case Path: |
|
{ |
|
delete d_path; |
|
break; |
|
} |
|
case Pixmap: |
|
{ |
|
delete d_pixmapData; |
|
break; |
|
} |
|
case Image: |
|
{ |
|
delete d_imageData; |
|
break; |
|
} |
|
case State: |
|
{ |
|
delete d_stateData; |
|
break; |
|
} |
|
default: |
|
break; |
|
} |
|
|
|
d_type = Invalid; |
|
} |
|
|
|
//! \return Painter path to be painted |
|
QPainterPath *QwtPainterCommand::path() |
|
{ |
|
return d_path; |
|
} |
|
|
|
//! \return Attributes how to paint a QPixmap |
|
QwtPainterCommand::PixmapData* QwtPainterCommand::pixmapData() |
|
{ |
|
return d_pixmapData; |
|
} |
|
|
|
//! \return Attributes how to paint a QImage |
|
QwtPainterCommand::ImageData* QwtPainterCommand::imageData() |
|
{ |
|
return d_imageData; |
|
} |
|
|
|
//! \return Attributes of a state change |
|
QwtPainterCommand::StateData* QwtPainterCommand::stateData() |
|
{ |
|
return d_stateData; |
|
}
|
|
|