Unreviewed. Add Silvia Pfeiffer to contributor list.
[WebKit-https.git] / Tools / QtTestBrowser / webview.h
1 /*
2  * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)
3  * Copyright (C) 2009 Girish Ramakrishnan <girish@forwardbias.in>
4  * Copyright (C) 2006 George Staikos <staikos@kde.org>
5  * Copyright (C) 2006 Dirk Mueller <mueller@kde.org>
6  * Copyright (C) 2006 Zack Rusin <zack@kde.org>
7  * Copyright (C) 2006 Simon Hausmann <hausmann@kde.org>
8  *
9  * All rights reserved.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  * 1. Redistributions of source code must retain the above copyright
15  *    notice, this list of conditions and the following disclaimer.
16  * 2. Redistributions in binary form must reproduce the above copyright
17  *    notice, this list of conditions and the following disclaimer in the
18  *    documentation and/or other materials provided with the distribution.
19  *
20  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
21  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
28  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32
33 #ifndef webview_h
34 #define webview_h
35
36 #include "fpstimer.h"
37 #include "webpage.h"
38 #include <qwebview.h>
39 #include <qgraphicswebview.h>
40 #include <QGraphicsView>
41 #include <QGraphicsWidget>
42 #include <QTime>
43
44 QT_BEGIN_NAMESPACE
45 class QStateMachine;
46 QT_END_NAMESPACE
47
48 class WebViewTraditional : public QWebView {
49     Q_OBJECT
50
51 public:
52     WebViewTraditional(QWidget* parent) : QWebView(parent) {}
53
54 protected:
55     virtual void contextMenuEvent(QContextMenuEvent*);
56     virtual void mousePressEvent(QMouseEvent*);
57 };
58
59
60 class GraphicsWebView : public QGraphicsWebView {
61     Q_OBJECT
62
63 public:
64     GraphicsWebView(QGraphicsItem* parent = 0) : QGraphicsWebView(parent) {};
65
66 protected:
67     virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent*);
68     virtual void mousePressEvent(QGraphicsSceneMouseEvent*);
69 };
70
71
72 class WebViewGraphicsBased : public QGraphicsView {
73     Q_OBJECT
74     Q_PROPERTY(qreal yRotation READ yRotation WRITE setYRotation)
75
76 public:
77     WebViewGraphicsBased(QWidget* parent);
78     void setPage(QWebPage* page);
79
80     void setItemCacheMode(QGraphicsItem::CacheMode mode) { graphicsWebView()->setCacheMode(mode); }
81     QGraphicsItem::CacheMode itemCacheMode() { return graphicsWebView()->cacheMode(); }
82
83     void setFrameRateMeasurementEnabled(bool enabled);
84     bool frameRateMeasurementEnabled() const { return m_measureFps; }
85
86     virtual void resizeEvent(QResizeEvent*);
87     virtual void paintEvent(QPaintEvent* event);
88
89     void setResizesToContents(bool b);
90     bool resizesToContents() const { return m_resizesToContents; }
91
92     void setYRotation(qreal angle);
93     qreal yRotation() const { return m_yRotation; }
94
95     GraphicsWebView* graphicsWebView() const { return m_item; }
96
97 public Q_SLOTS:
98     void updateFrameRate();
99     void animatedFlip();
100     void animatedYFlip();
101     void contentsSizeChanged(const QSize&);
102     void scrollRequested(int, int);
103
104 Q_SIGNALS:
105     void currentFPSUpdated(int fps);
106
107 private:
108     GraphicsWebView* m_item;
109     int m_numPaintsTotal;
110     int m_numPaintsSinceLastMeasure;
111     QTime m_startTime;
112     QTime m_lastConsultTime;
113     QTimer* m_updateTimer;
114     bool m_measureFps;
115     qreal m_yRotation;
116     bool m_resizesToContents;
117     QStateMachine* m_machine;
118     FpsTimer m_fpsTimer;
119 };
120
121 inline void WebViewGraphicsBased::setYRotation(qreal angle)
122 {
123     QRectF r = graphicsWebView()->boundingRect();
124     graphicsWebView()->setTransform(QTransform()
125         .translate(r.width() / 2, r.height() / 2)
126         .rotate(angle, Qt::YAxis)
127         .translate(-r.width() / 2, -r.height() / 2));
128     m_yRotation = angle;
129 }
130
131 #endif