mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-30 22:20:21 +00:00
Printing: Add Printer class that holds the rendering logic.
Render Html pages into a QWebView then print it using QPainter. the Printer::print() is called that prepare the HTML file to be rendered by the QWebView. Printer::render() will do the rendering task. 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>
This commit is contained in:
parent
e2ad38189e
commit
6de5cfb7a4
4 changed files with 71 additions and 0 deletions
|
@ -261,6 +261,7 @@ set(SUBSURFACE_CORE_LIB_SRCS
|
|||
configuredivecomputerthreads.cpp
|
||||
divesitehelpers.cpp
|
||||
templatelayout.cpp
|
||||
printer.cpp
|
||||
${PLATFORM_SRC}
|
||||
)
|
||||
source_group("Subsurface Core" FILES ${SUBSURFACE_CORE_LIB_SRCS})
|
||||
|
|
48
printer.cpp
Normal file
48
printer.cpp
Normal file
|
@ -0,0 +1,48 @@
|
|||
#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);
|
||||
}
|
||||
|
||||
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);
|
||||
if (i < Pages - 1)
|
||||
printer->newPage();
|
||||
}
|
||||
painter.end();
|
||||
}
|
||||
|
||||
void Printer::print()
|
||||
{
|
||||
TemplateLayout t;
|
||||
webView = new QWebView();
|
||||
webView->setHtml(t.generate());
|
||||
render();
|
||||
}
|
20
printer.h
Normal file
20
printer.h
Normal file
|
@ -0,0 +1,20 @@
|
|||
#ifndef PRINTER_H
|
||||
#define PRINTER_H
|
||||
|
||||
#include <QPrinter>
|
||||
#include <QWebView>
|
||||
|
||||
class Printer : public QObject {
|
||||
Q_OBJECT
|
||||
|
||||
private:
|
||||
QPrinter *printer;
|
||||
QWebView *webView;
|
||||
void render();
|
||||
|
||||
public:
|
||||
Printer(QPrinter *printer);
|
||||
void print();
|
||||
};
|
||||
|
||||
#endif //PRINTER_H
|
|
@ -68,6 +68,7 @@ HEADERS = \
|
|||
units.h \
|
||||
divecomputer.h \
|
||||
templatelayout.h \
|
||||
printer.h \
|
||||
qt-ui/about.h \
|
||||
qt-ui/completionmodels.h \
|
||||
qt-ui/divecomputermanagementdialog.h \
|
||||
|
@ -162,6 +163,7 @@ SOURCES = \
|
|||
gaspressures.c \
|
||||
divecomputer.cpp \
|
||||
templatelayout.cpp \
|
||||
printer.cpp \
|
||||
worldmap-save.c \
|
||||
save-html.c \
|
||||
qt-gui.cpp \
|
||||
|
|
Loading…
Reference in a new issue