X-Git-Url: https://gitweb.stoutner.com/?p=PrivacyBrowserPC.git;a=blobdiff_plain;f=src%2Fviews%2FBrowserView.cpp;fp=src%2Fviews%2FBrowserView.cpp;h=b3f593ff93352a1d023a895207cb5832af21e036;hp=e7f238fc9beacb174d292a77d6c6e5fb58d6ebe3;hb=273588ac3f6077b62c1fb2b55b9cdc6b5e200fad;hpb=ab3422aabe802b11f4ddf32df6a2a33e1fff9c96 diff --git a/src/views/BrowserView.cpp b/src/views/BrowserView.cpp index e7f238f..b3f593f 100644 --- a/src/views/BrowserView.cpp +++ b/src/views/BrowserView.cpp @@ -31,6 +31,9 @@ // Qt framework headers. #include +#include +#include +#include // Initialize the public static variables. QString BrowserView::webEngineDefaultUserAgent = QStringLiteral(""); @@ -577,6 +580,60 @@ void BrowserView::pageLinkHovered(const QString &linkUrl) const emit linkHovered(linkUrl); } +void BrowserView::print() const +{ + // Create a printer. + QPrinter printer; + + // Set the resolution to be 300 dpi. + printer.setResolution(300); + + // Create a printer dialog. + QPrintDialog printDialog(&printer, webEngineViewPointer); + + // Display the dialog and print the page if instructed. + if (printDialog.exec() == QDialog::Accepted) + printWebpage(&printer); +} + +void BrowserView::printPreview() const +{ + // Create a printer. + QPrinter printer; + + // Set the resolution to be 300 dpi. + printer.setResolution(300); + + // Create a print preview dialog. + QPrintPreviewDialog printPreviewDialog(&printer, webEngineViewPointer); + + // Generate the print preview. + connect(&printPreviewDialog, SIGNAL(paintRequested(QPrinter *)), this, SLOT(printWebpage(QPrinter *))); + + // Display the dialog. + printPreviewDialog.exec(); +} + +void BrowserView::printWebpage(QPrinter *printerPointer) const +{ + // Create an event loop. For some reason, the print preview doesn't produce any output unless it is run inside an event loop. + QEventLoop eventLoop; + + // Print the webpage, converting the callback above into a `QWebEngineCallback`. + // Printing requires that the printer be a pointer, not a reference, or it will crash with much cursing. + webEnginePagePointer->print(printerPointer, [&eventLoop](bool printSuccess) + { + // Instruct the compiler to ignore the unused parameter. + (void) printSuccess; + + // Quit the loop. + eventLoop.quit(); + }); + + // Execute the loop. + eventLoop.exec(); +} + void BrowserView::refresh() const { // Reload the website.