From 8343d45f3dfd631a3f5ac4213918f285930eb446 Mon Sep 17 00:00:00 2001 From: matgic78 Date: Thu, 17 Dec 2009 18:22:23 +0100 Subject: Re-implemented previews in homepage without using plugins. Not finished yet : Little things that change: -nice buttons appearing on hover -transitions on hover TODO: -when a preview is empty or when loading, it is very ugly -for now there's no way to choose the page you want to preview -port "closed Tabs" to this new architecture -totally remove PreviewImage classes -eventually, specific contextmenu for previews --- src/websnap.cpp | 52 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 49 insertions(+), 3 deletions(-) (limited to 'src/websnap.cpp') diff --git a/src/websnap.cpp b/src/websnap.cpp index 7dcbb836..e5db7c4e 100644 --- a/src/websnap.cpp +++ b/src/websnap.cpp @@ -115,16 +115,62 @@ QPixmap WebSnap::renderPreview(const QWebPage &page,int w, int h) } +KUrl WebSnap::fileForUrl(KUrl url) +{ + QString filePath = + KStandardDirs::locateLocal("cache", QString("thumbs/") + WebSnap::guessNameFromUrl(url) + ".png", true); + return KUrl(filePath); +} + + +void WebSnap::SetData(QVariant data) +{ + m_data = data; +} + +QVariant& WebSnap::data() +{ + return m_data; +} + + + +QString WebSnap::guessNameFromUrl(QUrl url) +{ + QString name = url.toString( QUrl::RemoveScheme | QUrl::RemoveUserInfo | QUrl::StripTrailingSlash ); + + // TODO learn Regular Expressions :) + // and implement something better here.. + name.remove('/'); + name.remove('&'); + name.remove('.'); + name.remove('-'); + name.remove('_'); + name.remove('?'); + name.remove('='); + name.remove('+'); + + return name; +} + + void WebSnap::saveResult(bool ok) { // crude error-checking if (!ok) { kDebug() << "Error loading site.."; - return; + m_snapTitle = "Error..."; + m_image = QPixmap(); } - - m_image = renderPreview(m_page, WIDTH, HEIGHT); + else + { + m_image = renderPreview(m_page, WIDTH, HEIGHT); + } + + m_image.save(fileForUrl(m_url).toLocalFile()); + kDebug() << "finished"; + emit finished(); } -- cgit v1.2.1 From 18b87086d1a0e472662f3883962b60dbe57e215f Mon Sep 17 00:00:00 2001 From: matgic78 Date: Sat, 26 Dec 2009 13:00:53 +0100 Subject: First expermimental implementation of a new way of choosing a preview --- src/websnap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/websnap.cpp') diff --git a/src/websnap.cpp b/src/websnap.cpp index e5db7c4e..0d72ef3a 100644 --- a/src/websnap.cpp +++ b/src/websnap.cpp @@ -167,7 +167,7 @@ void WebSnap::saveResult(bool ok) { m_image = renderPreview(m_page, WIDTH, HEIGHT); } - + QFile::remove(fileForUrl(m_url).toLocalFile()); m_image.save(fileForUrl(m_url).toLocalFile()); kDebug() << "finished"; -- cgit v1.2.1 From 544094302a51b919b1eea86b313ec10d47533a08 Mon Sep 17 00:00:00 2001 From: matgic78 Date: Fri, 15 Jan 2010 17:20:51 +0100 Subject: A new approach for choosing previews : a bar appears, then you browse to the page you want to preview, and then you click a button --- src/websnap.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'src/websnap.cpp') diff --git a/src/websnap.cpp b/src/websnap.cpp index 0d72ef3a..ff4746ca 100644 --- a/src/websnap.cpp +++ b/src/websnap.cpp @@ -42,10 +42,6 @@ #include -#define WIDTH 200 -#define HEIGHT 150 - - WebSnap::WebSnap(const QUrl &url) : QObject() { @@ -115,6 +111,13 @@ QPixmap WebSnap::renderPreview(const QWebPage &page,int w, int h) } +void WebSnap::savePreview(QPixmap pm, KUrl url) +{ + QFile::remove(fileForUrl(url).toLocalFile()); + pm.save(fileForUrl(url).toLocalFile()); +} + + KUrl WebSnap::fileForUrl(KUrl url) { QString filePath = -- cgit v1.2.1 From 50d6ee1e340c35261b0445c1a2c793fb07da4854 Mon Sep 17 00:00:00 2001 From: matgic78 Date: Sun, 17 Jan 2010 19:06:27 +0100 Subject: bugfixing... --- src/websnap.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/websnap.cpp') diff --git a/src/websnap.cpp b/src/websnap.cpp index ff4746ca..fde7bd94 100644 --- a/src/websnap.cpp +++ b/src/websnap.cpp @@ -108,6 +108,8 @@ QPixmap WebSnap::renderPreview(const QWebPage &page,int w, int h) page.mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAsNeeded); return QPixmap::fromImage(pageImage); + + kDebug() << w << h; } @@ -172,8 +174,8 @@ void WebSnap::saveResult(bool ok) } QFile::remove(fileForUrl(m_url).toLocalFile()); m_image.save(fileForUrl(m_url).toLocalFile()); - kDebug() << "finished"; + kDebug() << "finished"; emit finished(); } -- cgit v1.2.1 From d7b37b950bb9ac396914d937df44891e02a64811 Mon Sep 17 00:00:00 2001 From: matgic78 Date: Fri, 29 Jan 2010 19:55:08 +0100 Subject: bugfix : previews were sometimes saved using the good size --- src/websnap.cpp | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) (limited to 'src/websnap.cpp') diff --git a/src/websnap.cpp b/src/websnap.cpp index fde7bd94..983da716 100644 --- a/src/websnap.cpp +++ b/src/websnap.cpp @@ -80,17 +80,10 @@ QPixmap WebSnap::renderPreview(const QWebPage &page,int w, int h) // find the best size QSize size; - if (page.viewportSize().width() && page.viewportSize().height()) - { - size = page.viewportSize(); - } - else - { - int width = page.mainFrame()->contentsSize().width(); - if (width < 640) width = 640; - size = QSize(width,width*((0.0+h)/w)); - page.setViewportSize(size); - } + int width = page.mainFrame()->contentsSize().width(); + if (width < 640) width = 640; + size = QSize(width,width*((0.0+h)/w)); + page.setViewportSize(size); // create the page image QImage pageImage = QImage(size, QImage::Format_ARGB32_Premultiplied); @@ -108,13 +101,12 @@ QPixmap WebSnap::renderPreview(const QWebPage &page,int w, int h) page.mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAsNeeded); return QPixmap::fromImage(pageImage); - - kDebug() << w << h; } void WebSnap::savePreview(QPixmap pm, KUrl url) { + kDebug() << "saving preview"; QFile::remove(fileForUrl(url).toLocalFile()); pm.save(fileForUrl(url).toLocalFile()); } -- cgit v1.2.1 From 6f3b61c0462b08d3c2a34ac1923470a3690233ee Mon Sep 17 00:00:00 2001 From: matgic78 Date: Sat, 6 Feb 2010 11:19:18 +0100 Subject: Fix loading previews : when load finished, result wasn't shown --- src/websnap.cpp | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) (limited to 'src/websnap.cpp') diff --git a/src/websnap.cpp b/src/websnap.cpp index 983da716..11b70e9e 100644 --- a/src/websnap.cpp +++ b/src/websnap.cpp @@ -29,6 +29,9 @@ #include "websnap.h" #include "websnap.moc" +// Local Includes +#include "newtabpage.h" + // KDE Includes #include #include @@ -42,10 +45,12 @@ #include -WebSnap::WebSnap(const QUrl &url) +WebSnap::WebSnap(const QUrl& url, QWebPage* originatingPage, int previewIndex) : QObject() { m_url = url; + m_originatingPage = originatingPage; + m_previewIndex = previewIndex; // this to not register websnap history m_page.settings()->setAttribute(QWebSettings::PrivateBrowsingEnabled, true); @@ -120,18 +125,6 @@ KUrl WebSnap::fileForUrl(KUrl url) } -void WebSnap::SetData(QVariant data) -{ - m_data = data; -} - -QVariant& WebSnap::data() -{ - return m_data; -} - - - QString WebSnap::guessNameFromUrl(QUrl url) { QString name = url.toString( QUrl::RemoveScheme | QUrl::RemoveUserInfo | QUrl::StripTrailingSlash ); @@ -163,12 +156,16 @@ void WebSnap::saveResult(bool ok) else { m_image = renderPreview(m_page, WIDTH, HEIGHT); + m_snapTitle = m_page.mainFrame()->title(); } QFile::remove(fileForUrl(m_url).toLocalFile()); m_image.save(fileForUrl(m_url).toLocalFile()); - kDebug() << "finished"; - emit finished(); + //m_originatingPage->mainFrame()->load(KUrl("about:preview/replace/" + QVariant(m_previewIndex).toString())); + NewTabPage p(m_originatingPage->mainFrame()); + p.snapFinished(m_previewIndex, m_url, m_snapTitle); + + deleteLater(); } -- cgit v1.2.1 From 067b99a053b6f8b1ccab507be8e828b2f72a1e43 Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Wed, 10 Feb 2010 10:57:57 +0100 Subject: Fix copyright for 0.4 beta release --- src/websnap.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/websnap.cpp') diff --git a/src/websnap.cpp b/src/websnap.cpp index 11b70e9e..6310c868 100644 --- a/src/websnap.cpp +++ b/src/websnap.cpp @@ -3,7 +3,8 @@ * This file is a part of the rekonq project * * Copyright (C) 2009 Nokia Corporation -* Copyright (C) 2009 by Andrea Diamantini +* Copyright (C) 2009-2010 by Andrea Diamantini +* Copyright (C) 2010 by Matthieu Gicquel * * * This program is free software; you can redistribute it and/or -- cgit v1.2.1 From 984526692fa8d8b77f4cc026a2f527a974e403c0 Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Fri, 5 Mar 2010 01:21:58 +0100 Subject: Cleaning websnaps code.. --- src/websnap.cpp | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) (limited to 'src/websnap.cpp') diff --git a/src/websnap.cpp b/src/websnap.cpp index 6310c868..2916418b 100644 --- a/src/websnap.cpp +++ b/src/websnap.cpp @@ -46,13 +46,12 @@ #include -WebSnap::WebSnap(const QUrl& url, QWebPage* originatingPage, int previewIndex) +WebSnap::WebSnap(const QUrl& url, QWebFrame *frame, int index) : QObject() + , m_url(url) + , m_frame(frame) + , m_previewIndex(index) { - m_url = url; - m_originatingPage = originatingPage; - m_previewIndex = previewIndex; - // this to not register websnap history m_page.settings()->setAttribute(QWebSettings::PrivateBrowsingEnabled, true); @@ -76,14 +75,12 @@ void WebSnap::load() } -QPixmap WebSnap::renderPreview(const QWebPage &page,int w, int h) +QPixmap WebSnap::renderPreview(const QWebPage &page, int w, int h) { // prepare page - page.mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff); // Why it doesn't work with one setScrollBarPolicy? - page.mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff); // bug in qtwebkit ? - page.mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff); + page.mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff); page.mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff); - + // find the best size QSize size; int width = page.mainFrame()->contentsSize().width(); @@ -102,8 +99,6 @@ QPixmap WebSnap::renderPreview(const QWebPage &page,int w, int h) // restore page settings page.mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAsNeeded); - page.mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAsNeeded); - page.mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAsNeeded); page.mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAsNeeded); return QPixmap::fromImage(pageImage); @@ -120,8 +115,7 @@ void WebSnap::savePreview(QPixmap pm, KUrl url) KUrl WebSnap::fileForUrl(KUrl url) { - QString filePath = - KStandardDirs::locateLocal("cache", QString("thumbs/") + WebSnap::guessNameFromUrl(url) + ".png", true); + QString filePath = KStandardDirs::locateLocal("cache", QString("thumbs/") + WebSnap::guessNameFromUrl(url) + ".png", true); return KUrl(filePath); } @@ -162,15 +156,13 @@ void WebSnap::saveResult(bool ok) QFile::remove(fileForUrl(m_url).toLocalFile()); m_image.save(fileForUrl(m_url).toLocalFile()); - //m_originatingPage->mainFrame()->load(KUrl("about:preview/replace/" + QVariant(m_previewIndex).toString())); - NewTabPage p(m_originatingPage->mainFrame()); + NewTabPage p( m_frame ); p.snapFinished(m_previewIndex, m_url, m_snapTitle); deleteLater(); } - QString WebSnap::snapTitle() { return m_page.mainFrame()->title(); -- cgit v1.2.1 From 384b3f1d066443b67b9d3d6389846a44e976876f Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Fri, 5 Mar 2010 12:41:28 +0100 Subject: Ok, things seem working well now. Anyway, it needs some days of testing.. --- src/websnap.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src/websnap.cpp') diff --git a/src/websnap.cpp b/src/websnap.cpp index 2916418b..ceb24b4f 100644 --- a/src/websnap.cpp +++ b/src/websnap.cpp @@ -75,11 +75,14 @@ void WebSnap::load() } +// NOTE please, be careful modifying this. +// You are playing with fire.. QPixmap WebSnap::renderPreview(const QWebPage &page, int w, int h) { // prepare page page.mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff); page.mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff); + QSize oldSize = page.viewportSize(); // find the best size QSize size; @@ -90,7 +93,8 @@ QPixmap WebSnap::renderPreview(const QWebPage &page, int w, int h) // create the page image QImage pageImage = QImage(size, QImage::Format_ARGB32_Premultiplied); - pageImage.fill(Qt::transparent); + pageImage.fill(Qt::transparent); + // render it QPainter p(&pageImage); page.mainFrame()->render(&p); @@ -100,7 +104,8 @@ QPixmap WebSnap::renderPreview(const QWebPage &page, int w, int h) // restore page settings page.mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAsNeeded); page.mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAsNeeded); - + page.setViewportSize(oldSize); + return QPixmap::fromImage(pageImage); } -- cgit v1.2.1 From c4a3ac8eb53f109a3da1f53f279fc86edcb92597 Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Tue, 16 Mar 2010 01:45:50 +0100 Subject: First bunch of fixes for the NewTabPage + WebSnap chain. It seems clear (to me) that they leaks memory, so they urgently need fixes. And a complete redesign. This is just a first (the easiest) part of it: - Removed some unuseful methods, - Added some documentation for the WebSnap class - Cleaned code, in general --- src/websnap.cpp | 46 +++++++++++++++++----------------------------- 1 file changed, 17 insertions(+), 29 deletions(-) (limited to 'src/websnap.cpp') diff --git a/src/websnap.cpp b/src/websnap.cpp index ceb24b4f..906bbc1e 100644 --- a/src/websnap.cpp +++ b/src/websnap.cpp @@ -60,15 +60,11 @@ WebSnap::WebSnap(const QUrl& url, QWebFrame *frame, int index) m_page.settings()->setAttribute(QWebSettings::JavascriptEnabled, false); connect(&m_page, SIGNAL(loadFinished(bool)), this, SLOT(saveResult(bool))); + QTimer::singleShot(0, this, SLOT(load())); } -WebSnap::~WebSnap() -{ -} - - void WebSnap::load() { m_page.mainFrame()->load(m_url); @@ -77,7 +73,7 @@ void WebSnap::load() // NOTE please, be careful modifying this. // You are playing with fire.. -QPixmap WebSnap::renderPreview(const QWebPage &page, int w, int h) +QPixmap WebSnap::renderPreview(const QWebPage &page, int w, int h, bool save) { // prepare page page.mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff); @@ -87,7 +83,10 @@ QPixmap WebSnap::renderPreview(const QWebPage &page, int w, int h) // find the best size QSize size; int width = page.mainFrame()->contentsSize().width(); - if (width < 640) width = 640; + if (width < 640) + { + width = 640; + } size = QSize(width,width*((0.0+h)/w)); page.setViewportSize(size); @@ -106,15 +105,16 @@ QPixmap WebSnap::renderPreview(const QWebPage &page, int w, int h) page.mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAsNeeded); page.setViewportSize(oldSize); - return QPixmap::fromImage(pageImage); -} - - -void WebSnap::savePreview(QPixmap pm, KUrl url) -{ - kDebug() << "saving preview"; - QFile::remove(fileForUrl(url).toLocalFile()); - pm.save(fileForUrl(url).toLocalFile()); + QPixmap pm = QPixmap::fromImage(pageImage); + if(save) + { + KUrl url( page.mainFrame()->url() ); + kDebug() << "saving preview"; + QFile::remove( fileForUrl(url).toLocalFile() ); + pm.save(fileForUrl(url).toLocalFile()); + } + + return pm; } @@ -164,7 +164,7 @@ void WebSnap::saveResult(bool ok) NewTabPage p( m_frame ); p.snapFinished(m_previewIndex, m_url, m_snapTitle); - deleteLater(); + this->deleteLater(); } @@ -172,15 +172,3 @@ QString WebSnap::snapTitle() { return m_page.mainFrame()->title(); } - - -QUrl WebSnap::snapUrl() -{ - return m_url; -} - - -QPixmap WebSnap::previewImage() -{ - return m_image; -} -- cgit v1.2.1 From 8ef95ed5f65c07020a91b9fce306eacc0309794a Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Sat, 17 Apr 2010 18:27:40 +0200 Subject: Clean tab previews, not showing on loading removed a duplicated method and save one QPixmap in WebSnap class --- src/websnap.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'src/websnap.cpp') diff --git a/src/websnap.cpp b/src/websnap.cpp index 906bbc1e..612fdf4e 100644 --- a/src/websnap.cpp +++ b/src/websnap.cpp @@ -146,20 +146,22 @@ QString WebSnap::guessNameFromUrl(QUrl url) void WebSnap::saveResult(bool ok) { + QPixmap image = QPixmap(); + // crude error-checking if (!ok) { kDebug() << "Error loading site.."; m_snapTitle = "Error..."; - m_image = QPixmap(); + } else { - m_image = renderPreview(m_page, WIDTH, HEIGHT); + image = renderPreview(m_page, WIDTH, HEIGHT); m_snapTitle = m_page.mainFrame()->title(); } QFile::remove(fileForUrl(m_url).toLocalFile()); - m_image.save(fileForUrl(m_url).toLocalFile()); + image.save(fileForUrl(m_url).toLocalFile()); NewTabPage p( m_frame ); p.snapFinished(m_previewIndex, m_url, m_snapTitle); -- cgit v1.2.1