summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Tomaz Canabrava <tomaz.canabrava@intel.com>2016-01-07 19:33:58 -0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2016-01-08 08:04:58 -0800
commit19dee335e457433e9a3f215e35a60e282a383a11 (patch)
tree2b4586bff6d4f9d344fb88a83e74ed64a6f71c50
parent25aa80846b84c0b3cd3e0b0256a046e1e92fb1db (diff)
downloadsubsurface-19dee335e457433e9a3f215e35a60e282a383a11.tar.gz
Lazy Initialize QPrinter
it was taking 3 - 4 secs here to open the print dialog, first I tought it was a bug in our side, but it looks like it's a Qt bug, and by lazy initializing it we don't actually solve this, since it will still take 3 - 4 secs for the printer to start, but the dialog will appear much quicker. Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--desktop-widgets/printdialog.cpp32
-rw-r--r--desktop-widgets/printdialog.h4
2 files changed, 28 insertions, 8 deletions
diff --git a/desktop-widgets/printdialog.cpp b/desktop-widgets/printdialog.cpp
index cf08062d2..d10e67921 100644
--- a/desktop-widgets/printdialog.cpp
+++ b/desktop-widgets/printdialog.cpp
@@ -14,7 +14,10 @@
template_options::color_palette_struct ssrf_colors, almond_colors, blueshades_colors, custom_colors;
-PrintDialog::PrintDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f)
+PrintDialog::PrintDialog(QWidget *parent, Qt::WindowFlags f) :
+ QDialog(parent, f),
+ printer(NULL),
+ qprinter(NULL)
{
// initialize const colors
ssrf_colors.color1 = QColor::fromRgb(0xff, 0xff, 0xff);
@@ -57,7 +60,6 @@ PrintDialog::PrintDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f
printOptions.color_selected = s.value("color_selected").toBool();
printOptions.landscape = s.value("landscape").toBool();
printOptions.p_template = s.value("template_selected").toString();
- qprinter.setOrientation((QPrinter::Orientation)printOptions.landscape);
templateOptions.font_index = s.value("font").toInt();
templateOptions.font_size = s.value("font_size").toDouble();
templateOptions.color_palette_index = s.value("color_palette").toInt();
@@ -95,9 +97,6 @@ PrintDialog::PrintDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f
// create a print options object and pass our options struct
optionsWidget = new PrintOptions(this, &printOptions, &templateOptions);
- // create a new printer object
- printer = new Printer(&qprinter, &printOptions, &templateOptions, Printer::PRINT);
-
QVBoxLayout *layout = new QVBoxLayout(this);
setLayout(layout);
@@ -140,6 +139,12 @@ PrintDialog::PrintDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f
connect(this, SIGNAL(finished(int)), this, SLOT(onFinished()));
}
+PrintDialog::~PrintDialog()
+{
+ delete qprinter;
+ delete printer;
+}
+
void PrintDialog::onFinished()
{
QSettings s;
@@ -165,9 +170,20 @@ void PrintDialog::onFinished()
s.setValue("custom_color_5", custom_colors.color5.name());
}
+void PrintDialog::createPrinterObj()
+{
+ // create a new printer object
+ if (!printer) {
+ qprinter = new QPrinter();
+ qprinter->setOrientation((QPrinter::Orientation)printOptions.landscape);
+ printer = new Printer(qprinter, &printOptions, &templateOptions, Printer::PRINT);
+ }
+}
+
void PrintDialog::previewClicked(void)
{
- QPrintPreviewDialog previewDialog(&qprinter, this, Qt::Window
+ createPrinterObj();
+ QPrintPreviewDialog previewDialog(qprinter, this, Qt::Window
| Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint
| Qt::WindowTitleHint);
connect(&previewDialog, SIGNAL(paintRequested(QPrinter *)), this, SLOT(onPaintRequested(QPrinter *)));
@@ -176,7 +192,8 @@ void PrintDialog::previewClicked(void)
void PrintDialog::printClicked(void)
{
- QPrintDialog printDialog(&qprinter, this);
+ createPrinterObj();
+ QPrintDialog printDialog(qprinter, this);
if (printDialog.exec() == QDialog::Accepted) {
connect(printer, SIGNAL(progessUpdated(int)), progressBar, SLOT(setValue(int)));
printer->print();
@@ -186,6 +203,7 @@ void PrintDialog::printClicked(void)
void PrintDialog::onPaintRequested(QPrinter *printerPtr)
{
+ createPrinterObj();
connect(printer, SIGNAL(progessUpdated(int)), progressBar, SLOT(setValue(int)));
printer->print();
progressBar->setValue(0);
diff --git a/desktop-widgets/printdialog.h b/desktop-widgets/printdialog.h
index a00c4c5d9..c615744e8 100644
--- a/desktop-widgets/printdialog.h
+++ b/desktop-widgets/printdialog.h
@@ -18,12 +18,13 @@ class PrintDialog : public QDialog {
public:
explicit PrintDialog(QWidget *parent = 0, Qt::WindowFlags f = 0);
+ virtual ~PrintDialog();
private:
PrintOptions *optionsWidget;
QProgressBar *progressBar;
Printer *printer;
- QPrinter qprinter;
+ QPrinter *qprinter;
struct print_options printOptions;
struct template_options templateOptions;
@@ -33,6 +34,7 @@ slots:
void previewClicked();
void printClicked();
void onPaintRequested(QPrinter *);
+ void createPrinterObj();
};
#endif
#endif // PRINTDIALOG_H