QGIS/external/qwt-6.3.0/qwt_polar_magnifier.cpp
Juergen E. Fischer 33fc476d89 * replace external qwtpolar with qwt 6.3
* 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
2025-07-23 07:11:51 +10:00

171 lines
3.6 KiB
C++

/******************************************************************************
* QwtPolar Widget Library
* Copyright (C) 2008 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_polar_magnifier.h"
#include "qwt_polar_plot.h"
#include "qwt_polar_canvas.h"
#include "qwt_scale_div.h"
#include "qwt_point_polar.h"
#include <qevent.h>
class QwtPolarMagnifier::PrivateData
{
public:
PrivateData()
: unzoomKey( Qt::Key_Home )
, unzoomKeyModifiers( Qt::NoModifier )
{
}
int unzoomKey;
int unzoomKeyModifiers;
};
/*!
Constructor
\param canvas Plot canvas to be magnified
*/
QwtPolarMagnifier::QwtPolarMagnifier( QwtPolarCanvas* canvas )
: QwtMagnifier( canvas )
{
m_data = new PrivateData();
}
//! Destructor
QwtPolarMagnifier::~QwtPolarMagnifier()
{
delete m_data;
}
/*!
Assign key and modifiers, that are used for unzooming
The default combination is Qt::Key_Home + Qt::NoModifier.
\param key Key code
\param modifiers Modifiers
\sa getUnzoomKey(), QwtPolarPlot::unzoom()
*/
void QwtPolarMagnifier::setUnzoomKey( int key, int modifiers )
{
m_data->unzoomKey = key;
m_data->unzoomKeyModifiers = modifiers;
}
/*!
Return key, and modifiers that are used for unzooming
\param key Key code
\param modifiers Modifiers
\sa setUnzoomKey(), QwtPolarPlot::unzoom()
*/
void QwtPolarMagnifier::getUnzoomKey( int& key, int& modifiers ) const
{
key = m_data->unzoomKey;
modifiers = m_data->unzoomKeyModifiers;
}
//! \return Observed plot canvas
QwtPolarCanvas* QwtPolarMagnifier::canvas()
{
return qobject_cast< QwtPolarCanvas* >( parent() );
}
//! \return Observed plot canvas
const QwtPolarCanvas* QwtPolarMagnifier::canvas() const
{
return qobject_cast< QwtPolarCanvas* >( parent() );
}
//! \return Observed plot
QwtPolarPlot* QwtPolarMagnifier::plot()
{
QwtPolarCanvas* c = canvas();
if ( c )
return c->plot();
return NULL;
}
//! \return observed plot
const QwtPolarPlot* QwtPolarMagnifier::plot() const
{
const QwtPolarCanvas* c = canvas();
if ( c )
return c->plot();
return NULL;
}
/*!
Handle a key press event for the observed widget.
\param event Key event
*/
void QwtPolarMagnifier::widgetKeyPressEvent( QKeyEvent* event )
{
const int key = event->key();
const int state = event->modifiers();
if ( key == m_data->unzoomKey &&
state == m_data->unzoomKeyModifiers )
{
unzoom();
return;
}
QwtMagnifier::widgetKeyPressEvent( event );
}
/*!
Zoom in/out the zoomed area
\param factor A value < 1.0 zooms in, a value > 1.0 zooms out.
*/
void QwtPolarMagnifier::rescale( double factor )
{
factor = qAbs( factor );
if ( factor == 1.0 || factor == 0.0 )
return;
QwtPolarPlot* plt = plot();
if ( plt == NULL )
return;
QwtPointPolar zoomPos;
double newZoomFactor = plt->zoomFactor() * factor;
if ( newZoomFactor >= 1.0 )
newZoomFactor = 1.0;
else
zoomPos = plt->zoomPos();
const bool autoReplot = plt->autoReplot();
plt->setAutoReplot( false );
plt->zoom( zoomPos, newZoomFactor );
plt->setAutoReplot( autoReplot );
plt->replot();
}
//! Unzoom the plot widget
void QwtPolarMagnifier::unzoom()
{
QwtPolarPlot* plt = plot();
const bool autoReplot = plt->autoReplot();
plt->setAutoReplot( false );
plt->unzoom();
plt->setAutoReplot( autoReplot );
plt->replot();
}
#include "moc_qwt_polar_magnifier.cpp"