mirror of
https://github.com/subsurface/subsurface.git
synced 2024-12-02 23:20:20 +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
|
configuredivecomputerthreads.cpp
|
||||||
divesitehelpers.cpp
|
divesitehelpers.cpp
|
||||||
templatelayout.cpp
|
templatelayout.cpp
|
||||||
|
printer.cpp
|
||||||
${PLATFORM_SRC}
|
${PLATFORM_SRC}
|
||||||
)
|
)
|
||||||
source_group("Subsurface Core" FILES ${SUBSURFACE_CORE_LIB_SRCS})
|
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 \
|
units.h \
|
||||||
divecomputer.h \
|
divecomputer.h \
|
||||||
templatelayout.h \
|
templatelayout.h \
|
||||||
|
printer.h \
|
||||||
qt-ui/about.h \
|
qt-ui/about.h \
|
||||||
qt-ui/completionmodels.h \
|
qt-ui/completionmodels.h \
|
||||||
qt-ui/divecomputermanagementdialog.h \
|
qt-ui/divecomputermanagementdialog.h \
|
||||||
|
@ -162,6 +163,7 @@ SOURCES = \
|
||||||
gaspressures.c \
|
gaspressures.c \
|
||||||
divecomputer.cpp \
|
divecomputer.cpp \
|
||||||
templatelayout.cpp \
|
templatelayout.cpp \
|
||||||
|
printer.cpp \
|
||||||
worldmap-save.c \
|
worldmap-save.c \
|
||||||
save-html.c \
|
save-html.c \
|
||||||
qt-gui.cpp \
|
qt-gui.cpp \
|
||||||
|
|
Loading…
Reference in a new issue