diff options
| author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-02-09 14:16:12 +0100 |
|---|---|---|
| committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-02-09 14:16:12 +0100 |
| commit | 03e12282df9aa1e1fb05a8b90f1cfc2e08764cec (patch) | |
| tree | 52599cd0ab782b1768e23ad176f7618f98333cb6 /Source/WebKit/gtk/webkit | |
| parent | cd44dc59cdfc39534aef4d417e9f3c412e3be139 (diff) | |
| download | qtwebkit-03e12282df9aa1e1fb05a8b90f1cfc2e08764cec.tar.gz | |
Imported WebKit commit e09a82039aa4273ab318b71122e92d8e5f233525 (http://svn.webkit.org/repository/webkit/trunk@107223)
Diffstat (limited to 'Source/WebKit/gtk/webkit')
| -rw-r--r-- | Source/WebKit/gtk/webkit/webkitwebnavigationaction.h | 13 | ||||
| -rw-r--r-- | Source/WebKit/gtk/webkit/webkitwebsettings.cpp | 26 | ||||
| -rw-r--r-- | Source/WebKit/gtk/webkit/webkitwebsettingsprivate.h | 1 | ||||
| -rw-r--r-- | Source/WebKit/gtk/webkit/webkitwebview.cpp | 64 | ||||
| -rw-r--r-- | Source/WebKit/gtk/webkit/webkitwebviewprivate.h | 2 |
5 files changed, 92 insertions, 14 deletions
diff --git a/Source/WebKit/gtk/webkit/webkitwebnavigationaction.h b/Source/WebKit/gtk/webkit/webkitwebnavigationaction.h index 4d8582e38..b317749f2 100644 --- a/Source/WebKit/gtk/webkit/webkitwebnavigationaction.h +++ b/Source/WebKit/gtk/webkit/webkitwebnavigationaction.h @@ -26,9 +26,16 @@ G_BEGIN_DECLS -/* - * The order of this enum must be the same as NavigationType in - * FrameLoaderTypes.h +/** + * WebKitWebNavigationReason: + * @WEBKIT_WEB_NAVIGATION_REASON_LINK_CLICKED: The navigation was triggered by clicking a link. + * @WEBKIT_WEB_NAVIGATION_REASON_FORM_SUBMITTED: The navigation was triggered by submitting a form. + * @WEBKIT_WEB_NAVIGATION_REASON_BACK_FORWARD: The navigation was triggered by navigating forward or backward. + * @WEBKIT_WEB_NAVIGATION_REASON_RELOAD: The navigation was triggered by reloading. + * @WEBKIT_WEB_NAVIGATION_REASON_FORM_RESUBMITTED: The navigation was triggered by resubmitting a form. + * @WEBKIT_WEB_NAVIGATION_REASON_OTHER: The navigation was triggered by some other action. + * + * Enum values used to denote the various navigation reasons. */ typedef enum { WEBKIT_WEB_NAVIGATION_REASON_LINK_CLICKED, diff --git a/Source/WebKit/gtk/webkit/webkitwebsettings.cpp b/Source/WebKit/gtk/webkit/webkitwebsettings.cpp index 6b260c29a..d91c3bbf3 100644 --- a/Source/WebKit/gtk/webkit/webkitwebsettings.cpp +++ b/Source/WebKit/gtk/webkit/webkitwebsettings.cpp @@ -119,7 +119,8 @@ enum { PROP_ENABLE_FULLSCREEN, PROP_ENABLE_DNS_PREFETCHING, PROP_ENABLE_WEBGL, - PROP_ENABLE_WEB_AUDIO + PROP_ENABLE_WEB_AUDIO, + PROP_ENABLE_ACCELERATED_COMPOSITING }; // Create a default user agent string @@ -899,6 +900,23 @@ static void webkit_web_settings_class_init(WebKitWebSettingsClass* klass) _("Whether WebGL content should be rendered"), FALSE, flags)); + + /** + * WebKitWebSettings:enable-accelerated-compositing: + * + * Enable or disable support for accelerated compositing on pages. Accelerated + * compositing uses the GPU to render animations on pages smoothly and also allows + * proper rendering of 3D CSS transforms. + * + * Since: 1.7.5 + */ + g_object_class_install_property(gobject_class, + PROP_ENABLE_ACCELERATED_COMPOSITING, + g_param_spec_boolean("enable-accelerated-compositing", + _("Enable accelerated compositing"), + _("Whether accelerated compositing should be enabled"), + FALSE, + flags)); /** * WebKitWebSettings:enable-webaudio: * @@ -1107,6 +1125,9 @@ static void webkit_web_settings_set_property(GObject* object, guint prop_id, con case PROP_ENABLE_WEB_AUDIO: priv->enableWebAudio = g_value_get_boolean(value); break; + case PROP_ENABLE_ACCELERATED_COMPOSITING: + priv->enableAcceleratedCompositing = g_value_get_boolean(value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; @@ -1269,6 +1290,9 @@ static void webkit_web_settings_get_property(GObject* object, guint prop_id, GVa case PROP_ENABLE_WEB_AUDIO: g_value_set_boolean(value, priv->enableWebAudio); break; + case PROP_ENABLE_ACCELERATED_COMPOSITING: + g_value_set_boolean(value, priv->enableAcceleratedCompositing); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; diff --git a/Source/WebKit/gtk/webkit/webkitwebsettingsprivate.h b/Source/WebKit/gtk/webkit/webkitwebsettingsprivate.h index 823c36ec9..d7d082e5b 100644 --- a/Source/WebKit/gtk/webkit/webkitwebsettingsprivate.h +++ b/Source/WebKit/gtk/webkit/webkitwebsettingsprivate.h @@ -79,6 +79,7 @@ struct _WebKitWebSettingsPrivate { gboolean enableDNSPrefetching; gboolean enableWebgl; gboolean enableWebAudio; + gboolean enableAcceleratedCompositing; }; WEBKIT_API void webkit_web_settings_add_extra_plugin_directory(WebKitWebView*, const gchar* directory); diff --git a/Source/WebKit/gtk/webkit/webkitwebview.cpp b/Source/WebKit/gtk/webkit/webkitwebview.cpp index ac6158b44..c22461c74 100644 --- a/Source/WebKit/gtk/webkit/webkitwebview.cpp +++ b/Source/WebKit/gtk/webkit/webkitwebview.cpp @@ -648,6 +648,12 @@ static gboolean webkit_web_view_draw(GtkWidget* widget, cairo_t* cr) if (!gdk_cairo_get_clip_rectangle(cr, &clipRect)) return FALSE; + WebKitWebViewPrivate* priv = WEBKIT_WEB_VIEW(widget)->priv; +#if USE(TEXTURE_MAPPER_GL) + if (priv->acceleratedCompositingContext->renderLayersToWindow(clipRect)) + return FALSE; +#endif + cairo_rectangle_list_t* rectList = cairo_copy_clip_rectangle_list(cr); if (rectList->status || !rectList->num_rectangles) { cairo_rectangle_list_destroy(rectList); @@ -656,8 +662,8 @@ static gboolean webkit_web_view_draw(GtkWidget* widget, cairo_t* cr) Vector<IntRect> rects; for (int i = 0; i < rectList->num_rectangles; i++) { - copyRectFromCairoSurfaceToContext(WEBKIT_WEB_VIEW(widget)->priv->backingStore->cairoSurface(), - cr, IntSize(), enclosingIntRect(FloatRect(rectList->rectangles[i]))); + copyRectFromCairoSurfaceToContext(priv->backingStore->cairoSurface(), cr, IntSize(), + enclosingIntRect(FloatRect(rectList->rectangles[i]))); } cairo_rectangle_list_destroy(rectList); @@ -859,28 +865,52 @@ static void updateChildAllocationFromPendingAllocation(GtkWidget* child, void*) *allocation = IntRect(); } -static void webkit_web_view_size_allocate(GtkWidget* widget, GtkAllocation* allocation) +static void resizeWebViewFromAllocation(WebKitWebView* webView, GtkAllocation* allocation) { - GTK_WIDGET_CLASS(webkit_web_view_parent_class)->size_allocate(widget, allocation); - - Page* page = core(WEBKIT_WEB_VIEW(widget)); + Page* page = core(webView); IntSize oldSize; if (FrameView* frameView = page->mainFrame()->view()) { oldSize = frameView->size(); frameView->resize(allocation->width, allocation->height); } - gtk_container_forall(GTK_CONTAINER(widget), updateChildAllocationFromPendingAllocation, 0); + gtk_container_forall(GTK_CONTAINER(webView), updateChildAllocationFromPendingAllocation, 0); WebKit::ChromeClient* chromeClient = static_cast<WebKit::ChromeClient*>(page->chrome()->client()); chromeClient->widgetSizeChanged(oldSize, IntSize(allocation->width, allocation->height)); chromeClient->adjustmentWatcher()->updateAdjustmentsFromScrollbars(); #if USE(ACCELERATED_COMPOSITING) - WEBKIT_WEB_VIEW(widget)->priv->acceleratedCompositingContext->resizeRootLayer(IntSize(allocation->width, allocation->height)); + webView->priv->acceleratedCompositingContext->resizeRootLayer(IntSize(allocation->width, allocation->height)); #endif } +static void webkit_web_view_size_allocate(GtkWidget* widget, GtkAllocation* allocation) +{ + GTK_WIDGET_CLASS(webkit_web_view_parent_class)->size_allocate(widget, allocation); + + WebKitWebView* webView = WEBKIT_WEB_VIEW(widget); + if (!gtk_widget_get_mapped(widget)) { + webView->priv->needsResizeOnMap = true; + return; + } + resizeWebViewFromAllocation(webView, allocation); +} + +static void webkitWebViewMap(GtkWidget* widget) +{ + GTK_WIDGET_CLASS(webkit_web_view_parent_class)->map(widget); + + WebKitWebView* webView = WEBKIT_WEB_VIEW(widget); + if (!webView->priv->needsResizeOnMap) + return; + + GtkAllocation allocation; + gtk_widget_get_allocation(widget, &allocation); + resizeWebViewFromAllocation(webView, &allocation); + webView->priv->needsResizeOnMap = false; +} + static void webkit_web_view_grab_focus(GtkWidget* widget) { @@ -941,6 +971,8 @@ static gboolean webkit_web_view_focus_out_event(GtkWidget* widget, GdkEventFocus static void webkit_web_view_realize(GtkWidget* widget) { + WebKitWebViewPrivate* priv = WEBKIT_WEB_VIEW(widget)->priv; + gtk_widget_set_realized(widget, TRUE); GtkAllocation allocation; @@ -979,6 +1011,10 @@ static void webkit_web_view_realize(GtkWidget* widget) attributes_mask |= GDK_WA_COLORMAP; #endif GdkWindow* window = gdk_window_new(gtk_widget_get_parent_window(widget), &attributes, attributes_mask); + +#if USE(ACCELERATED_COMPOSITING) && USE(TEXTURE_MAPPER_GL) + priv->hasNativeWindow = gdk_window_ensure_native(window); +#endif gtk_widget_set_window(widget, window); gdk_window_set_user_data(window, widget); @@ -993,8 +1029,6 @@ static void webkit_web_view_realize(GtkWidget* widget) gtk_style_context_set_background(gtk_widget_get_style_context(widget), window); #endif - WebKitWebView* webView = WEBKIT_WEB_VIEW(widget); - WebKitWebViewPrivate* priv = webView->priv; gtk_im_context_set_client_window(priv->imContext.get(), window); } @@ -2767,6 +2801,7 @@ static void webkit_web_view_class_init(WebKitWebViewClass* webViewClass) widgetClass->query_tooltip = webkit_web_view_query_tooltip; widgetClass->show_help = webkit_web_view_show_help; #endif + widgetClass->map = webkitWebViewMap; GtkContainerClass* containerClass = GTK_CONTAINER_CLASS(webViewClass); containerClass->add = webkit_web_view_container_add; @@ -3211,6 +3246,10 @@ static void webkit_web_view_update_settings(WebKitWebView* webView) coreSettings->setWebGLEnabled(settingsPrivate->enableWebgl); #endif +#if USE(ACCELERATED_COMPOSITING) + coreSettings->setAcceleratedCompositingEnabled(settingsPrivate->enableAcceleratedCompositing); +#endif + #if ENABLE(WEB_AUDIO) coreSettings->setWebAudioEnabled(settingsPrivate->enableWebAudio); #endif @@ -3343,6 +3382,11 @@ static void webkit_web_view_settings_notify(WebKitWebSettings* webSettings, GPar settings->setWebGLEnabled(g_value_get_boolean(&value)); #endif +#if USE(ACCELERATED_COMPOSITING) + else if (name == g_intern_string("enable-accelerated-compositing")) + settings->setAcceleratedCompositingEnabled(g_value_get_boolean(&value)); +#endif + #if ENABLE(WEB_AUDIO) else if (name == g_intern_string("enable-webaudio")) settings->setWebAudioEnabled(g_value_get_boolean(&value)); diff --git a/Source/WebKit/gtk/webkit/webkitwebviewprivate.h b/Source/WebKit/gtk/webkit/webkitwebviewprivate.h index 8d2b7b04b..75ba14cbe 100644 --- a/Source/WebKit/gtk/webkit/webkitwebviewprivate.h +++ b/Source/WebKit/gtk/webkit/webkitwebviewprivate.h @@ -44,6 +44,7 @@ extern "C" { typedef struct _WebKitWebViewPrivate WebKitWebViewPrivate; struct _WebKitWebViewPrivate { WebCore::Page* corePage; + bool hasNativeWindow; OwnPtr<WebCore::WidgetBackingStore> backingStore; GRefPtr<WebKitWebSettings> webSettings; GRefPtr<WebKitWebInspector> webInspector; @@ -61,6 +62,7 @@ struct _WebKitWebViewPrivate { GRefPtr<GtkIMContext> imContext; gboolean transparent; + bool needsResizeOnMap; #ifndef GTK_API_VERSION_2 // GtkScrollablePolicy needs to be checked when |
