地面站终端 App
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.

157 lines
4.1 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
*****************************************************************************/
#ifndef QWT_LAYOUT_METRICS_H
#define QWT_LAYOUT_METRICS_H
#include <qsize.h>
#include <qrect.h>
#include "qwt_polygon.h"
#include "qwt_global.h"
class QPainter;
class QString;
class QFontMetrics;
#if QT_VERSION < 0x040000
class QWMatrix;
#else
class QMatrix;
#endif
class QPaintDevice;
/*!
\brief A Map to translate between layout, screen and paint device metrics
*/
class QWT_EXPORT QwtMetricsMap
{
public:
QwtMetricsMap();
bool isIdentity() const;
void setMetrics(const QPaintDevice *layoutMetrics,
const QPaintDevice *deviceMetrics);
int layoutToDeviceX(int x) const;
int deviceToLayoutX(int x) const;
int screenToLayoutX(int x) const;
int layoutToScreenX(int x) const;
int layoutToDeviceY(int y) const;
int deviceToLayoutY(int y) const;
int screenToLayoutY(int y) const;
int layoutToScreenY(int y) const;
QPoint layoutToDevice(const QPoint &, const QPainter * = NULL) const;
QPoint deviceToLayout(const QPoint &, const QPainter * = NULL) const;
QPoint screenToLayout(const QPoint &) const;
QPoint layoutToScreen(const QPoint &point) const;
QSize layoutToDevice(const QSize &) const;
QSize deviceToLayout(const QSize &) const;
QSize screenToLayout(const QSize &) const;
QSize layoutToScreen(const QSize &) const;
QRect layoutToDevice(const QRect &, const QPainter * = NULL) const;
QRect deviceToLayout(const QRect &, const QPainter * = NULL) const;
QRect screenToLayout(const QRect &) const;
QRect layoutToScreen(const QRect &) const;
QwtPolygon layoutToDevice(const QwtPolygon &,
const QPainter * = NULL) const;
QwtPolygon deviceToLayout(const QwtPolygon &,
const QPainter * = NULL) const;
#if QT_VERSION < 0x040000
static QwtPolygon translate(const QWMatrix &, const QwtPolygon &);
static QRect translate(const QWMatrix &, const QRect &);
#else
static QwtPolygon translate(const QMatrix &, const QwtPolygon &);
static QRect translate(const QMatrix &, const QRect &);
#endif
private:
double d_screenToLayoutX;
double d_screenToLayoutY;
double d_deviceToLayoutX;
double d_deviceToLayoutY;
};
inline bool QwtMetricsMap::isIdentity() const
{
return d_deviceToLayoutX == 1.0 && d_deviceToLayoutY == 1.0;
}
inline int QwtMetricsMap::layoutToDeviceX(int x) const
{
return qRound(x / d_deviceToLayoutX);
}
inline int QwtMetricsMap::deviceToLayoutX(int x) const
{
return qRound(x * d_deviceToLayoutX);
}
inline int QwtMetricsMap::screenToLayoutX(int x) const
{
return qRound(x * d_screenToLayoutX);
}
inline int QwtMetricsMap::layoutToScreenX(int x) const
{
return qRound(x / d_screenToLayoutX);
}
inline int QwtMetricsMap::layoutToDeviceY(int y) const
{
return qRound(y / d_deviceToLayoutY);
}
inline int QwtMetricsMap::deviceToLayoutY(int y) const
{
return qRound(y * d_deviceToLayoutY);
}
inline int QwtMetricsMap::screenToLayoutY(int y) const
{
return qRound(y * d_screenToLayoutY);
}
inline int QwtMetricsMap::layoutToScreenY(int y) const
{
return qRound(y / d_screenToLayoutY);
}
inline QSize QwtMetricsMap::layoutToDevice(const QSize &size) const
{
return QSize(layoutToDeviceX(size.width()),
layoutToDeviceY(size.height()));
}
inline QSize QwtMetricsMap::deviceToLayout(const QSize &size) const
{
return QSize(deviceToLayoutX(size.width()),
deviceToLayoutY(size.height()));
}
inline QSize QwtMetricsMap::screenToLayout(const QSize &size) const
{
return QSize(screenToLayoutX(size.width()),
screenToLayoutY(size.height()));
}
inline QSize QwtMetricsMap::layoutToScreen(const QSize &size) const
{
return QSize(layoutToScreenX(size.width()),
layoutToScreenY(size.height()));
}
#endif