mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 13:10:19 +00:00
a820688aeb
The progress bar shows the progress of both the rendering part and the templating part, unfortunately we can't check the progress of Grantlee templating engine so the progess bar doesn't have a constant pace it stops a little around 20%. Signed-off-by: Gehad elrobey <gehadelrobey@gmail.com> Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
59 lines
1.5 KiB
C++
59 lines
1.5 KiB
C++
#include "printer.h"
|
|
#include "templatelayout.h"
|
|
|
|
#include <QtWebKitWidgets>
|
|
#include <QPainter>
|
|
|
|
#define A4_300DPI_WIDTH 2480
|
|
#define A4_300DPI_HIGHT 3508
|
|
|
|
Printer::Printer(QPrinter *printer)
|
|
{
|
|
this->printer = printer;
|
|
|
|
//override these settings for now.
|
|
printer->setFullPage(true);
|
|
printer->setOrientation(QPrinter::Portrait);
|
|
printer->setPaperSize(QPrinter::A4);
|
|
printer->setPrintRange(QPrinter::AllPages);
|
|
printer->setResolution(300);
|
|
done = 0;
|
|
}
|
|
|
|
void Printer::render()
|
|
{
|
|
QPainter painter;
|
|
QSize size(A4_300DPI_WIDTH, A4_300DPI_HIGHT);
|
|
painter.begin(printer);
|
|
painter.setRenderHint(QPainter::Antialiasing);
|
|
painter.setRenderHint(QPainter::SmoothPixmapTransform);
|
|
|
|
webView->page()->setViewportSize(size);
|
|
|
|
int Pages = ceil((float)webView->page()->mainFrame()->contentsSize().rheight() / A4_300DPI_HIGHT);
|
|
for (int i = 0; i < Pages; i++) {
|
|
webView->page()->mainFrame()->render(&painter, QWebFrame::ContentsLayer);
|
|
webView->page()->mainFrame()->scroll(0, A4_300DPI_HIGHT);
|
|
//rendering progress is 4/5 of total work
|
|
emit(progessUpdated((i * 80.0 / Pages) + done));
|
|
if (i < Pages - 1)
|
|
printer->newPage();
|
|
}
|
|
painter.end();
|
|
}
|
|
|
|
//value: ranges from 0 : 100 and shows the progress of the templating engine
|
|
void Printer::templateProgessUpdated(int value)
|
|
{
|
|
done = value / 5; //template progess if 1/5 of total work
|
|
emit progessUpdated(done);
|
|
}
|
|
|
|
void Printer::print()
|
|
{
|
|
TemplateLayout t;
|
|
connect(&t, SIGNAL(progressUpdated(int)), this, SLOT(templateProgessUpdated(int)));
|
|
webView = new QWebView();
|
|
webView->setHtml(t.generate());
|
|
render();
|
|
}
|