mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-05 00:09:32 -04:00
* require qwt >=6.2 (and fallback to internal 6.3 if system's qwt doesn't suffice) * debian doesn't have qwt for Qt6 and won't have it for trixie
137 lines
2.9 KiB
C++
137 lines
2.9 KiB
C++
/******************************************************************************
|
|
* 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_plot_graphicitem.h"
|
|
#include "qwt_scale_map.h"
|
|
#include "qwt_painter.h"
|
|
#include "qwt_text.h"
|
|
#include "qwt_graphic.h"
|
|
|
|
class QwtPlotGraphicItem::PrivateData
|
|
{
|
|
public:
|
|
QRectF boundingRect;
|
|
QwtGraphic graphic;
|
|
};
|
|
|
|
/*!
|
|
\brief Constructor
|
|
|
|
Sets the following item attributes:
|
|
- QwtPlotItem::AutoScale: true
|
|
- QwtPlotItem::Legend: false
|
|
|
|
\param title Title
|
|
*/
|
|
QwtPlotGraphicItem::QwtPlotGraphicItem( const QString& title )
|
|
: QwtPlotItem( QwtText( title ) )
|
|
{
|
|
init();
|
|
}
|
|
|
|
/*!
|
|
\brief Constructor
|
|
|
|
Sets the following item attributes:
|
|
- QwtPlotItem::AutoScale: true
|
|
- QwtPlotItem::Legend: false
|
|
|
|
\param title Title
|
|
*/
|
|
QwtPlotGraphicItem::QwtPlotGraphicItem( const QwtText& title )
|
|
: QwtPlotItem( title )
|
|
{
|
|
init();
|
|
}
|
|
|
|
//! Destructor
|
|
QwtPlotGraphicItem::~QwtPlotGraphicItem()
|
|
{
|
|
delete m_data;
|
|
}
|
|
|
|
void QwtPlotGraphicItem::init()
|
|
{
|
|
m_data = new PrivateData();
|
|
m_data->boundingRect = QwtPlotItem::boundingRect();
|
|
|
|
setItemAttribute( QwtPlotItem::AutoScale, true );
|
|
setItemAttribute( QwtPlotItem::Legend, false );
|
|
|
|
setZ( 8.0 );
|
|
}
|
|
|
|
//! \return QwtPlotItem::Rtti_PlotGraphic
|
|
int QwtPlotGraphicItem::rtti() const
|
|
{
|
|
return QwtPlotItem::Rtti_PlotGraphic;
|
|
}
|
|
|
|
/*!
|
|
Set the graphic to be displayed
|
|
|
|
\param rect Rectangle in plot coordinates
|
|
\param graphic Recorded sequence of painter commands
|
|
*/
|
|
void QwtPlotGraphicItem::setGraphic(
|
|
const QRectF& rect, const QwtGraphic& graphic )
|
|
{
|
|
m_data->boundingRect = rect;
|
|
m_data->graphic = graphic;
|
|
|
|
legendChanged();
|
|
itemChanged();
|
|
}
|
|
|
|
/*!
|
|
\return Recorded sequence of painter commands
|
|
\sa setGraphic()
|
|
*/
|
|
QwtGraphic QwtPlotGraphicItem::graphic() const
|
|
{
|
|
return m_data->graphic;
|
|
}
|
|
|
|
//! Bounding rectangle of the item
|
|
QRectF QwtPlotGraphicItem::boundingRect() const
|
|
{
|
|
return m_data->boundingRect;
|
|
}
|
|
|
|
/*!
|
|
Draw the item
|
|
|
|
\param painter Painter
|
|
\param xMap X-Scale Map
|
|
\param yMap Y-Scale Map
|
|
\param canvasRect Contents rect of the plot canvas
|
|
*/
|
|
void QwtPlotGraphicItem::draw( QPainter* painter,
|
|
const QwtScaleMap& xMap, const QwtScaleMap& yMap,
|
|
const QRectF& canvasRect ) const
|
|
{
|
|
if ( m_data->graphic.isEmpty() )
|
|
return;
|
|
|
|
QRectF r = QwtScaleMap::transform( xMap, yMap, boundingRect() );
|
|
|
|
if ( !r.intersects( canvasRect ) )
|
|
return;
|
|
|
|
if ( QwtPainter::roundingAlignment( painter ) )
|
|
{
|
|
r.setLeft ( qRound( r.left() ) );
|
|
r.setRight ( qRound( r.right() ) );
|
|
r.setTop ( qRound( r.top() ) );
|
|
r.setBottom ( qRound( r.bottom() ) );
|
|
}
|
|
|
|
m_data->graphic.render( painter, r );
|
|
}
|