From 5466563f4b5b6b86523e3f89bb7f77e5b5270c78 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Mon, 15 Oct 2012 16:08:57 +0200 Subject: Imported WebKit commit 0dc6cd75e1d4836eaffbb520be96fac4847cc9d2 (http://svn.webkit.org/repository/webkit/trunk@131300) WebKit update which introduces the QtWebKitWidgets module that contains the WK1 widgets based API. (In fact it renames QtWebKit to QtWebKitWidgets while we're working on completing the entire split as part of https://bugs.webkit.org/show_bug.cgi?id=99314 --- .../UIProcess/API/gtk/WebKitWebViewBase.cpp | 50 ++++++---------------- 1 file changed, 13 insertions(+), 37 deletions(-) (limited to 'Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp') diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp b/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp index b42b2ee8f..e5bac671e 100644 --- a/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp +++ b/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp @@ -75,6 +75,10 @@ using namespace WebCore; typedef HashMap WebKitWebViewChildrenMap; +#if USE(TEXTURE_MAPPER_GL) +void redirectedWindowDamagedCallback(void* data); +#endif + struct _WebKitWebViewBasePrivate { WebKitWebViewChildrenMap children; OwnPtr pageClient; @@ -111,7 +115,6 @@ struct _WebKitWebViewBasePrivate { #if USE(TEXTURE_MAPPER_GL) OwnPtr redirectedWindow; - bool readyToRenderAcceleratedCompositingResults; #endif }; @@ -300,7 +303,7 @@ static void webkitWebViewBaseContainerForall(GtkContainer* container, gboolean i WebKitWebViewChildrenMap children = priv->children; WebKitWebViewChildrenMap::const_iterator end = children.end(); for (WebKitWebViewChildrenMap::const_iterator current = children.begin(); current != end; ++current) - (*callback)(current->first, callbackData); + (*callback)(current->key, callbackData); if (includeInternals && priv->inspectorView) (*callback)(priv->inspectorView, callbackData); @@ -351,7 +354,8 @@ static void webkit_web_view_base_init(WebKitWebViewBase* webkitWebViewBase) #if USE(TEXTURE_MAPPER_GL) priv->redirectedWindow = RedirectedXCompositeWindow::create(IntSize(1, 1)); - priv->readyToRenderAcceleratedCompositingResults = false; + if (priv->redirectedWindow) + priv->redirectedWindow->setDamageNotifyCallback(redirectedWindowDamagedCallback, webkitWebViewBase); #endif } @@ -364,10 +368,9 @@ static bool webkitWebViewRenderAcceleratedCompositingResults(WebKitWebViewBase* // To avoid flashes when initializing accelerated compositing for the first // time, we wait until we know there's a frame ready before rendering. WebKitWebViewBasePrivate* priv = webViewBase->priv; - if (!priv->readyToRenderAcceleratedCompositingResults) + if (!priv->redirectedWindow) return false; - ASSERT(priv->redirectedWindow); cairo_rectangle(cr, clipRect->x, clipRect->y, clipRect->width, clipRect->height); cairo_surface_t* surface = priv->redirectedWindow->cairoSurfaceForWidget(GTK_WIDGET(webViewBase)); cairo_set_source_surface(cr, surface, 0, 0); @@ -430,7 +433,7 @@ static void resizeWebKitWebViewBaseFromAllocation(WebKitWebViewBase* webViewBase } #if USE(TEXTURE_MAPPER_GL) - if (sizeChanged) + if (sizeChanged && webViewBase->priv->redirectedWindow) webViewBase->priv->redirectedWindow->resize(viewRect.size()); #endif @@ -801,7 +804,8 @@ void webkitWebViewBaseCreateWebPage(WebKitWebViewBase* webkitWebViewBase, WebCon #endif #if USE(TEXTURE_MAPPER_GL) - priv->pageProxy->setAcceleratedCompositingWindowId(priv->redirectedWindow->windowId()); + if (priv->redirectedWindow) + priv->pageProxy->setAcceleratedCompositingWindowId(priv->redirectedWindow->windowId()); #endif } @@ -928,37 +932,9 @@ GdkEvent* webkitWebViewBaseTakeContextMenuEvent(WebKitWebViewBase* webkitWebView } #if USE(TEXTURE_MAPPER_GL) -static gboolean queueAnotherDrawOfAcceleratedCompositingResults(gpointer* webViewBasePointer) +void redirectedWindowDamagedCallback(void* data) { - // The WebViewBase may have been destroyed in the time since we queued this - // draw and the time we are actually executing. - if (!*webViewBasePointer) { - fastFree(webViewBasePointer); - return FALSE; - } - - WebKitWebViewBase* webViewBase = WEBKIT_WEB_VIEW_BASE(*webViewBasePointer); - gtk_widget_queue_draw(GTK_WIDGET(webViewBase)); - webViewBase->priv->readyToRenderAcceleratedCompositingResults = true; - - g_object_remove_weak_pointer(G_OBJECT(webViewBase), webViewBasePointer); - fastFree(webViewBasePointer); - - return FALSE; -} - -void webkitWebViewBaseQueueDrawOfAcceleratedCompositingResults(WebKitWebViewBase* webViewBase) -{ - gtk_widget_queue_draw(GTK_WIDGET(webViewBase)); - - // Redraw again, one frame later, as it might take some time for the new GL frame to be available. - // This prevents the display from always being one frame behind in the case GL hasn't yet finished - // rendering to the window. - // TODO: Add XDamage support to RedirectedXCompositeWindow to accomplish this. - gpointer* webViewBasePointer = static_cast(fastMalloc(sizeof(gpointer))); - g_object_add_weak_pointer(G_OBJECT(webViewBase), webViewBasePointer); - *webViewBasePointer = webViewBase; - g_timeout_add(1000 / 60, reinterpret_cast(queueAnotherDrawOfAcceleratedCompositingResults), webViewBasePointer); + gtk_widget_queue_draw(GTK_WIDGET(data)); } #endif -- cgit v1.2.1