#ifndef PageClientQt_h
#define PageClientQt_h
#include "FrameView.h"
#include "GraphicsContext.h"
#include "IntRect.h"
#include "QWebPageClient.h"
#include "TextureMapperLayerClientQt.h"
#include "TiledBackingStore.h"
#include "qgraphicswebview.h"
#include "qwebframe.h"
#include "qwebframe_p.h"
#include "qwebpage.h"
#include "qwebpage_p.h"
#include <Settings.h>
#include <qgraphicsscene.h>
#include <qgraphicsview.h>
#include <qgraphicswidget.h>
#include <qmetaobject.h>
#include <qscrollbar.h>
#include <qstyleoption.h>
#include <qtimer.h>
#include <qwidget.h>
namespace WebCore {
class PageClientQWidget : public QWebPageClient {
public:
PageClientQWidget(QWidget* newView, QWebPage* newPage)
: view(newView)
, page(newPage)
{
Q_ASSERT(view);
}
virtual ~PageClientQWidget();
virtual bool isQWidgetClient() const { return true; }
virtual void scroll(int dx, int dy, const QRect&);
virtual void update(const QRect& dirtyRect);
virtual void repaintViewport();
virtual void setInputMethodEnabled(bool);
virtual bool inputMethodEnabled() const;
virtual void setInputMethodHints(Qt::InputMethodHints);
#ifndef QT_NO_CURSOR
virtual QCursor cursor() const;
virtual void updateCursor(const QCursor&);
#endif
virtual QPalette palette() const;
virtual int screenNumber() const;
virtual QObject* ownerWidget() const;
virtual QRect geometryRelativeToOwnerWidget() const;
virtual QPoint mapToOwnerWindow(const QPoint&) const;
virtual QObject* pluginParent() const;
virtual QStyle* style() const;
virtual bool viewResizesToContentsEnabled() const { return false; }
virtual QRectF windowRect() const;
virtual void setWidgetVisible(Widget*, bool visible);
QWidget* view;
QWebPage* page;
};
#if !defined(QT_NO_GRAPHICSVIEW)
class QGraphicsItemOverlay : public QGraphicsObject {
public:
QGraphicsItemOverlay(QGraphicsWidget* view, QWebPage* p)
: QGraphicsObject(view)
, q(view)
, page(p)
{
setPos(0, 0);
setFlag(QGraphicsItem::ItemUsesExtendedStyleOption, true);
setCacheMode(QGraphicsItem::DeviceCoordinateCache);
}
QRectF boundingRect() const
{
return q->boundingRect();
}
void paint(QPainter* painter, const QStyleOptionGraphicsItem* options, QWidget*)
{
page->mainFrame()->render(painter, static_cast<QWebFrame::RenderLayer>(QWebFrame::AllLayers&(~QWebFrame::ContentsLayer)), options->exposedRect.toRect());
}
void prepareGraphicsItemGeometryChange()
{
prepareGeometryChange();
}
QGraphicsWidget* q;
QWebPage* page;
};
class PageClientQGraphicsWidget : public QWebPageClient {
public:
PageClientQGraphicsWidget(QGraphicsWebView* newView, QWebPage* newPage)
: view(newView)
, page(newPage)
, viewResizesToContents(false)
, overlay(0)
{
Q_ASSERT(view);
#if USE(ACCELERATED_COMPOSITING)
view->setFlag(QGraphicsItem::ItemUsesExtendedStyleOption);
#endif
}
virtual ~PageClientQGraphicsWidget();
virtual bool isQWidgetClient() const { return false; }
virtual void scroll(int dx, int dy, const QRect&);
virtual void update(const QRect& dirtyRect);
virtual void repaintViewport();
virtual void setInputMethodEnabled(bool);
virtual bool inputMethodEnabled() const;
virtual void setInputMethodHints(Qt::InputMethodHints);
#ifndef QT_NO_CURSOR
virtual QCursor cursor() const;
virtual void updateCursor(const QCursor&);
#endif
virtual QPalette palette() const;
virtual int screenNumber() const;
virtual QObject* ownerWidget() const;
virtual QRect geometryRelativeToOwnerWidget() const;
virtual QPoint mapToOwnerWindow(const QPoint&) const;
virtual QObject* pluginParent() const;
virtual QStyle* style() const;
virtual bool viewResizesToContentsEnabled() const { return viewResizesToContents; }
virtual void setWidgetVisible(Widget*, bool);
#if USE(TILED_BACKING_STORE)
virtual QRectF graphicsItemVisibleRect() const;
#endif
virtual bool makeOpenGLContextCurrentIfAvailable();
virtual QRectF windowRect() const;
QGraphicsView* firstGraphicsView() const;
QGraphicsWebView* view;
QWebPage* page;
bool viewResizesToContents;
QGraphicsItemOverlay* overlay;
enum { RootGraphicsLayerZValue, OverlayZValue };
};
#endif // QT_NO_GRAPHICSVIEW
}
#endif // PageClientQt