Clean up ChunkedUpdateDrawingAreaProxy
[WebKit-https.git] / WebKitTools / 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 class QStateMachine;
45
46 class WebViewTraditional : public QWebView {
47     Q_OBJECT
48
49 public:
50     WebViewTraditional(QWidget* parent) : QWebView(parent) {}
51
52 protected:
53     virtual void contextMenuEvent(QContextMenuEvent*);
54     virtual void mousePressEvent(QMouseEvent*);
55 };
56
57
58 class GraphicsWebView : public QGraphicsWebView {
59     Q_OBJECT
60
61 public:
62     GraphicsWebView(QGraphicsItem* parent = 0) : QGraphicsWebView(parent) {};
63
64 protected:
65     virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent*);
66     virtual void mousePressEvent(QGraphicsSceneMouseEvent*);
67 };
68
69
70 class WebViewGraphicsBased : public QGraphicsView {
71     Q_OBJECT
72     Q_PROPERTY(qreal yRotation READ yRotation WRITE setYRotation)
73
74 public:
75     WebViewGraphicsBased(QWidget* parent);
76     void setPage(QWebPage* page);
77
78     void setItemCacheMode(QGraphicsItem::CacheMode mode) { graphicsWebView()->setCacheMode(mode); }
79     QGraphicsItem::CacheMode itemCacheMode() { return graphicsWebView()->cacheMode(); }
80
81     void setFrameRateMeasurementEnabled(bool enabled);
82     bool frameRateMeasurementEnabled() const { return m_measureFps; }
83
84     virtual void resizeEvent(QResizeEvent*);
85     virtual void paintEvent(QPaintEvent* event);
86
87     void setResizesToContents(bool b);
88     bool resizesToContents() const { return m_resizesToContents; }
89
90     void setYRotation(qreal angle);
91     qreal yRotation() const { return m_yRotation; }
92
93     GraphicsWebView* graphicsWebView() const { return m_item; }
94
95 public slots:
96     void updateFrameRate();
97     void animatedFlip();
98     void animatedYFlip();
99     void contentsSizeChanged(const QSize&);
100     void scrollRequested(int, int);
101
102 signals:
103     void currentFPSUpdated(int fps);
104
105 private:
106     GraphicsWebView* m_item;
107     int m_numPaintsTotal;
108     int m_numPaintsSinceLastMeasure;
109     QTime m_startTime;
110     QTime m_lastConsultTime;
111     QTimer* m_updateTimer;
112     bool m_measureFps;
113     qreal m_yRotation;
114     bool m_resizesToContents;
115     QStateMachine* m_machine;
116     FpsTimer m_fpsTimer;
117 };
118
119 inline void WebViewGraphicsBased::setYRotation(qreal angle)
120 {
121     QRectF r = graphicsWebView()->boundingRect();
122     graphicsWebView()->setTransform(QTransform()
123         .translate(r.width() / 2, r.height() / 2)
124         .rotate(angle, Qt::YAxis)
125         .translate(-r.width() / 2, -r.height() / 2));
126     m_yRotation = angle;
127 }
128
129 #endif