diff options
| -rw-r--r-- | src/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/previewimage.cpp | 49 | ||||
| -rw-r--r-- | src/previewimage.h | 57 | ||||
| -rw-r--r-- | src/webpluginfactory.cpp | 12 | ||||
| -rw-r--r-- | src/websnap.cpp | 94 | ||||
| -rw-r--r-- | src/websnap.h | 67 | ||||
| -rw-r--r-- | src/webview.h | 6 | 
7 files changed, 273 insertions, 13 deletions
| diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 4aa01913..c443de2e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,6 +2,7 @@  SET( rekonq_SRCS      homepage.cpp +    previewimage.cpp      websnap.cpp      networkaccessmanager.cpp      autosaver.cpp  diff --git a/src/previewimage.cpp b/src/previewimage.cpp new file mode 100644 index 00000000..300b7ee7 --- /dev/null +++ b/src/previewimage.cpp @@ -0,0 +1,49 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 by Andrea Diamantini <adjam7 at gmail dot com> +* +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License or (at your option) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy  +* defined in Section 14 of version 3 of the license. +*  +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program.  If not, see <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + +#include "previewimage.h" +#include "previewimage.moc" + +#include <KUrl> +#include <KStandardDirs> + + +PreviewImage::PreviewImage(const KUrl &url, const QString &fileName) +    : QLabel() +    , m_url(url) +    , m_fileName(fileName) +{ +    QString path = KStandardDirs::locate("appdata", "pics/loading.mng"); //QString("thumbs/") + m_fileName, true); +    setPixmap( QPixmap(path) ); +} + + +PreviewImage::~PreviewImage() +{ +} + +void PreviewImage::doItYourself() +{ +} diff --git a/src/previewimage.h b/src/previewimage.h new file mode 100644 index 00000000..e0ee3aec --- /dev/null +++ b/src/previewimage.h @@ -0,0 +1,57 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 by Andrea Diamantini <adjam7 at gmail dot com> +* +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License or (at your option) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy  +* defined in Section 14 of version 3 of the license. +*  +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program.  If not, see <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + + +#ifndef PREVIEW_IMAGE_H +#define PREVIEW_IMAGE_H + + +#include <QLabel> +#include <QImage> +#include <KUrl> + + +class PreviewImage : public QLabel +{ +    Q_OBJECT + +public: +    explicit PreviewImage(const KUrl &url, const QString &fileName); +     +    PreviewImage(const PreviewImage &);     // Q_DECLARE_METATYPE requires a copy-constructor + +    ~PreviewImage(); +     +public slots: +    void doItYourself(); +     +private: +    QPixmap m_pixmap; +    KUrl m_url; +    QString m_fileName; +}; +// Q_DECLARE_METATYPE(PreviewImage) + +#endif // PREVIEW_IMAGE_H diff --git a/src/webpluginfactory.cpp b/src/webpluginfactory.cpp index 3754c03d..9ff0011d 100644 --- a/src/webpluginfactory.cpp +++ b/src/webpluginfactory.cpp @@ -28,15 +28,11 @@  #include "webpluginfactory.h"  #include "webpluginfactory.moc" -#include "webview.h" -#include "webpage.h" - -#include "websnap.h" - -#include <QWebFrame> -  #include "application.h"  #include "mainwindow.h" +#include "previewimage.h" + +#include <KDebug>  WebPluginFactory::WebPluginFactory(QObject *parent)      : QWebPluginFactory(parent) @@ -66,7 +62,7 @@ QObject *WebPluginFactory::create(const QString &mimeType,                  url = argumentValues.at(i);                          ++i;          } -        return new WebSnap(url,fileName); +        return new PreviewImage(url,fileName);      }      kDebug() << "No plugins found for" << mimeType; diff --git a/src/websnap.cpp b/src/websnap.cpp new file mode 100644 index 00000000..4892d78f --- /dev/null +++ b/src/websnap.cpp @@ -0,0 +1,94 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 Nokia Corporation <qt-info@nokia.com> +* Copyright (C) 2009 by Andrea Diamantini <adjam7 at gmail dot com> +* +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License or (at your option) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy  +* defined in Section 14 of version 3 of the license. +*  +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program.  If not, see <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + + +#include "websnap.h" +#include "websnap.moc" + +#include <KDebug> +#include <KStandardDirs> + +#include <QSize> +#include <QWebFrame> +#include <QWebSettings> +#include <QPainter> +#include <QTimer> + + +#define WIDTH  200 +#define HEIGHT 150 + + +WebSnap::WebSnap(const KUrl &url, const QString &fileName) +    : QObject() +    , m_url(url) +    , m_image(new QImage(WIDTH, HEIGHT, QImage::Format_ARGB32_Premultiplied)) +    , m_fileName(fileName) +{ +    // this to not register websnap history +    m_page.settings()->setAttribute(QWebSettings::PrivateBrowsingEnabled, true); +     +    m_targetSize = QSize(200, 150); +    connect(&m_page, SIGNAL(loadFinished(bool)), this, SLOT(saveResult(bool))); +    QTimer::singleShot(0, this, SLOT(load())); +} + + +void WebSnap::load() +{ +    m_page.mainFrame()->load(m_url); +} + + +void WebSnap::saveResult(bool ok) +{ +    // crude error-checking +    if (!ok)  +    { +        kDebug() << "Error loading site.."; +        return; +    } + +    // find proper size, we stick to sensible aspect ratio +    QSize size = m_page.mainFrame()->contentsSize(); +    size.setHeight(size.width() * 150 / 200); +     +    // create the target surface +    m_image->fill(Qt::transparent); + +    // render and rescale +    QPainter p(m_image); +    m_page.setViewportSize(m_page.mainFrame()->contentsSize()); +    m_page.mainFrame()->render(&p); +    p.end(); +    *m_image = (*m_image).scaled(WIDTH, HEIGHT, Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation); + +    QString path = KStandardDirs::locateLocal("cache", QString("thumbs/") + m_fileName, true); +    if( m_image->save(path) ) +    { +        emit finished(); +    } +} diff --git a/src/websnap.h b/src/websnap.h new file mode 100644 index 00000000..be2ad10b --- /dev/null +++ b/src/websnap.h @@ -0,0 +1,67 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 Nokia Corporation <qt-info@nokia.com> +* Copyright (C) 2009 by Andrea Diamantini <adjam7 at gmail dot com> +* +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License or (at your option) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy  +* defined in Section 14 of version 3 of the license. +*  +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program.  If not, see <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + +#ifndef WEB_SNAP_H +#define WEB_SNAP_H + + +#include <KUrl> + +#include <QtCore/QObject> +#include <QImage> +#include <QWebPage> + + +/** + * This class renders a site producing an image based + * on that. + * Heavily based on Graphics-Dojo WebSnap example (thanks!) + */ +class WebSnap : public QObject +{ +    Q_OBJECT + +public: +    WebSnap(const KUrl &url, const QString &fileName); +     +    QImage *previewImage(); +     +signals: +    void finished(); + +private slots: +    void load(); +    void saveResult(bool ok); + +private: +    QWebPage m_page; +    KUrl m_url; +    QImage *m_image; +    QString m_fileName; +    QSize m_targetSize; +}; + +#endif // WEB_SNAP_H diff --git a/src/webview.h b/src/webview.h index 16b199ff..a132a193 100644 --- a/src/webview.h +++ b/src/webview.h @@ -45,10 +45,7 @@ class WebView : public QWebView  public:      explicit WebView(QWidget *parent = 0); -     -    // Q_DECLARE_METATYPE requires a copy-constructor -    WebView(const WebView &); - +        WebPage *page();      KUrl url() const;      QString lastStatusBarText() const; @@ -85,6 +82,5 @@ private:      int m_progress;      QString m_statusBarText;  }; -Q_DECLARE_METATYPE(WebView)  #endif | 
