Skip to content

Commit

Permalink
Printing: Add Printer class that holds the rendering logic.
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Gehadelrobey authored and neolit123 committed Jun 4, 2015
1 parent 5e2d3d6 commit 3f3937f
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 0 deletions.
1 change: 1 addition & 0 deletions CMakeLists.txt
Expand Up @@ -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})
Expand Down
48 changes: 48 additions & 0 deletions printer.cpp
@@ -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 changes: 20 additions & 0 deletions printer.h
@@ -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
2 changes: 2 additions & 0 deletions subsurface.pro
Expand Up @@ -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 \
Expand Down Expand Up @@ -162,6 +163,7 @@ SOURCES = \
gaspressures.c \
divecomputer.cpp \
templatelayout.cpp \
printer.cpp \
worldmap-save.c \
save-html.c \
qt-gui.cpp \
Expand Down

0 comments on commit 3f3937f

Please sign in to comment.