diff -r 000000000000 -r 4f2f89ce4247 WebKitTools/QtTestBrowser/webview.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WebKitTools/QtTestBrowser/webview.h Fri Sep 17 09:02:29 2010 +0300 @@ -0,0 +1,129 @@ +/* + * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies) + * Copyright (C) 2009 Girish Ramakrishnan + * Copyright (C) 2006 George Staikos + * Copyright (C) 2006 Dirk Mueller + * Copyright (C) 2006 Zack Rusin + * Copyright (C) 2006 Simon Hausmann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef webview_h +#define webview_h + +#include "fpstimer.h" +#include "webpage.h" +#include +#include +#include +#include +#include + +class WebViewTraditional : public QWebView { + Q_OBJECT + +public: + WebViewTraditional(QWidget* parent) : QWebView(parent) {} + +protected: + virtual void contextMenuEvent(QContextMenuEvent*); + virtual void mousePressEvent(QMouseEvent*); +}; + + +class GraphicsWebView : public QGraphicsWebView { + Q_OBJECT + +public: + GraphicsWebView(QGraphicsItem* parent = 0) : QGraphicsWebView(parent) {}; + +protected: + virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent*); + virtual void mousePressEvent(QGraphicsSceneMouseEvent*); +}; + + +class WebViewGraphicsBased : public QGraphicsView { + Q_OBJECT + Q_PROPERTY(qreal yRotation READ yRotation WRITE setYRotation) + +public: + WebViewGraphicsBased(QWidget* parent); + void setPage(QWebPage* page); + + void setItemCacheMode(QGraphicsItem::CacheMode mode) { m_item->setCacheMode(mode); } + QGraphicsItem::CacheMode itemCacheMode() { return m_item->cacheMode(); } + + void setFrameRateMeasurementEnabled(bool enabled); + bool frameRateMeasurementEnabled() const { return m_measureFps; } + + virtual void resizeEvent(QResizeEvent*); + virtual void paintEvent(QPaintEvent* event); + + void setResizesToContents(bool b); + bool resizesToContents() const { return m_resizesToContents; } + + void setYRotation(qreal angle) + { +#if QT_VERSION >= QT_VERSION_CHECK(4, 6, 0) + QRectF r = m_item->boundingRect(); + m_item->setTransform(QTransform() + .translate(r.width() / 2, r.height() / 2) + .rotate(angle, Qt::YAxis) + .translate(-r.width() / 2, -r.height() / 2)); +#endif + m_yRotation = angle; + } + qreal yRotation() const + { + return m_yRotation; + } + + GraphicsWebView* graphicsWebView() const { return m_item; } + +public slots: + void updateFrameRate(); + void animatedFlip(); + void animatedYFlip(); + void contentsSizeChanged(const QSize&); + +signals: + void yFlipRequest(); + void currentFPSUpdated(int fps); + +private: + GraphicsWebView* m_item; + int m_numPaintsTotal; + int m_numPaintsSinceLastMeasure; + QTime m_startTime; + QTime m_lastConsultTime; + QTimer* m_updateTimer; + bool m_measureFps; + qreal m_yRotation; + bool m_resizesToContents; + FpsTimer m_fpsTimer; +}; + +#endif