1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2024-11-28 05:34:47 +01:00

Fixed scale size in hi-res prints

This commit is contained in:
Martin Tůma 2017-08-31 16:28:37 +02:00
parent 8e932b966c
commit b14eeb58ab
7 changed files with 33 additions and 25 deletions

View File

@ -326,9 +326,9 @@ void GraphView::mousePressEvent(QMouseEvent *e)
QGraphicsView::mousePressEvent(e); QGraphicsView::mousePressEvent(e);
} }
void GraphView::plot(QPainter *painter, const QRectF &target, qreal ratio) void GraphView::plot(QPainter *painter, const QRectF &target, qreal scale)
{ {
QSizeF canvas = QSizeF(target.width() / ratio, target.height() / ratio); QSizeF canvas = QSizeF(target.width() / scale, target.height() / scale);
setUpdatesEnabled(false); setUpdatesEnabled(false);
redraw(canvas); redraw(canvas);

View File

@ -53,7 +53,7 @@ public:
qreal sliderPosition() const {return _sliderPos;} qreal sliderPosition() const {return _sliderPos;}
void setSliderPosition(qreal pos); void setSliderPosition(qreal pos);
void plot(QPainter *painter, const QRectF &target, qreal ratio); void plot(QPainter *painter, const QRectF &target, qreal scale);
void useOpenGL(bool use); void useOpenGL(bool use);

View File

@ -475,13 +475,16 @@ void PathView::plot(QPainter *painter, const QRectF &target, bool hires)
{ {
QRect orig, adj; QRect orig, adj;
qreal ratio, diff, origRes; qreal ratio, diff, origRes;
QPointF origScene; QPointF origScene, origPos;
Coordinates origLL; Coordinates origLL;
setUpdatesEnabled(false); setUpdatesEnabled(false);
_plot = true;
_map->setBlockingMode(true);
orig = viewport()->rect(); orig = viewport()->rect();
origPos = _mapScale->pos();
if (orig.height() * (target.width() / target.height()) - orig.width() < 0) { if (orig.height() * (target.width() / target.height()) - orig.width() < 0) {
ratio = target.height() / target.width(); ratio = target.height() / target.width();
@ -493,44 +496,49 @@ void PathView::plot(QPainter *painter, const QRectF &target, bool hires)
adj = orig.adjusted(-diff/2, 0, diff/2, 0); adj = orig.adjusted(-diff/2, 0, diff/2, 0);
} }
// Adjust the view for printing
if (hires) { if (hires) {
origScene = mapToScene(orig.center()); origScene = mapToScene(orig.center());
origLL = _map->xy2ll(origScene); origLL = _map->xy2ll(origScene);
origRes = _map->resolution(origScene); origRes = _map->resolution(origScene);
QPointF scale(painter->device()->logicalDpiX() QPointF s(painter->device()->logicalDpiX()
/ (qreal)metric(QPaintDevice::PdmDpiX), / (qreal)metric(QPaintDevice::PdmDpiX),
painter->device()->logicalDpiY() painter->device()->logicalDpiY()
/ (qreal)metric(QPaintDevice::PdmDpiY)); / (qreal)metric(QPaintDevice::PdmDpiY));
adj.setSize(QSize(adj.width() * scale.x(), adj.height() * scale.y())); adj = QRect(0, 0, adj.width() * s.x(), adj.height() * s.y());
_map->zoomFit(adj.size(), _tr | _rr | _wr); _map->zoomFit(adj.size(), _tr | _rr | _wr);
rescale(); rescale();
QPointF center = contentCenter(); QPointF center = contentCenter();
centerOn(center); centerOn(center);
adj.moveCenter(mapFromScene(center)); adj.moveCenter(mapFromScene(center));
}
_plot = true; _mapScale->setResolution(_map->resolution(_map->ll2xy(origLL)));
_map->setBlockingMode(true); _mapScale->setDigitalZoom(-log2(s.x()));
_mapScale->setPos(mapToScene(QPoint(adj.bottomRight() + QPoint(
QPointF pos = _mapScale->pos(); -(SCALE_OFFSET + _mapScale->boundingRect().width()) * s.x(),
-(SCALE_OFFSET + _mapScale->boundingRect().height()) * s.x()))));
} else {
_mapScale->setPos(mapToScene(QPoint(adj.bottomRight() + QPoint( _mapScale->setPos(mapToScene(QPoint(adj.bottomRight() + QPoint(
-(SCALE_OFFSET + _mapScale->boundingRect().width()), -(SCALE_OFFSET + _mapScale->boundingRect().width()),
-(SCALE_OFFSET + _mapScale->boundingRect().height()))))); -(SCALE_OFFSET + _mapScale->boundingRect().height())))));
}
// Print the view
render(painter, target, adj); render(painter, target, adj);
_mapScale->setPos(pos); // Revert view changes to display mode
_map->setBlockingMode(false);
_plot = false;
if (hires) { if (hires) {
_map->zoomFit(origRes, origLL); _map->zoomFit(origRes, origLL);
rescale(); rescale();
centerOn(origScene); centerOn(origScene);
_mapScale->setDigitalZoom(0);
_mapScale->setResolution(origRes);
} }
_mapScale->setPos(origPos);
_map->setBlockingMode(false);
_plot = false;
setUpdatesEnabled(true); setUpdatesEnabled(true);
} }

View File

@ -132,7 +132,7 @@ void ScaleItem::setUnits(enum Units units)
update(); update();
} }
void ScaleItem::setDigitalZoom(int zoom) void ScaleItem::setDigitalZoom(qreal zoom)
{ {
prepareGeometryChange(); prepareGeometryChange();
_digitalZoom = zoom; _digitalZoom = zoom;

View File

@ -15,7 +15,7 @@ public:
void setResolution(qreal res); void setResolution(qreal res);
void setUnits(enum Units units); void setUnits(enum Units units);
void setDigitalZoom(int zoom); void setDigitalZoom(qreal zoom);
private: private:
void updateBoundingRect(); void updateBoundingRect();
@ -28,7 +28,7 @@ private:
Units _units; Units _units;
bool _scale; bool _scale;
int _digitalZoom; qreal _digitalZoom;
QRectF _boundingRect; QRectF _boundingRect;
}; };

View File

@ -16,9 +16,9 @@ void TrackInfo::insert(const QString &key, const QString &value)
_info->insert(key, value); _info->insert(key, value);
} }
void TrackInfo::plot(QPainter *painter, const QRectF &target, qreal ratio) void TrackInfo::plot(QPainter *painter, const QRectF &target, qreal scale)
{ {
QSizeF canvas = QSizeF(target.width() / ratio, target.height() / ratio); QSizeF canvas = QSizeF(target.width() / scale, target.height() / scale);
QSizeF diff = QSizeF(qAbs(canvas.width() - sceneRect().width()), QSizeF diff = QSizeF(qAbs(canvas.width() - sceneRect().width()),
qAbs(canvas.height() - sceneRect().height())); qAbs(canvas.height() - sceneRect().height()));
QRectF adj = sceneRect().adjusted(0, -diff.height()/2, diff.width(), QRectF adj = sceneRect().adjusted(0, -diff.height()/2, diff.width(),

View File

@ -13,7 +13,7 @@ public:
TrackInfo(QObject *parent = 0); TrackInfo(QObject *parent = 0);
void insert(const QString &key, const QString &value); void insert(const QString &key, const QString &value);
void plot(QPainter *painter, const QRectF &target, qreal ratio); void plot(QPainter *painter, const QRectF &target, qreal scale);
bool isEmpty() const; bool isEmpty() const;
QSizeF contentSize() const; QSizeF contentSize() const;