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

Added support for hi-resolution printing

This commit is contained in:
Martin Tůma 2017-08-28 15:25:45 +02:00
parent 8b7422b70a
commit ebf39f11bd
6 changed files with 82 additions and 14 deletions

View File

@ -854,15 +854,6 @@ void GUI::closePOIFiles()
_poi->clear(); _poi->clear();
} }
void GUI::printFile()
{
QPrinter printer(QPrinter::HighResolution);
QPrintDialog dialog(&printer, this);
if (dialog.exec() == QDialog::Accepted)
plot(&printer);
}
void GUI::openOptions() void GUI::openOptions()
{ {
Options options(_options); Options options(_options);
@ -948,6 +939,15 @@ void GUI::openOptions()
_options = options; _options = options;
} }
void GUI::printFile()
{
QPrinter printer(QPrinter::HighResolution);
QPrintDialog dialog(&printer, this);
if (dialog.exec() == QDialog::Accepted)
plot(&printer);
}
void GUI::exportFile() void GUI::exportFile()
{ {
ExportDialog dialog(&_export, this); ExportDialog dialog(&_export, this);
@ -1028,7 +1028,7 @@ void GUI::plot(QPrinter *printer)
} else } else
gh = 0; gh = 0;
_pathView->plot(&p, QRectF(0, ih + mh, printer->width(), printer->height() _pathView->plot(&p, QRectF(0, ih + mh, printer->width(), printer->height()
- (ih + 2*mh + gh))); - (ih + 2*mh + gh)), _options.hiresPrint);
if (_graphTabWidget->isVisible() && _options.separateGraphPage) { if (_graphTabWidget->isVisible() && _options.separateGraphPage) {
printer->newPage(); printer->newPage();
@ -1638,6 +1638,8 @@ void GUI::writeSettings()
settings.setValue(USE_OPENGL_SETTING, _options.useOpenGL); settings.setValue(USE_OPENGL_SETTING, _options.useOpenGL);
if (_options.pixmapCache != PIXMAP_CACHE_DEFAULT) if (_options.pixmapCache != PIXMAP_CACHE_DEFAULT)
settings.setValue(PIXMAP_CACHE_SETTING, _options.pixmapCache); settings.setValue(PIXMAP_CACHE_SETTING, _options.pixmapCache);
if (_options.hiresPrint != HIRES_PRINT_DEFAULT)
settings.setValue(HIRES_PRINT_SETTING, _options.hiresPrint);
if (_options.printName != PRINT_NAME_DEFAULT) if (_options.printName != PRINT_NAME_DEFAULT)
settings.setValue(PRINT_NAME_SETTING, _options.printName); settings.setValue(PRINT_NAME_SETTING, _options.printName);
if (_options.printDate != PRINT_DATE_DEFAULT) if (_options.printDate != PRINT_DATE_DEFAULT)
@ -1835,6 +1837,8 @@ void GUI::readSettings()
.toBool(); .toBool();
_options.pixmapCache = settings.value(PIXMAP_CACHE_SETTING, _options.pixmapCache = settings.value(PIXMAP_CACHE_SETTING,
PIXMAP_CACHE_DEFAULT).toInt(); PIXMAP_CACHE_DEFAULT).toInt();
_options.hiresPrint = settings.value(HIRES_PRINT_SETTING,
HIRES_PRINT_DEFAULT).toBool();
_options.printName = settings.value(PRINT_NAME_SETTING, PRINT_NAME_DEFAULT) _options.printName = settings.value(PRINT_NAME_SETTING, PRINT_NAME_DEFAULT)
.toBool(); .toBool();
_options.printDate = settings.value(PRINT_DATE_SETTING, PRINT_DATE_DEFAULT) _options.printDate = settings.value(PRINT_DATE_SETTING, PRINT_DATE_DEFAULT)

View File

@ -9,6 +9,7 @@
#include <QGroupBox> #include <QGroupBox>
#include <QCheckBox> #include <QCheckBox>
#include <QComboBox> #include <QComboBox>
#include <QRadioButton>
#include <QLabel> #include <QLabel>
#include <QSysInfo> #include <QSysInfo>
#include "config.h" #include "config.h"
@ -265,6 +266,36 @@ QWidget *OptionsDialog::createPOIPage()
QWidget *OptionsDialog::createExportPage() QWidget *OptionsDialog::createExportPage()
{ {
_wysiwyg = new QRadioButton(tr("WYSIWYG"));
_hires = new QRadioButton(tr("Hi-Resolution"));
if (_options->hiresPrint)
_hires->setChecked(true);
else
_wysiwyg->setChecked(true);
QLabel *lw = new QLabel(tr("The printed area is approximately the display"
" area. The map zoom level does not change."));
QLabel *lh = new QLabel(tr("The zoom level will be changed so that"
" the content still fits to the printed area and the map resolution is as"
" close as possible to the printer resolution."));
QFont f = lw->font();
f.setPointSize(f.pointSize() - 1);
lw->setWordWrap(true);
lh->setWordWrap(true);
lw->setFont(f);
lh->setFont(f);
QVBoxLayout *modeTabLayout = new QVBoxLayout();
modeTabLayout->addWidget(_wysiwyg);
modeTabLayout->addWidget(lw);
modeTabLayout->addSpacing(10);
modeTabLayout->addWidget(_hires);
modeTabLayout->addWidget(lh);
modeTabLayout->addStretch();
QWidget *modeTab = new QWidget();
modeTab->setLayout(modeTabLayout);
_name = new QCheckBox(tr("Name")); _name = new QCheckBox(tr("Name"));
_name->setChecked(_options->printName); _name->setChecked(_options->printName);
_date = new QCheckBox(tr("Date")); _date = new QCheckBox(tr("Date"));
@ -300,6 +331,7 @@ QWidget *OptionsDialog::createExportPage()
QTabWidget *exportPage = new QTabWidget(); QTabWidget *exportPage = new QTabWidget();
exportPage->addTab(modeTab, tr("Print mode"));
exportPage->addTab(headerTab, tr("Header")); exportPage->addTab(headerTab, tr("Header"));
exportPage->addTab(graphTab, tr("Graphs")); exportPage->addTab(graphTab, tr("Graphs"));
@ -422,6 +454,7 @@ void OptionsDialog::accept()
_options->useOpenGL = _useOpenGL->isChecked(); _options->useOpenGL = _useOpenGL->isChecked();
_options->pixmapCache = _pixmapCache->value(); _options->pixmapCache = _pixmapCache->value();
_options->hiresPrint = _hires->isChecked();
_options->printName = _name->isChecked(); _options->printName = _name->isChecked();
_options->printDate = _date->isChecked(); _options->printDate = _date->isChecked();
_options->printDistance = _distance->isChecked(); _options->printDistance = _distance->isChecked();

View File

@ -12,6 +12,7 @@ class QSpinBox;
class QDoubleSpinBox; class QDoubleSpinBox;
class QComboBox; class QComboBox;
class QCheckBox; class QCheckBox;
class QRadioButton;
class PercentSlider; class PercentSlider;
struct Options { struct Options {
@ -40,6 +41,7 @@ struct Options {
bool useOpenGL; bool useOpenGL;
int pixmapCache; int pixmapCache;
// Print/Export // Print/Export
bool hiresPrint;
bool printName; bool printName;
bool printDate; bool printDate;
bool printDistance; bool printDistance;
@ -96,6 +98,8 @@ private:
QSpinBox *_pixmapCache; QSpinBox *_pixmapCache;
QCheckBox *_useOpenGL; QCheckBox *_useOpenGL;
// Print/Export // Print/Export
QRadioButton *_wysiwyg;
QRadioButton *_hires;
QCheckBox *_name; QCheckBox *_name;
QCheckBox *_date; QCheckBox *_date;
QCheckBox *_distance; QCheckBox *_distance;

View File

@ -3,6 +3,7 @@
#include <QWheelEvent> #include <QWheelEvent>
#include <QApplication> #include <QApplication>
#include <QPixmapCache> #include <QPixmapCache>
#include "config.h"
#include "opengl.h" #include "opengl.h"
#include "misc.h" #include "misc.h"
#include "poi.h" #include "poi.h"
@ -471,12 +472,16 @@ void PathView::keyPressEvent(QKeyEvent *event)
zoom(z, pos, c); zoom(z, pos, c);
} }
void PathView::plot(QPainter *painter, const QRectF &target) void PathView::plot(QPainter *painter, const QRectF &target, bool hires)
{ {
QRect orig, adj; QRect orig, adj;
qreal ratio, diff; qreal ratio, diff, origRes;
QPointF origScene;
Coordinates origLL;
setUpdatesEnabled(false);
orig = viewport()->rect(); orig = viewport()->rect();
if (orig.height() * (target.width() / target.height()) - orig.width() < 0) { if (orig.height() * (target.width() / target.height()) - orig.width() < 0) {
@ -489,7 +494,20 @@ void PathView::plot(QPainter *painter, const QRectF &target)
adj = orig.adjusted(-diff/2, 0, diff/2, 0); adj = orig.adjusted(-diff/2, 0, diff/2, 0);
} }
setUpdatesEnabled(false); if (hires) {
origScene = mapToScene(orig.center());
origLL = _map->xy2ll(origScene);
origRes = _map->resolution(origScene);
qreal r = painter->device()->logicalDpiX() / SCREEN_DPI;
adj.setSize(QSize(adj.width() * r, adj.height() * r));
_map->zoomFit(adj.size(), _tr | _rr | _wr);
rescale();
QPointF center = contentCenter();
centerOn(center);
adj.moveCenter(mapFromScene(center));
}
_plot = true; _plot = true;
_map->setBlockingMode(true); _map->setBlockingMode(true);
@ -504,6 +522,13 @@ void PathView::plot(QPainter *painter, const QRectF &target)
_map->setBlockingMode(false); _map->setBlockingMode(false);
_plot = false; _plot = false;
if (hires) {
_map->zoomFit(origRes, origLL);
rescale();
centerOn(origScene);
}
setUpdatesEnabled(true); setUpdatesEnabled(true);
} }

View File

@ -37,7 +37,7 @@ public:
void setMap(Map *map); void setMap(Map *map);
void setUnits(enum Units units); void setUnits(enum Units units);
void plot(QPainter *painter, const QRectF &target); void plot(QPainter *painter, const QRectF &target, bool hires);
int trackCount() const {return _tracks.count();} int trackCount() const {return _tracks.count();}
int routeCount() const {return _routes.count();} int routeCount() const {return _routes.count();}

View File

@ -114,6 +114,8 @@
#define USE_OPENGL_DEFAULT false #define USE_OPENGL_DEFAULT false
#define PIXMAP_CACHE_SETTING "pixmapCache" #define PIXMAP_CACHE_SETTING "pixmapCache"
#define PIXMAP_CACHE_DEFAULT 64 /* MB */ #define PIXMAP_CACHE_DEFAULT 64 /* MB */
#define HIRES_PRINT_SETTING "hiresPrint"
#define HIRES_PRINT_DEFAULT false
#define PRINT_NAME_SETTING "printName" #define PRINT_NAME_SETTING "printName"
#define PRINT_NAME_DEFAULT true #define PRINT_NAME_DEFAULT true
#define PRINT_DATE_SETTING "printDate" #define PRINT_DATE_SETTING "printDate"