summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/webpage.cpp12
-rw-r--r--src/websnap.cpp65
-rw-r--r--src/websnap.h22
-rw-r--r--src/webview.cpp8
4 files changed, 90 insertions, 17 deletions
diff --git a/src/webpage.cpp b/src/webpage.cpp
index 32b785b4..6b45ad10 100644
--- a/src/webpage.cpp
+++ b/src/webpage.cpp
@@ -46,6 +46,7 @@
#include "networkaccessmanager.h"
#include "adblockmanager.h"
#include "urlbar.h"
+#include "websnap.h"
#include "sslinfodialog_p.h"
@@ -211,7 +212,7 @@ WebPage::WebPage(QWidget *parent)
WebPage::~WebPage()
{
- disconnect();
+ disconnect();
}
@@ -479,6 +480,15 @@ void WebPage::loadFinished(bool ok)
{
wallet()->fillFormData(mainFrame());
}
+/*
+ if (ok)
+ {
+ QPixmap preview = WebSnap::renderVisiblePagePreview(*this);
+ QString path = WebSnap::imagePathFromUrl(mainFrame()->url().toString());
+ QFile::remove(path);
+ preview.save(path);
+ }
+*/
}
diff --git a/src/websnap.cpp b/src/websnap.cpp
index c4e50b3c..db0c791c 100644
--- a/src/websnap.cpp
+++ b/src/websnap.cpp
@@ -102,27 +102,31 @@ QPixmap WebSnap::renderTabPreview(const QWebPage &page, int w, int h)
}
-
-// NOTE please, be careful modifying this.
-// You are playing with fire..
-QPixmap WebSnap::renderPagePreview(const QWebPage &page, int w, int h)
+// This method tries to render a page currently displayed in a tab without alterate it.
+QPixmap WebSnap::renderVisiblePagePreview(const QWebPage &page, int w, int h)
{
- // prepare page
+ // save page settings
QSize oldSize = page.viewportSize();
-
- // find the best size
+ QPoint oldScrollPosition = page.mainFrame()->scrollPosition();
+
+ // minimum width
+ int width = 640;
+
+ // find best width
QSize size;
- int width = page.mainFrame()->contentsSize().width();
- if (width < 640)
+ while(page.mainFrame()->scrollBarMaximum(Qt::Horizontal) && width<1920)
{
- width = 640;
+ width+=5;
+ size = QSize(width, width * ((0.0 + h) / w));
+ page.setViewportSize(size);
}
- size = QSize(width, width * ((0.0 + h) / w));
- page.setViewportSize(size);
- //render
- QPixmap pageImage = WebSnap::render(page, page.viewportSize().width(), page.viewportSize().height());
+ // scroll to top
+ page.mainFrame()->setScrollBarValue(Qt::Vertical, 0);
+ // render
+ QPixmap pageImage = WebSnap::render(page, page.viewportSize().width(), page.viewportSize().height());
+
// detect scrollbar size
int scrollbarWidth = (page.mainFrame()->scrollBarMaximum(Qt::Horizontal) ? 17 : 0); //TODO: detect QStyle size for scrollbars
int scrollbarHeight = (page.mainFrame()->scrollBarMaximum(Qt::Vertical) ? 17 : 0);
@@ -130,14 +134,43 @@ QPixmap WebSnap::renderPagePreview(const QWebPage &page, int w, int h)
// resize image
pageImage = pageImage.copy(0, 0, width - scrollbarWidth, size.height() - scrollbarHeight);
pageImage = pageImage.scaled(w, h, Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation);
-
+
// restore page settings
page.setViewportSize(oldSize);
-
+ page.mainFrame()->setScrollPosition(oldScrollPosition);
+
return pageImage;
}
+QPixmap WebSnap::renderClosingPagePreview(const QWebPage &page, int w, int h)
+{
+ //scroll to top
+ page.mainFrame()->setScrollBarValue(Qt::Vertical, 0);
+
+ // reduce as much as possible
+ page.setViewportSize(QSize(10, 10));
+
+ return renderPagePreview(page, w, h);
+}
+
+
+QPixmap WebSnap::renderPagePreview(const QWebPage &page, int w, int h)
+{
+ //prepare page
+ page.mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff);
+ int width = page.mainFrame()->contentsSize().width();
+ page.setViewportSize(QSize(width, width * ((0.0 + h) / w)));
+
+ //render
+ QPixmap pageImage = WebSnap::render(page, page.viewportSize().width(), page.viewportSize().height());
+
+ // resize image
+ pageImage = pageImage.scaled(w, h, Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation);
+
+ return pageImage;
+}
+
QString WebSnap::imagePathFromUrl(const KUrl &url)
{
diff --git a/src/websnap.h b/src/websnap.h
index d1006c18..41db8c71 100644
--- a/src/websnap.h
+++ b/src/websnap.h
@@ -89,7 +89,29 @@ public:
* @return the pixmap snapped from the page
*/
static QPixmap renderPagePreview(const QWebPage &page, int w = WIDTH, int h = HEIGHT);
+
+ /**
+ * Snaps a pixmap of size w * h from a visible page
+ *
+ * @param page the page to snap
+ * @param w the image width
+ * @param h the image height
+ *
+ * @return the pixmap snapped from the page
+ */
+ static QPixmap renderVisiblePagePreview(const QWebPage &page, int w = WIDTH, int h = HEIGHT);
+
+ /**
+ * Snaps a pixmap of size w * h from a visible page
+ *
+ * @param page the page to snap
+ * @param w the image width
+ * @param h the image height
+ *
+ * @return the pixmap snapped from the page
+ */
+ static QPixmap renderClosingPagePreview(const QWebPage &page, int w = WIDTH, int h = HEIGHT);
/**
* Snaps a pixmap of size w * h from a page for tab preview
diff --git a/src/webview.cpp b/src/webview.cpp
index afa63028..3f6b289b 100644
--- a/src/webview.cpp
+++ b/src/webview.cpp
@@ -38,6 +38,7 @@
#include "webpage.h"
#include "bookmarksmanager.h"
#include "searchengine.h"
+#include "websnap.h"
// KDE Includes
#include <KService>
@@ -111,6 +112,13 @@ WebView::~WebView()
{
delete _scrollTimer;
disconnect();
+
+ WebPage* p = page();
+
+ QPixmap preview = WebSnap::renderClosingPagePreview(*p);
+ QString path = WebSnap::imagePathFromUrl(p->mainFrame()->url().toString());
+ QFile::remove(path);
+ preview.save(path);
}