RESOLVED FIXED 47411
[GTK] Implement subregion rendering in WebView when using gtk3
https://bugs.webkit.org/show_bug.cgi?id=47411
Summary [GTK] Implement subregion rendering in WebView when using gtk3
Carlos Garcia Campos
Reported Friday, October 8, 2010 1:32:17 PM UTC
It was removed with the port to gtk3.
Attachments
Patch to implement subregion rendering with gtk3 (5.71 KB, patch)
2010-10-08 05:37 PDT, Carlos Garcia Campos
mrobinson: review-
Updated patch (9.60 KB, patch)
2010-10-09 09:29 PDT, Carlos Garcia Campos
no flags
New patch (9.97 KB, patch)
2010-10-09 11:02 PDT, Carlos Garcia Campos
no flags
Carlos Garcia Campos
Comment 1 Friday, October 8, 2010 1:37:00 PM UTC
Created attachment 70230 [details] Patch to implement subregion rendering with gtk3 We still can get the region in gtk3 with cairo_copy_clip_rectangle_list(). I've also moved the common code to a new method webkit_web_view_paint() used by both gtk2 and gtk3 code
Martin Robinson
Comment 2 Friday, October 8, 2010 4:53:23 PM UTC
Comment on attachment 70230 [details] Patch to implement subregion rendering with gtk3 View in context: https://bugs.webkit.org/attachment.cgi?id=70230&action=review > WebKit/gtk/webkit/webkitwebview.cpp:495 > +static bool shouldCoalesce(GdkRectangle *rect, GdkRectangle* rects, int count) Need to slide the asterisk on *rect over to GdkRectangle. > WebKit/gtk/webkit/webkitwebview.cpp:515 > +static void webkit_web_view_paint(Frame* frame, gboolean transparent, GraphicsContext *ctx, GdkRectangle* clipRect, GdkRectangle* rects, int rectCount) The method name should follow WebKit style, so camelCase. It's not a GTK+ method, so perhaps the verb should come first? paintWebView maybe. Also need to fix the asterisk on GraphicsContext *ctx. In fact, it probably makes sense to just pass a reference here. const GraphicsContext& context. We try to avoid abbreviating context in new code. > WebKit/gtk/webkit/webkitwebview.cpp:595 > + if (!rectList->status && rectList->num_rectangles > 0) { > + GOwnPtr<GdkRectangle> rects(g_new(GdkRectangle, rectList->num_rectangles)); > + for (int i = 0; i < rectList->num_rectangles; i++) { > + cairo_rectangle_t cairoRect = rectList->rectangles[i]; > + rects.get()[i].x = static_cast<int>(cairoRect.x); > + rects.get()[i].y = static_cast<int>(cairoRect.y); > + rects.get()[i].width = static_cast<int>(cairoRect.width); > + rects.get()[i].height = static_cast<int>(cairoRect.height); > + } Instead of converting to GdkRectangle and then paintWebView converting them to IntRects, why not just convert straight to IntRect and pass a Vector of them. The code would end up looking something like this: Vector<IntRect> rects; if (!rectList->status && rectList->num_rectangles > 0) { for (int = 0; i < rectList->num_rectangles; i++) rects.append(IntRect(rectList->rectangles[i])); } paintWebView(frame, priv->transparent, context, &clipRect, rects); paintWebView would, of course, take a Vector<IntRect>& rects. You would need to update shouldCoalesce as well to take an IntRect and a Vector<IntRect>&. The Windows port actually does something very similar to this in getUpdateRects in WebKit/win/WebView.cpp. Maybe check that out.
Martin Robinson
Comment 3 Friday, October 8, 2010 4:54:12 PM UTC
I should also say that I love the approach this patch takes. :)
Carlos Garcia Campos
Comment 4 Saturday, October 9, 2010 5:29:12 PM UTC
Created attachment 70352 [details] Updated patch
Carlos Garcia Campos
Comment 5 Saturday, October 9, 2010 7:02:05 PM UTC
Created attachment 70356 [details] New patch Updated patch, fixes build with gtk2.
Martin Robinson
Comment 6 Saturday, October 9, 2010 7:06:39 PM UTC
Comment on attachment 70356 [details] New patch Great. Thanks!
WebKit Review Bot
Comment 7 Saturday, October 9, 2010 7:18:55 PM UTC
WebKit Commit Bot
Comment 8 Saturday, October 9, 2010 7:36:25 PM UTC
Comment on attachment 70356 [details] New patch Clearing flags on attachment: 70356 Committed r69452: <http://trac.webkit.org/changeset/69452>
WebKit Commit Bot
Comment 9 Saturday, October 9, 2010 7:36:30 PM UTC
All reviewed patches have been landed. Closing bug.
Note You need to log in before you can comment on or make changes to this bug.