blob: 5f6c16d56c1d393ae80072e18040dac160bccfcb [file] [log] [blame]
/*
Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies)
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include "config.h"
#include "qrawwebview_p.h"
#include "Cursor.h"
#include "DrawingAreaProxyImpl.h"
#include "LayerTreeCoordinatorProxy.h"
#include "LayerTreeRenderer.h"
#include "NativeWebKeyboardEvent.h"
#include "NativeWebMouseEvent.h"
#if ENABLE(TOUCH_EVENTS)
#include "NativeWebTouchEvent.h"
#endif
#include "NativeWebWheelEvent.h"
#include "NotImplemented.h"
#include "WebContext.h"
#include "WebPageGroup.h"
#include "WebPreferences.h"
#include "qrawwebview_p_p.h"
#include <WebKit2/qrawwebview_p.h>
void QRawWebViewPrivate::didReceiveMessageFromNavigatorQtObject(const String& message)
{
notImplemented();
}
void QRawWebViewPrivate::didChangeViewportProperties(const WebCore::ViewportAttributes& attr)
{
notImplemented();
}
void QRawWebViewPrivate::handleDownloadRequest(WebKit::DownloadProxy* download)
{
notImplemented();
}
void QRawWebViewPrivate::handleAuthenticationRequiredRequest(const String& hostname, const String& realm, const String& prefilledUsername, String& username, String& password)
{
notImplemented();
}
void QRawWebViewPrivate::handleCertificateVerificationRequest(const String& hostname, bool& ignoreErrors)
{
notImplemented();
}
void QRawWebViewPrivate::handleProxyAuthenticationRequiredRequest(const String& hostname, uint16_t port, const String& prefilledUsername, String& username, String& password)
{
notImplemented();
}
void QRawWebViewPrivate::registerEditCommand(PassRefPtr<WebKit::WebEditCommandProxy>, WebKit::WebPageProxy::UndoOrRedo)
{
notImplemented();
}
bool QRawWebViewPrivate::canUndoRedo(WebKit::WebPageProxy::UndoOrRedo undoOrRedo)
{
notImplemented();
return false;
}
void QRawWebViewPrivate::executeUndoRedo(WebKit::WebPageProxy::UndoOrRedo undoOrRedo)
{
notImplemented();
}
WebCore::FloatRect QRawWebViewPrivate::convertToDeviceSpace(const WebCore::FloatRect& rect)
{
notImplemented();
return rect;
}
WebCore::FloatRect QRawWebViewPrivate::convertToUserSpace(const WebCore::FloatRect& rect)
{
notImplemented();
return rect;
}
WebCore::IntPoint QRawWebViewPrivate::screenToWindow(const WebCore::IntPoint& point)
{
notImplemented();
return point;
}
WebCore::IntRect QRawWebViewPrivate::windowToScreen(const WebCore::IntRect& rect)
{
notImplemented();
return rect;
}
#if USE(ACCELERATED_COMPOSITING)
void QRawWebViewPrivate::enterAcceleratedCompositingMode(const WebKit::LayerTreeContext&)
{
notImplemented();
}
void QRawWebViewPrivate::exitAcceleratedCompositingMode()
{
notImplemented();
}
void QRawWebViewPrivate::updateAcceleratedCompositingMode(const WebKit::LayerTreeContext&)
{
notImplemented();
}
#endif // USE(ACCELERATED_COMPOSITING)
void QRawWebViewPrivate::updateTextInputState()
{
notImplemented();
}
#if ENABLE(GESTURE_EVENTS)
void QRawWebViewPrivate::doneWithGestureEvent(const WebKit::WebGestureEvent& event, bool wasEventHandled)
{
notImplemented();
}
#endif
void QRawWebViewPrivate::displayView()
{
notImplemented();
}
void QRawWebViewPrivate::scrollView(const WebCore::IntRect& scrollRect, const WebCore::IntSize& scrollOffset)
{
notImplemented();
}
void QRawWebViewPrivate::flashBackingStoreUpdates(const Vector<WebCore::IntRect>&)
{
notImplemented();
}
void QRawWebViewPrivate::didFindZoomableArea(const WebCore::IntPoint& target, const WebCore::IntRect& area)
{
notImplemented();
}
void QRawWebViewPrivate::setCursorHiddenUntilMouseMoves(bool hiddenUntilMouseMoves)
{
notImplemented();
}
void QRawWebViewPrivate::toolTipChanged(const String&, const String& newTooltip)
{
notImplemented();
}
void QRawWebViewPrivate::pageTransitionViewportReady()
{
m_webPageProxy->commitPageTransitionViewport();
}
void QRawWebViewPrivate::startDrag(const WebCore::DragData& dragData, PassRefPtr<WebKit::ShareableBitmap> dragImage)
{
notImplemented();
}
PassRefPtr<WebKit::WebPopupMenuProxy> QRawWebViewPrivate::createPopupMenuProxy(WebKit::WebPageProxy* webPageProxy)
{
notImplemented();
return PassRefPtr<WebKit::WebPopupMenuProxy>();
}
PassRefPtr<WebKit::WebContextMenuProxy> QRawWebViewPrivate::createContextMenuProxy(WebKit::WebPageProxy* webPageProxy)
{
notImplemented();
return PassRefPtr<WebKit::WebContextMenuProxy>();
}
#if ENABLE(INPUT_TYPE_COLOR)
PassRefPtr<WebKit::WebColorChooserProxy> QRawWebViewPrivate::createColorChooserProxy(WebKit::WebPageProxy*, const WebCore::Color& intialColor, const WebCore::IntRect&)
{
notImplemented();
return PassRefPtr<WebKit::WebColorChooserProxy>();
}
#endif
void QRawWebViewPrivate::pageDidRequestScroll(const WebCore::IntPoint& pos)
{
m_client->viewRequestedScroll(pos);
}
void QRawWebViewPrivate::processDidCrash()
{
m_client->viewProcessCrashed();
}
void QRawWebViewPrivate::didRelaunchProcess()
{
m_client->viewProcessRelaunched();
}
void QRawWebViewPrivate::setViewNeedsDisplay(const WebCore::IntRect& rect)
{
m_client->viewNeedsDisplay(rect);
}
void QRawWebViewPrivate::didChangeContentsSize(const WebCore::IntSize& newSize)
{
m_client->viewContentSizeChanged(newSize);
}
void QRawWebViewPrivate::setCursor(const WebCore::Cursor& cursor)
{
m_client->viewRequestedCursorOverride(*cursor.platformCursor());
}
#if ENABLE(TOUCH_EVENTS)
void QRawWebViewPrivate::doneWithTouchEvent(const WebKit::NativeWebTouchEvent& event, bool wasEventHandled)
{
m_client->doneWithTouchEvent(event.nativeEvent(), wasEventHandled);
}
#endif
void QRawWebViewPrivate::doneWithKeyEvent(const WebKit::NativeWebKeyboardEvent& event, bool wasEventHandled)
{
m_client->doneWithKeyEvent(event.nativeEvent(), wasEventHandled);
}
PassOwnPtr<WebKit::DrawingAreaProxy> QRawWebViewPrivate::createDrawingAreaProxy()
{
return WebKit::DrawingAreaProxyImpl::create(m_webPageProxy.get());
}
QRawWebViewPrivate::QRawWebViewPrivate(WebKit::WebContext* context, WebKit::WebPageGroup* pageGroup, QRawWebViewClient* client)
: m_focused(false)
, m_visible(false)
, m_active(false)
, m_client(client)
, m_webPageProxy(context->createWebPage(this, pageGroup))
{
m_webPageProxy->pageGroup()->preferences()->setForceCompositingMode(true);
}
QRawWebViewPrivate::~QRawWebViewPrivate()
{
}
QRawWebView::QRawWebView(WKContextRef contextRef, WKPageGroupRef pageGroupRef, QRawWebViewClient* client)
: d(new QRawWebViewPrivate(WebKit::toImpl(contextRef), WebKit::toImpl(pageGroupRef), client))
{
}
QRawWebView::~QRawWebView()
{
delete d;
}
void QRawWebView::create()
{
d->m_webPageProxy->initializeWebPage();
}
void QRawWebView::setTransparentBackground(bool value)
{
d->m_webPageProxy->setDrawsTransparentBackground(value);
}
bool QRawWebView::transparentBackground() const
{
return d->m_webPageProxy->drawsTransparentBackground();
}
void QRawWebView::setDrawBackground(bool value)
{
d->m_webPageProxy->setDrawsBackground(value);
}
bool QRawWebView::drawBackground() const
{
return d->m_webPageProxy->drawsBackground();
}
bool QRawWebView::isFocused() const
{
return d->m_focused;
}
void QRawWebView::setFocused(bool focused)
{
d->m_focused = focused;
d->m_webPageProxy->viewStateDidChange(WebKit::WebPageProxy::ViewIsFocused);
}
bool QRawWebView::isVisible() const
{
return d->m_visible;
}
void QRawWebView::setVisible(bool visible)
{
d->m_visible = visible;
d->m_webPageProxy->viewStateDidChange(WebKit::WebPageProxy::ViewIsVisible);
}
bool QRawWebView::isActive() const
{
return d->m_active;
}
void QRawWebView::setActive(bool active)
{
d->m_active = active;
d->m_webPageProxy->viewStateDidChange(WebKit::WebPageProxy::ViewWindowIsActive);
layerTreeRenderer()->setActive(active);
}
QSize QRawWebView::size() const
{
return d->m_size;
}
void QRawWebView::setSize(const QSize& size)
{
WebKit::DrawingAreaProxy* drawingArea = d->m_webPageProxy->drawingArea();
if (!drawingArea)
return;
if (d->m_webPageProxy->useFixedLayout())
d->m_webPageProxy->setViewportSize(size);
else {
WebKit::LayerTreeCoordinatorProxy* coordinator = drawingArea->layerTreeCoordinatorProxy();
if (!coordinator)
return;
coordinator->setContentsSize(WebCore::FloatSize(size.width(), size.height()));
}
d->m_size = size;
drawingArea->setSize(d->m_size, WebCore::IntSize());
drawingArea->setVisibleContentsRect(WebCore::IntRect(WebCore::IntPoint(), d->m_size), 1 /*scale*/, WebCore::FloatPoint());
}
WKPageRef QRawWebView::pageRef()
{
return toAPI(d->m_webPageProxy.get());
}
WebKit::LayerTreeRenderer* QRawWebView::layerTreeRenderer() const
{
WebKit::DrawingAreaProxy* drawingArea = d->m_webPageProxy->drawingArea();
if (!drawingArea)
return 0;
WebKit::LayerTreeCoordinatorProxy* layerTreeCoordinatorProxy = drawingArea->layerTreeCoordinatorProxy();
if (!layerTreeCoordinatorProxy)
return 0;
return layerTreeCoordinatorProxy->layerTreeRenderer();
}
void QRawWebView::paint(const QMatrix4x4& transform, float opacity, unsigned paintFlags)
{
WebKit::LayerTreeRenderer* renderer = layerTreeRenderer();
if (!renderer)
return;
renderer->setActive(true);
renderer->syncRemoteContent();
WebCore::FloatRect rect(0, 0, d->m_size.width(), d->m_size.height());
renderer->paintToCurrentGLContext(transform, opacity, transform.mapRect(rect), paintFlags);
}
void QRawWebView::sendKeyEvent(QKeyEvent* event)
{
d->m_webPageProxy->handleKeyboardEvent(WebKit::NativeWebKeyboardEvent(event));
}
void QRawWebView::sendMouseEvent(QMouseEvent* event, int clickCount)
{
d->m_webPageProxy->handleMouseEvent(WebKit::NativeWebMouseEvent(event, QTransform(), clickCount));
}
void QRawWebView::sendWheelEvent(QWheelEvent* event)
{
d->m_webPageProxy->handleWheelEvent(WebKit::NativeWebWheelEvent(event, QTransform()));
}
void QRawWebView::sendTouchEvent(QTouchEvent* event)
{
#if ENABLE(TOUCH_EVENTS)
d->m_webPageProxy->handleTouchEvent(WebKit::NativeWebTouchEvent(event, QTransform()));
#endif
}