summaryrefslogtreecommitdiffstats
path: root/kioslave/thumbnail/htmlcreator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kioslave/thumbnail/htmlcreator.cpp')
-rw-r--r--kioslave/thumbnail/htmlcreator.cpp118
1 files changed, 118 insertions, 0 deletions
diff --git a/kioslave/thumbnail/htmlcreator.cpp b/kioslave/thumbnail/htmlcreator.cpp
new file mode 100644
index 000000000..0431bcf6e
--- /dev/null
+++ b/kioslave/thumbnail/htmlcreator.cpp
@@ -0,0 +1,118 @@
+/* This file is part of the KDE libraries
+ Copyright (C) 2000 Malte Starostik <malte@kde.org>
+ Copyright (C) 2006 Roberto Cappuccio <roberto.cappuccio@gmail.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <time.h>
+#include <qpixmap.h>
+#include <qimage.h>
+#include <qpainter.h>
+#include <kapplication.h>
+#include <khtml_part.h>
+
+#include "htmlcreator.h"
+
+extern "C"
+{
+ KDE_EXPORT ThumbCreator *new_creator()
+ {
+ return new HTMLCreator;
+ }
+}
+
+HTMLCreator::HTMLCreator()
+ : m_html(0)
+{
+}
+
+HTMLCreator::~HTMLCreator()
+{
+ delete m_html;
+}
+
+bool HTMLCreator::create(const QString &path, int width, int height, QImage &img)
+{
+ if (!m_html)
+ {
+ m_html = new KHTMLPart;
+ connect(m_html, SIGNAL(completed()), SLOT(slotCompleted()));
+ m_html->setJScriptEnabled(false);
+ m_html->setJavaEnabled(false);
+ m_html->setPluginsEnabled(false);
+ m_html->setMetaRefreshEnabled(false);
+ m_html->setOnlyLocalReferences(true);
+ }
+ KURL url;
+ url.setPath(path);
+ m_html->openURL(url);
+
+ int t = startTimer(5000);
+
+ qApp->enter_loop();
+
+ killTimer(t);
+
+ // render the HTML page on a bigger pixmap and use smoothScale,
+ // looks better than directly scaling with the QPainter (malte)
+ QPixmap pix;
+ if (width > 400 || height > 600)
+ {
+ if (height * 3 > width * 4)
+ pix.resize(width, width * 4 / 3);
+ else
+ pix.resize(height * 3 / 4, height);
+ }
+ else
+ pix.resize(400, 600);
+
+ // light-grey background, in case loadind the page failed
+ pix.fill( QColor( 245, 245, 245 ) );
+
+ int borderX = pix.width() / width, borderY = pix.height() / height;
+ QRect rc(borderX, borderY, pix.width() - borderX * 2,
+ pix.height() - borderY * 2);
+
+ QPainter p;
+ p.begin(&pix);
+ m_html->paint(&p, rc);
+ p.end();
+
+ img = pix.convertToImage();
+
+ m_html->closeURL();
+
+ return true;
+}
+
+void HTMLCreator::timerEvent(QTimerEvent *)
+{
+ qApp->exit_loop();
+}
+
+void HTMLCreator::slotCompleted()
+{
+ qApp->exit_loop();
+}
+
+ThumbCreator::Flags HTMLCreator::flags() const
+{
+ return DrawFrame;
+}
+
+#include "htmlcreator.moc"
+