summaryrefslogtreecommitdiffstats
path: root/printer.cpp
blob: 5d340055e7b6f421dfb9a22a96fbef0cc21268e5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#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();
}