webview.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  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. #ifndef webview_h
  33. #define webview_h
  34. #include "fpstimer.h"
  35. #include "webpage.h"
  36. #include <qwebview.h>
  37. #include <qgraphicswebview.h>
  38. #include <QGraphicsView>
  39. #include <QGraphicsWidget>
  40. #include <QTime>
  41. QT_BEGIN_NAMESPACE
  42. class QStateMachine;
  43. QT_END_NAMESPACE
  44. class WebViewTraditional : public QWebView {
  45. Q_OBJECT
  46. public:
  47. WebViewTraditional(QWidget* parent) : QWebView(parent) {}
  48. protected:
  49. virtual void contextMenuEvent(QContextMenuEvent*);
  50. virtual void mousePressEvent(QMouseEvent*);
  51. };
  52. class GraphicsWebView : public QGraphicsWebView {
  53. Q_OBJECT
  54. public:
  55. GraphicsWebView(QGraphicsItem* parent = 0) : QGraphicsWebView(parent) {};
  56. protected:
  57. virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent*);
  58. virtual void mousePressEvent(QGraphicsSceneMouseEvent*);
  59. };
  60. class WebViewGraphicsBased : public QGraphicsView {
  61. Q_OBJECT
  62. Q_PROPERTY(qreal yRotation READ yRotation WRITE setYRotation)
  63. public:
  64. WebViewGraphicsBased(QWidget* parent);
  65. void setPage(QWebPage* page);
  66. void setItemCacheMode(QGraphicsItem::CacheMode mode) { graphicsWebView()->setCacheMode(mode); }
  67. QGraphicsItem::CacheMode itemCacheMode() { return graphicsWebView()->cacheMode(); }
  68. void setFrameRateMeasurementEnabled(bool enabled);
  69. bool frameRateMeasurementEnabled() const { return m_measureFps; }
  70. virtual void resizeEvent(QResizeEvent*);
  71. virtual void paintEvent(QPaintEvent* event);
  72. void setResizesToContents(bool b);
  73. bool resizesToContents() const { return m_resizesToContents; }
  74. void setYRotation(qreal angle);
  75. qreal yRotation() const { return m_yRotation; }
  76. GraphicsWebView* graphicsWebView() const { return m_item; }
  77. public Q_SLOTS:
  78. void updateFrameRate();
  79. void animatedFlip();
  80. void animatedYFlip();
  81. void contentsSizeChanged(const QSize&);
  82. void scrollRequested(int, int);
  83. Q_SIGNALS:
  84. void currentFPSUpdated(int fps);
  85. private:
  86. GraphicsWebView* m_item;
  87. int m_numPaintsTotal;
  88. int m_numPaintsSinceLastMeasure;
  89. QTime m_startTime;
  90. QTime m_lastConsultTime;
  91. QTimer* m_updateTimer;
  92. bool m_measureFps;
  93. qreal m_yRotation;
  94. bool m_resizesToContents;
  95. QStateMachine* m_machine;
  96. FpsTimer m_fpsTimer;
  97. };
  98. inline void WebViewGraphicsBased::setYRotation(qreal angle)
  99. {
  100. QRectF r = graphicsWebView()->boundingRect();
  101. graphicsWebView()->setTransform(QTransform()
  102. .translate(r.width() / 2, r.height() / 2)
  103. .rotate(angle, Qt::YAxis)
  104. .translate(-r.width() / 2, -r.height() / 2));
  105. m_yRotation = angle;
  106. }
  107. #endif