mirror of
https://github.com/tumic0/GPXSee.git
synced 2024-11-24 11:45:53 +01:00
Added missing HiDPI mode support
This commit is contained in:
parent
26cbbee135
commit
85d6357cb9
@ -30,9 +30,9 @@
|
|||||||
|
|
||||||
|
|
||||||
KMZMap::Overlay::Overlay(const QString &path, const QSize &size,
|
KMZMap::Overlay::Overlay(const QString &path, const QSize &size,
|
||||||
const RectC &bbox, double rotation, const Projection *proj)
|
const RectC &bbox, double rotation, const Projection *proj, qreal ratio)
|
||||||
: _path(path), _size(size), _bbox(bbox), _rotation(rotation), _img(0),
|
: _path(path), _size(size), _bbox(bbox), _rotation(rotation), _img(0),
|
||||||
_proj(proj)
|
_proj(proj), _ratio(ratio)
|
||||||
{
|
{
|
||||||
ReferencePoint tl(PointD(0, 0), _proj->ll2xy(bbox.topLeft()));
|
ReferencePoint tl(PointD(0, 0), _proj->ll2xy(bbox.topLeft()));
|
||||||
ReferencePoint br(PointD(size.width(), size.height()),
|
ReferencePoint br(PointD(size.width(), size.height()),
|
||||||
@ -62,13 +62,15 @@ qreal KMZMap::Overlay::resolution(const QRectF &rect) const
|
|||||||
void KMZMap::Overlay::draw(QPainter *painter, const QRectF &rect, Flags flags)
|
void KMZMap::Overlay::draw(QPainter *painter, const QRectF &rect, Flags flags)
|
||||||
{
|
{
|
||||||
if (_img) {
|
if (_img) {
|
||||||
|
QRectF rr(rect.topLeft() / _ratio, rect.size());
|
||||||
|
|
||||||
if (_rotation) {
|
if (_rotation) {
|
||||||
painter->save();
|
painter->save();
|
||||||
painter->rotate(-_rotation);
|
painter->rotate(-_rotation);
|
||||||
_img->draw(painter, rect, flags);
|
_img->draw(painter, rr, flags);
|
||||||
painter->restore();
|
painter->restore();
|
||||||
} else
|
} else
|
||||||
_img->draw(painter, rect, flags);
|
_img->draw(painter, rr, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
//painter->setPen(Qt::red);
|
//painter->setPen(Qt::red);
|
||||||
@ -80,6 +82,7 @@ void KMZMap::Overlay::load(QZipReader *zip)
|
|||||||
if (!_img) {
|
if (!_img) {
|
||||||
QByteArray ba(zip->fileData(_path));
|
QByteArray ba(zip->fileData(_path));
|
||||||
_img = new Image(QImage::fromData(ba));
|
_img = new Image(QImage::fromData(ba));
|
||||||
|
_img->setDevicePixelRatio(_ratio);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,6 +109,14 @@ void KMZMap::Overlay::setProjection(const Projection *proj)
|
|||||||
_transform = Transform(tl, br);
|
_transform = Transform(tl, br);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void KMZMap::Overlay::setDevicePixelRatio(qreal ratio)
|
||||||
|
{
|
||||||
|
_ratio = ratio;
|
||||||
|
|
||||||
|
if (_img)
|
||||||
|
_img->setDevicePixelRatio(_ratio);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool KMZMap::resCmp(const Overlay &m1, const Overlay &m2)
|
bool KMZMap::resCmp(const Overlay &m1, const Overlay &m2)
|
||||||
{
|
{
|
||||||
@ -246,7 +257,8 @@ void KMZMap::groundOverlay(QXmlStreamReader &reader, QZipReader &zip)
|
|||||||
QSize size(ir.size());
|
QSize size(ir.size());
|
||||||
|
|
||||||
if (size.isValid())
|
if (size.isValid())
|
||||||
_maps.append(Overlay(image, size, rect, rotation, &_projection));
|
_maps.append(Overlay(image, size, rect, rotation, &_projection,
|
||||||
|
_ratio));
|
||||||
else
|
else
|
||||||
reader.raiseError(image + ": Invalid image file");
|
reader.raiseError(image + ": Invalid image file");
|
||||||
} else
|
} else
|
||||||
@ -295,7 +307,7 @@ void KMZMap::kml(QXmlStreamReader &reader, QZipReader &zip)
|
|||||||
|
|
||||||
|
|
||||||
KMZMap::KMZMap(const QString &fileName, QObject *parent)
|
KMZMap::KMZMap(const QString &fileName, QObject *parent)
|
||||||
: Map(fileName, parent), _zoom(0), _mapIndex(-1), _zip(0)
|
: Map(fileName, parent), _zoom(0), _mapIndex(-1), _zip(0), _ratio(1.0)
|
||||||
{
|
{
|
||||||
QZipReader zip(fileName, QIODevice::ReadOnly);
|
QZipReader zip(fileName, QIODevice::ReadOnly);
|
||||||
QByteArray xml(zip.fileData("doc.kml"));
|
QByteArray xml(zip.fileData("doc.kml"));
|
||||||
@ -438,17 +450,9 @@ Coordinates KMZMap::xy2ll(const QPointF &p)
|
|||||||
|
|
||||||
void KMZMap::draw(QPainter *painter, const QRectF &rect, Flags flags)
|
void KMZMap::draw(QPainter *painter, const QRectF &rect, Flags flags)
|
||||||
{
|
{
|
||||||
QRectF er = rect.adjusted(-_adjust, -_adjust, _adjust, _adjust);
|
QRectF er = rect.adjusted(-_adjust * _ratio, -_adjust * _ratio,
|
||||||
|
_adjust * _ratio, _adjust * _ratio);
|
||||||
|
|
||||||
// All in one map
|
|
||||||
for (int i = _zooms.at(_zoom).first; i <= _zooms.at(_zoom).last; i++) {
|
|
||||||
if (_bounds.at(i).xy.contains(er)) {
|
|
||||||
draw(painter, er, i, flags);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Multiple maps
|
|
||||||
for (int i = _zooms.at(_zoom).first; i <= _zooms.at(_zoom).last; i++) {
|
for (int i = _zooms.at(_zoom).first; i <= _zooms.at(_zoom).last; i++) {
|
||||||
QRectF ir = er.intersected(_bounds.at(i).xy);
|
QRectF ir = er.intersected(_bounds.at(i).xy);
|
||||||
if (!ir.isNull())
|
if (!ir.isNull())
|
||||||
@ -485,6 +489,22 @@ void KMZMap::setInputProjection(const Projection &projection)
|
|||||||
computeBounds();
|
computeBounds();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void KMZMap::setDevicePixelRatio(qreal deviceRatio, qreal mapRatio)
|
||||||
|
{
|
||||||
|
Q_UNUSED(deviceRatio);
|
||||||
|
|
||||||
|
if (mapRatio == _ratio)
|
||||||
|
return;
|
||||||
|
|
||||||
|
_ratio = mapRatio;
|
||||||
|
|
||||||
|
for (int i = 0; i < _maps.size(); i++)
|
||||||
|
_maps[i].setDevicePixelRatio(_ratio);
|
||||||
|
|
||||||
|
_bounds.clear();
|
||||||
|
computeBounds();
|
||||||
|
}
|
||||||
|
|
||||||
void KMZMap::draw(QPainter *painter, const QRectF &rect, int mapIndex,
|
void KMZMap::draw(QPainter *painter, const QRectF &rect, int mapIndex,
|
||||||
Flags flags)
|
Flags flags)
|
||||||
{
|
{
|
||||||
|
@ -36,6 +36,7 @@ public:
|
|||||||
void unload();
|
void unload();
|
||||||
|
|
||||||
void setInputProjection(const Projection &projection);
|
void setInputProjection(const Projection &projection);
|
||||||
|
void setDevicePixelRatio(qreal deviceRatio, qreal mapRatio);
|
||||||
|
|
||||||
bool isValid() const {return _valid;}
|
bool isValid() const {return _valid;}
|
||||||
QString errorString() const {return _errorString;}
|
QString errorString() const {return _errorString;}
|
||||||
@ -44,14 +45,14 @@ private:
|
|||||||
class Overlay {
|
class Overlay {
|
||||||
public:
|
public:
|
||||||
Overlay(const QString &path, const QSize &size, const RectC &bbox,
|
Overlay(const QString &path, const QSize &size, const RectC &bbox,
|
||||||
double rotation, const Projection *proj);
|
double rotation, const Projection *proj, qreal ratio);
|
||||||
bool operator==(const Overlay &other) const
|
bool operator==(const Overlay &other) const
|
||||||
{return _path == other._path;}
|
{return _path == other._path;}
|
||||||
|
|
||||||
QPointF ll2xy(const Coordinates &c) const
|
QPointF ll2xy(const Coordinates &c) const
|
||||||
{return QPointF(_transform.proj2img(_proj->ll2xy(c)));}
|
{return QPointF(_transform.proj2img(_proj->ll2xy(c))) / _ratio;}
|
||||||
Coordinates xy2ll(const QPointF &p) const
|
Coordinates xy2ll(const QPointF &p) const
|
||||||
{return _proj->xy2ll(_transform.img2proj(p));}
|
{return _proj->xy2ll(_transform.img2proj(p * _ratio));}
|
||||||
|
|
||||||
const QString &path() const {return _path;}
|
const QString &path() const {return _path;}
|
||||||
const RectC &bbox() const {return _bbox;}
|
const RectC &bbox() const {return _bbox;}
|
||||||
@ -65,6 +66,7 @@ private:
|
|||||||
void unload();
|
void unload();
|
||||||
|
|
||||||
void setProjection(const Projection *proj);
|
void setProjection(const Projection *proj);
|
||||||
|
void setDevicePixelRatio(qreal ratio);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString _path;
|
QString _path;
|
||||||
@ -75,6 +77,7 @@ private:
|
|||||||
Image *_img;
|
Image *_img;
|
||||||
const Projection *_proj;
|
const Projection *_proj;
|
||||||
Transform _transform;
|
Transform _transform;
|
||||||
|
qreal _ratio;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Zoom {
|
struct Zoom {
|
||||||
@ -117,6 +120,7 @@ private:
|
|||||||
QZipReader *_zip;
|
QZipReader *_zip;
|
||||||
qreal _adjust;
|
qreal _adjust;
|
||||||
Projection _projection;
|
Projection _projection;
|
||||||
|
qreal _ratio;
|
||||||
|
|
||||||
bool _valid;
|
bool _valid;
|
||||||
QString _errorString;
|
QString _errorString;
|
||||||
|
Loading…
Reference in New Issue
Block a user