source: trunk/examples/webkit/framecapture/framecapture.cpp@ 561

Last change on this file since 561 was 561, checked in by Dmitry A. Kuminov, 15 years ago

trunk: Merged in qt 4.6.1 sources.

  • Property svn:eol-style set to native
File size: 4.0 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation ([email protected])
6**
7** This file is part of the examples of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:LGPL$
10** Commercial Usage
11** Licensees holding valid Qt Commercial licenses may use this file in
12** accordance with the Qt Commercial License Agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in
14** a written agreement between you and Nokia.
15**
16** GNU Lesser General Public License Usage
17** Alternatively, this file may be used under the terms of the GNU Lesser
18** General Public License version 2.1 as published by the Free Software
19** Foundation and appearing in the file LICENSE.LGPL included in the
20** packaging of this file. Please review the following information to
21** ensure the GNU Lesser General Public License version 2.1 requirements
22** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23**
24** In addition, as a special exception, Nokia gives you certain additional
25** rights. These rights are described in the Nokia Qt LGPL Exception
26** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
27**
28** GNU General Public License Usage
29** Alternatively, this file may be used under the terms of the GNU
30** General Public License version 3.0 as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL included in the
32** packaging of this file. Please review the following information to
33** ensure the GNU General Public License version 3.0 requirements will be
34** met: http://www.gnu.org/copyleft/gpl.html.
35**
36** If you have questions regarding the use of this file, please contact
37** Nokia at [email protected].
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42#include "framecapture.h"
43
44#include <iostream>
45#include <QtWebKit>
46
47FrameCapture::FrameCapture(): QObject(), m_percent(0)
48{
49 connect(&m_page, SIGNAL(loadProgress(int)), this, SLOT(printProgress(int)));
50 connect(&m_page, SIGNAL(loadFinished(bool)), this, SLOT(saveResult(bool)));
51}
52
53void FrameCapture::load(const QUrl &url, const QString &outputFileName)
54{
55 std::cout << "Loading " << qPrintable(url.toString()) << std::endl;
56 m_percent = 0;
57 int index = outputFileName.lastIndexOf('.');
58 m_fileName = (index == -1) ? outputFileName + ".png" : outputFileName;
59 m_page.mainFrame()->load(url);
60 m_page.mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff);
61 m_page.mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff);
62 m_page.setViewportSize(QSize(1024, 768));
63}
64
65void FrameCapture::printProgress(int percent)
66{
67 if (m_percent >= percent)
68 return;
69
70 while (m_percent++ < percent)
71 std::cout << "#" << std::flush;
72}
73
74void FrameCapture::saveResult(bool ok)
75{
76 std::cout << std::endl;
77
78 // crude error-checking
79 if (!ok) {
80 std::cerr << "Failed loading " << qPrintable(m_page.mainFrame()->url().toString()) << std::endl;
81 emit finished();
82 return;
83 }
84
85 // save each frame in different image files
86 saveFrame(m_page.mainFrame());
87
88 emit finished();
89}
90
91void FrameCapture::saveFrame(QWebFrame *frame)
92{
93 static int frameCounter = 0;
94
95 QString fileName(m_fileName);
96 if (frameCounter) {
97 int index = m_fileName.lastIndexOf('.');
98 fileName = fileName.insert(index, "_frame" + QString::number(frameCounter));
99 }
100
101 QImage image(frame->contentsSize(), QImage::Format_ARGB32_Premultiplied);
102 image.fill(Qt::transparent);
103
104 QPainter painter(&image);
105 painter.setRenderHint(QPainter::Antialiasing, true);
106 painter.setRenderHint(QPainter::TextAntialiasing, true);
107 painter.setRenderHint(QPainter::SmoothPixmapTransform, true);
108 frame->documentElement().render(&painter);
109 painter.end();
110
111 image.save(fileName);
112
113 ++frameCounter;
114 foreach(QWebFrame *childFrame, frame->childFrames())
115 saveFrame(childFrame);
116}
117
Note: See TracBrowser for help on using the repository browser.