diff options
author | Kent Hansen <khansen@trolltech.com> | 2009-08-06 12:25:10 (GMT) |
---|---|---|
committer | Kent Hansen <khansen@trolltech.com> | 2009-08-06 12:25:10 (GMT) |
commit | 9923c171853b2f8b4a3a6b096d263fa6cf461a0b (patch) | |
tree | 38ea3966fcd11725c7d3c1606be637a000c233fd /examples | |
parent | bc83b5856416e5927822ee3e758d231fc9f43c38 (diff) | |
parent | 8dbc32699dec7aa928eb9518c05437f481d11a43 (diff) | |
download | Qt-9923c171853b2f8b4a3a6b096d263fa6cf461a0b.zip Qt-9923c171853b2f8b4a3a6b096d263fa6cf461a0b.tar.gz Qt-9923c171853b2f8b4a3a6b096d263fa6cf461a0b.tar.bz2 |
merge branch 'master' of git@scm.dev.nokia.troll.no:qt/qt into qtscript-jsc-backend
Conflicts:
tests/auto/qscriptjstestsuite/tst_qscriptjstestsuite.cpp
tests/auto/qscriptv8testsuite/tst_qscriptv8testsuite.cpp
Diffstat (limited to 'examples')
-rw-r--r-- | examples/gestures/imageviewer/imagewidget.cpp | 13 | ||||
-rw-r--r-- | examples/gestures/imageviewer/tapandholdgesture.cpp | 33 | ||||
-rw-r--r-- | examples/gestures/imageviewer/tapandholdgesture.h | 1 | ||||
-rw-r--r-- | examples/webkit/framecapture/framecapture.cpp | 121 | ||||
-rw-r--r-- | examples/webkit/framecapture/framecapture.h | 70 | ||||
-rw-r--r-- | examples/webkit/framecapture/framecapture.pro | 11 | ||||
-rw-r--r-- | examples/webkit/framecapture/main.cpp | 76 |
7 files changed, 313 insertions, 12 deletions
diff --git a/examples/gestures/imageviewer/imagewidget.cpp b/examples/gestures/imageviewer/imagewidget.cpp index 99889ed..c0d1e2d 100644 --- a/examples/gestures/imageviewer/imagewidget.cpp +++ b/examples/gestures/imageviewer/imagewidget.cpp @@ -67,6 +67,7 @@ ImageWidget::ImageWidget(QWidget *parent) tapAndHoldGesture = new TapAndHoldGesture(this); connect(tapAndHoldGesture, SIGNAL(triggered()), this, SLOT(gestureTriggered())); + connect(tapAndHoldGesture, SIGNAL(finished()), this, SLOT(gestureTriggered())); } void ImageWidget::paintEvent(QPaintEvent*) @@ -112,7 +113,7 @@ void ImageWidget::paintEvent(QPaintEvent*) touchFeedback.position + QPoint(-10, 10), touchFeedback.position + QPoint(-15, 0) }; - for (int i = 0; i < (touchFeedback.tapAndHoldState-20)/10; ++i) + for (int i = 0; i < touchFeedback.tapAndHoldState/5; ++i) p.drawEllipse(pts[i], 3, 3); } } else if (touchFeedback.sliding) { @@ -156,10 +157,9 @@ void ImageWidget::mouseDoubleClickEvent(QMouseEvent *event) void ImageWidget::gestureTriggered() { - touchFeedback.tapped = false; - touchFeedback.doubleTapped = false; - if (sender() == panGesture) { + touchFeedback.tapped = false; + touchFeedback.doubleTapped = false; QPanGesture *pg = qobject_cast<QPanGesture*>(sender()); if (zoomedIn) { #ifndef QT_NO_CURSOR @@ -174,7 +174,6 @@ void ImageWidget::gestureTriggered() #endif horizontalOffset += pg->lastOffset().width(); verticalOffset += pg->lastOffset().height(); - update(); } else { // only slide gesture should be accepted if (pg->state() == Qt::GestureFinished) { @@ -187,6 +186,7 @@ void ImageWidget::gestureTriggered() updateImage(); } } + update(); feedbackFadeOutTimer.start(500, this); } else if (sender() == tapAndHoldGesture) { if (tapAndHoldGesture->state() == Qt::GestureFinished) { @@ -199,6 +199,9 @@ void ImageWidget::gestureTriggered() menu.addAction("Action 2"); menu.addAction("Action 3"); menu.exec(mapToGlobal(tapAndHoldGesture->pos())); + } else { + ++touchFeedback.tapAndHoldState; + update(); } feedbackFadeOutTimer.start(500, this); } diff --git a/examples/gestures/imageviewer/tapandholdgesture.cpp b/examples/gestures/imageviewer/tapandholdgesture.cpp index ff5284e..5fe52cc 100644 --- a/examples/gestures/imageviewer/tapandholdgesture.cpp +++ b/examples/gestures/imageviewer/tapandholdgesture.cpp @@ -43,6 +43,8 @@ #include <QtGui/qevent.h> +// #define TAPANDHOLD_USING_MOUSE + /*! \class TapAndHoldGesture \since 4.6 @@ -95,6 +97,26 @@ bool TapAndHoldGesture::filterEvent(QEvent *event) case QEvent::TouchEnd: reset(); break; +#ifdef TAPANDHOLD_USING_MOUSE + case QEvent::MouseButtonPress: { + if (timer.isActive()) + timer.stop(); + timer.start(TapAndHoldGesture::iterationTimeout, this); + const QPoint p = static_cast<QMouseEvent*>(event)->pos(); + position = startPosition = p; + break; + } + case QEvent::MouseMove: { + const QPoint startPos = startPosition; + const QPoint pos = static_cast<QMouseEvent*>(event)->pos(); + if ((startPos - pos).manhattanLength() > 15) + reset(); + break; + } + case QEvent::MouseButtonRelease: + reset(); + break; +#endif // TAPANDHOLD_USING_MOUSE default: break; } @@ -108,11 +130,9 @@ void TapAndHoldGesture::timerEvent(QTimerEvent *event) return; if (iteration == TapAndHoldGesture::iterationCount) { timer.stop(); - setState(Qt::GestureFinished); - emit triggered(); + updateState(Qt::GestureFinished); } else { - setState(Qt::GestureStarted); - emit triggered(); + updateState(Qt::GestureUpdated); } ++iteration; } @@ -120,11 +140,10 @@ void TapAndHoldGesture::timerEvent(QTimerEvent *event) /*! \internal */ void TapAndHoldGesture::reset() { - if (state() != Qt::NoGesture) - emit cancelled(); - setState(Qt::NoGesture); timer.stop(); iteration = 0; + position = startPosition = QPoint(); + updateState(Qt::NoGesture); } /*! diff --git a/examples/gestures/imageviewer/tapandholdgesture.h b/examples/gestures/imageviewer/tapandholdgesture.h index e0d50b5..61fabc2 100644 --- a/examples/gestures/imageviewer/tapandholdgesture.h +++ b/examples/gestures/imageviewer/tapandholdgesture.h @@ -66,6 +66,7 @@ private: QBasicTimer timer; int iteration; QPoint position; + QPoint startPosition; static const int iterationCount; static const int iterationTimeout; }; diff --git a/examples/webkit/framecapture/framecapture.cpp b/examples/webkit/framecapture/framecapture.cpp new file mode 100644 index 0000000..ef31f6d --- /dev/null +++ b/examples/webkit/framecapture/framecapture.cpp @@ -0,0 +1,121 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "framecapture.h" + +#include <iostream> +#include <QtWebKit> + +FrameCapture::FrameCapture(): QObject(), m_percent(0) +{ + connect(&m_page, SIGNAL(loadProgress(int)), this, SLOT(printProgress(int))); + connect(&m_page, SIGNAL(loadFinished(bool)), this, SLOT(saveResult(bool))); +} + +void FrameCapture::load(const QUrl &url, const QString &outputFileName) +{ + std::cout << "Loading " << qPrintable(url.toString()) << std::endl; + m_percent = 0; + int index = outputFileName.lastIndexOf('.'); + m_fileName = (index == -1) ? outputFileName + ".png" : outputFileName; + m_page.mainFrame()->load(url); + m_page.mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff); + m_page.mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff); +} + +void FrameCapture::printProgress(int percent) +{ + if (m_percent >= percent) + return; + + while (m_percent++ < percent) + std::cout << "#" << std::flush; +} + +void FrameCapture::saveResult(bool ok) +{ + std::cout << std::endl; + + // crude error-checking + if (!ok) { + std::cerr << "Failed loading " << qPrintable(m_page.mainFrame()->url().toString()) << std::endl; + emit finished(); + return; + } + + // save each internal frame in different image files + int frameCounter = 0; + foreach(QWebFrame *frame, m_page.mainFrame()->childFrames()) { + QString fileName(m_fileName); + int index = m_fileName.lastIndexOf('.'); + fileName = fileName.insert(index, "_frame" + QString::number(++frameCounter)); + + frame->setClipRenderToViewport(false); + + QImage image(frame->contentsSize(), QImage::Format_ARGB32_Premultiplied); + image.fill(Qt::transparent); + + saveFrame(frame, image, fileName); + } + + // save the main frame + m_page.setViewportSize(m_page.mainFrame()->contentsSize()); + QImage image(m_page.mainFrame()->contentsSize(), QImage::Format_ARGB32_Premultiplied); + image.fill(Qt::transparent); + saveFrame(m_page.mainFrame(), image, m_fileName); + + emit finished(); +} + +void FrameCapture::saveFrame(QWebFrame *frame, QImage image, QString fileName) +{ + QPainter painter(&image); + painter.setRenderHint(QPainter::Antialiasing, true); + painter.setRenderHint(QPainter::TextAntialiasing, true); + painter.setRenderHint(QPainter::SmoothPixmapTransform, true); + + frame->render(&painter); + + painter.end(); + + image.save(fileName); +} + diff --git a/examples/webkit/framecapture/framecapture.h b/examples/webkit/framecapture/framecapture.h new file mode 100644 index 0000000..ffc93ac --- /dev/null +++ b/examples/webkit/framecapture/framecapture.h @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef FRAMECAPTURE_H +#define FRAMECAPTURE_H + +#include <QtWebKit> + +class FrameCapture : public QObject +{ + Q_OBJECT + +public: + FrameCapture(); + void load(const QUrl &url, const QString &outputFileName); + +signals: + void finished(); + +private slots: + void printProgress(int percent); + void saveResult(bool ok); + +private: + QWebPage m_page; + QString m_fileName; + int m_percent; + + void saveFrame(QWebFrame *frame, QImage image, QString fileName); +}; + +#endif diff --git a/examples/webkit/framecapture/framecapture.pro b/examples/webkit/framecapture/framecapture.pro new file mode 100644 index 0000000..6f2f093 --- /dev/null +++ b/examples/webkit/framecapture/framecapture.pro @@ -0,0 +1,11 @@ +QT += webkit + +HEADERS = framecapture.h +SOURCES = main.cpp \ + framecapture.cpp + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/webkit/framecapture +sources.files = $$SOURCES $$HEADERS +sources.path = $$[QT_INSTALL_EXAMPLES]/webkit/framecapture +INSTALLS += target sources diff --git a/examples/webkit/framecapture/main.cpp b/examples/webkit/framecapture/main.cpp new file mode 100644 index 0000000..fcdb62a --- /dev/null +++ b/examples/webkit/framecapture/main.cpp @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "framecapture.h" + +#include <iostream> +#include <QtGui> + +int main(int argc, char * argv[]) +{ + if (argc != 3) { + std::cout << "Capture a web page and save its internal frames in different images" << std::endl << std::endl; + std::cout << " framecapture <url> <outputfile>" << std::endl; + std::cout << std::endl; + std::cout << "Notes:" << std::endl; + std::cout << " 'url' is the URL of the web page to be captured" << std::endl; + std::cout << " 'outputfile' is the prefix of the image files to be generated" << std::endl; + std::cout << std::endl; + std::cout << "Example: " << std::endl; + std::cout << " framecapture www.trolltech.com trolltech.png" << std::endl; + std::cout << std::endl; + std::cout << "Result:" << std::endl; + std::cout << " trolltech.png (full page)" << std::endl; + std::cout << " trolltech_frame1.png (...) trolltech_frameN.png ('N' number of internal frames)" << std::endl; + return 0; + } + + QUrl url = QWebView::guessUrlFromString(QString::fromLatin1(argv[1])); + QString fileName = QString::fromLatin1(argv[2]); + + QApplication a(argc, argv); + FrameCapture capture; + QObject::connect(&capture, SIGNAL(finished()), QApplication::instance(), SLOT(quit())); + capture.load(url, fileName); + + return a.exec(); +} + |