1 /* 2 * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies) 3 * Copyright (C) 2009 Girish Ramakrishnan <girish (at) forwardbias.in> 4 * Copyright (C) 2006 George Staikos <staikos (at) kde.org> 5 * Copyright (C) 2006 Dirk Mueller <mueller (at) kde.org> 6 * Copyright (C) 2006 Zack Rusin <zack (at) kde.org> 7 * Copyright (C) 2006 Simon Hausmann <hausmann (at) 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 slots: 98 void updateFrameRate(); 99 void animatedFlip(); 100 void animatedYFlip(); 101 void contentsSizeChanged(const QSize&); 102 void scrollRequested(int, int); 103 104 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 132