diff options
author | kwm <kwm@df743ca5-7f9a-e211-a948-0013205c9059> | 2010-07-13 18:51:59 +0800 |
---|---|---|
committer | kwm <kwm@df743ca5-7f9a-e211-a948-0013205c9059> | 2010-07-13 18:51:59 +0800 |
commit | 18a838367fd663b2c1a11466d4fe2386477fead1 (patch) | |
tree | 8ff66627212bdd9ef46fe541e8ffb7228d70a49a /www | |
parent | c2f1686de94735ae5584ced5d161c75c0f56855d (diff) | |
download | marcuscom-ports-18a838367fd663b2c1a11466d4fe2386477fead1.tar.gz marcuscom-ports-18a838367fd663b2c1a11466d4fe2386477fead1.tar.zst marcuscom-ports-18a838367fd663b2c1a11466d4fe2386477fead1.zip |
Fix the build with recent gtk+ 3.x. Which removed GdkRegion.
Obtained from: http://trac.webkit.org/changeset/62329
git-svn-id: svn://creme-brulee.marcuscom.com/ports/trunk@14319 df743ca5-7f9a-e211-a948-0013205c9059
Diffstat (limited to 'www')
-rw-r--r-- | www/webkit-gtk3/Makefile | 3 | ||||
-rw-r--r-- | www/webkit-gtk3/files/patch-gtkregion-removal | 308 |
2 files changed, 310 insertions, 1 deletions
diff --git a/www/webkit-gtk3/Makefile b/www/webkit-gtk3/Makefile index e15650715..c946968c6 100644 --- a/www/webkit-gtk3/Makefile +++ b/www/webkit-gtk3/Makefile @@ -3,11 +3,12 @@ # Whom: Michael Johnson <ahze@FreeBSD.org> # # $FreeBSD$ -# $MCom: ports/www/webkit-gtk3/Makefile,v 1.1 2010/07/05 11:31:46 kwm Exp $ +# $MCom: ports/www/webkit-gtk3/Makefile,v 1.2 2010/07/13 09:56:34 kwm Exp $ # PORTNAME= webkit PORTVERSION= 1.3.2 +PORTREVISION= 1 CATEGORIES= www MASTER_SITES= http://webkitgtk.org/ PKGNAMESUFFIX= -gtk3 diff --git a/www/webkit-gtk3/files/patch-gtkregion-removal b/www/webkit-gtk3/files/patch-gtkregion-removal new file mode 100644 index 000000000..ed9d94f32 --- /dev/null +++ b/www/webkit-gtk3/files/patch-gtkregion-removal @@ -0,0 +1,308 @@ +From 1deabc22a79236001955f6f6082cac2249776ac2 Mon Sep 17 00:00:00 2001 +From: Xan Lopez <xlopez@igalia.com> +Date: Thu, 1 Jul 2010 16:18:26 +0200 +Subject: [PATCH] WebCore: + +2010-07-01 Xan Lopez <xlopez@igalia.com> + + Reviewed by NOBODY (OOPS!). + + [GTK] Stop using GdkRegion in 3.x mode + https://bugs.webkit.org/show_bug.cgi?id=41463 + + Make us compile without using GdkRegion, since it's gone from GTK+ + 3.x. + + * platform/graphics/IntRect.h: + * platform/graphics/cairo/GraphicsContextCairo.cpp: + (WebCore::GraphicsContext::drawFocusRing): + * platform/graphics/gtk/FontGtk.cpp: + (WebCore::cairo_region_shrink): + (WebCore::Font::drawComplexText): + * platform/gtk/GtkPluginWidget.cpp: + (WebCore::GtkPluginWidget::paint): + * platform/gtk/RenderThemeGtk.h: + * platform/gtk/ScrollbarGtk.cpp: + (ScrollbarGtk::paint): + +WebKit/gtk: + +2010-07-01 Xan Lopez <xlopez@igalia.com> + + Reviewed by NOBODY (OOPS!). + + [GTK] Stop using GdkRegion in 3.x mode + https://bugs.webkit.org/show_bug.cgi?id=41463 + + Make us compile without using GdkRegion, since it's gone from GTK+ + 3.x. + + * WebCoreSupport/ChromeClientGtk.cpp: + (WebKit::ChromeClient::scroll): + * webkit/webkitwebview.cpp: + (webkit_web_view_expose_event): +--- + WebCore/ChangeLog | 22 ++++++++++++ + WebCore/platform/graphics/IntRect.h | 5 +++ + .../graphics/cairo/GraphicsContextCairo.cpp | 14 +++++++ + WebCore/platform/graphics/gtk/FontGtk.cpp | 37 +++++++++++++++++++- + WebCore/platform/gtk/GtkPluginWidget.cpp | 8 ++++ + WebCore/platform/gtk/RenderThemeGtk.h | 5 +++ + WebCore/platform/gtk/ScrollbarGtk.cpp | 8 ++++ + WebKit/gtk/ChangeLog | 15 ++++++++ + WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp | 16 ++++++++ + WebKit/gtk/webkit/webkitwebview.cpp | 10 ++++- + 10 files changed, 137 insertions(+), 3 deletions(-) + +diff --git a/WebCore/platform/graphics/IntRect.h b/WebCore/platform/graphics/IntRect.h +index ad90dd9..c5990ef 100644 +--- WebCore/platform/graphics/IntRect.h ++++ WebCore/platform/graphics/IntRect.h +@@ -48,7 +48,12 @@ QT_BEGIN_NAMESPACE + class QRect; + QT_END_NAMESPACE + #elif PLATFORM(GTK) ++#ifdef GTK_API_VERSION_2 + typedef struct _GdkRectangle GdkRectangle; ++#else ++typedef struct _cairo_rectangle_int cairo_rectangle_int_t; ++typedef cairo_rectangle_int_t GdkRectangle; ++#endif + #elif PLATFORM(HAIKU) + class BRect; + #endif +diff --git a/WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp b/WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp +index dc32317..5521a6f 100644 +--- WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp ++++ WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp +@@ -643,13 +643,27 @@ void GraphicsContext::drawFocusRing(const Vector<IntRect>& rects, int width, int + cairo_new_path(cr); + + #if PLATFORM(GTK) ++#ifdef GTK_API_VERSION_2 + GdkRegion* reg = gdk_region_new(); ++#else ++ cairo_region_t* reg = cairo_region_create(); ++#endif ++ + for (unsigned i = 0; i < rectCount; i++) { ++#ifdef GTK_API_VERSION_2 + GdkRectangle rect = rects[i]; + gdk_region_union_with_rect(reg, &rect); ++#else ++ cairo_rectangle_int_t rect = rects[i]; ++ cairo_region_union_rectangle(reg, &rect); ++#endif + } + gdk_cairo_region(cr, reg); ++#ifdef GTK_API_VERSION_2 + gdk_region_destroy(reg); ++#else ++ cairo_region_destroy(reg); ++#endif + + setColor(cr, color); + cairo_set_line_width(cr, 2.0f); +diff --git a/WebCore/platform/graphics/gtk/FontGtk.cpp b/WebCore/platform/graphics/gtk/FontGtk.cpp +index fae84cb..e451b76 100644 +--- WebCore/platform/graphics/gtk/FontGtk.cpp ++++ WebCore/platform/graphics/gtk/FontGtk.cpp +@@ -181,6 +181,29 @@ bool Font::canReturnFallbackFontsForComplexText() + return false; + } + ++#ifndef GTK_API_VERSION_2 ++static void cairo_region_shrink(cairo_region_t* region, int dx, int dy) ++{ ++ int nRects = cairo_region_num_rectangles(region); ++ /* clear region */ ++ cairo_region_subtract(region, region); ++ ++ for (int i = 0; i < nRects; i++) { ++ cairo_rectangle_int_t rect; ++ cairo_region_get_rectangle(region, i, &rect); ++ ++ if (rect.width <= 2 * dx || rect.height <= 2 * dy) ++ continue; ++ ++ rect.x += dx; ++ rect.y += dy; ++ rect.width -= 2 * dx; ++ rect.height -= 2 * dy; ++ cairo_region_union_rectangle(region, &rect); ++ } ++} ++#endif ++ + void Font::drawComplexText(GraphicsContext* context, const TextRun& run, const FloatPoint& point, int from, int to) const + { + cairo_t* cr = context->platformContext(); +@@ -196,14 +219,22 @@ void Font::drawComplexText(GraphicsContext* context, const TextRun& run, const F + // Our layouts are single line + PangoLayoutLine* layoutLine = pango_layout_get_line_readonly(layout, 0); + +- GdkRegion* partialRegion = NULL; ++#ifdef GTK_API_VERSION_2 ++ GdkRegion* partialRegion = 0; ++#else ++ cairo_region_t* partialRegion = 0; ++#endif + if (to - from != run.length()) { + // Clip the region of the run to be rendered + char* start = g_utf8_offset_to_pointer(utf8, from); + char* end = g_utf8_offset_to_pointer(start, to - from); + int ranges[] = {start - utf8, end - utf8}; + partialRegion = gdk_pango_layout_line_get_clip_region(layoutLine, 0, 0, ranges, 1); ++#ifdef GTK_API_VERSION_2 + gdk_region_shrink(partialRegion, 0, -pixelSize()); ++#else ++ cairo_region_shrink(partialRegion, 0, -pixelSize()); ++#endif + } + + Color fillColor = context->fillColor(); +@@ -265,7 +296,11 @@ void Font::drawComplexText(GraphicsContext* context, const TextRun& run, const F + cairo_new_path(cr); + + if (partialRegion) ++#ifdef GTK_API_VERSION_2 + gdk_region_destroy(partialRegion); ++#else ++ cairo_region_destroy(partialRegion); ++#endif + + g_free(utf8); + g_object_unref(layout); +diff --git a/WebCore/platform/gtk/GtkPluginWidget.cpp b/WebCore/platform/gtk/GtkPluginWidget.cpp +index 94382f1..331f60f 100644 +--- WebCore/platform/gtk/GtkPluginWidget.cpp ++++ WebCore/platform/gtk/GtkPluginWidget.cpp +@@ -87,7 +87,11 @@ void GtkPluginWidget::paint(GraphicsContext* context, const IntRect& rect) + event->expose.area.x = loc.x(); + event->expose.area.y = loc.y(); + ++#ifdef GTK_API_VERSION_2 + event->expose.region = gdk_region_rectangle(&event->expose.area); ++#else ++ event->expose.region = cairo_region_create_rectangle(&event->expose.area); ++#endif + + /* + * This will be unref'ed by gdk_event_free. +@@ -97,7 +101,11 @@ void GtkPluginWidget::paint(GraphicsContext* context, const IntRect& rect) + /* + * If we are going to paint do the translation and GtkAllocation manipulation. + */ ++#ifdef GTK_API_VERSION_2 + if (!gdk_region_empty(event->expose.region)) ++#else ++ if (!cairo_region_is_empty(event->expose.region)) ++#endif + gtk_widget_send_expose(widget, event); + + gdk_event_free(event); +diff --git a/WebCore/platform/gtk/RenderThemeGtk.h b/WebCore/platform/gtk/RenderThemeGtk.h +index 3f02f0e..71338d4 100644 +--- WebCore/platform/gtk/RenderThemeGtk.h ++++ WebCore/platform/gtk/RenderThemeGtk.h +@@ -34,7 +34,12 @@ + typedef struct _GtkWidget GtkWidget; + typedef struct _GtkStyle GtkStyle; + typedef struct _GtkContainer GtkContainer; ++#ifdef GTK_API_VERSION_2 + typedef struct _GdkRectangle GdkRectangle; ++#else ++typedef struct _cairo_rectangle_int cairo_rectangle_int_t; ++typedef cairo_rectangle_int_t GdkRectangle; ++#endif + typedef struct _GdkDrawable GdkDrawable; + typedef struct _GtkBorder GtkBorder; + typedef struct _GtkThemeParts GtkThemeParts; +diff --git a/WebCore/platform/gtk/ScrollbarGtk.cpp b/WebCore/platform/gtk/ScrollbarGtk.cpp +index 5dc4dd6..8081fb8 100644 +--- WebCore/platform/gtk/ScrollbarGtk.cpp ++++ WebCore/platform/gtk/ScrollbarGtk.cpp +@@ -238,7 +238,11 @@ void ScrollbarGtk::paint(GraphicsContext* context, const IntRect& rect) + event->expose.area.x = loc.x(); + event->expose.area.y = loc.y(); + ++#ifdef GTK_API_VERSION_2 + event->expose.region = gdk_region_rectangle(&event->expose.area); ++#else ++ event->expose.region = cairo_region_create_rectangle(&event->expose.area); ++#endif + + /* + * This will be unref'ed by gdk_event_free. +@@ -248,7 +252,11 @@ void ScrollbarGtk::paint(GraphicsContext* context, const IntRect& rect) + /* + * If we are going to paint do the translation and GtkAllocation manipulation. + */ ++#ifdef GTK_API_VERSION_2 + if (!gdk_region_empty(event->expose.region)) ++#else ++ if (!cairo_region_is_empty(event->expose.region)) ++#endif + gtk_widget_send_expose(widget, event); + + gdk_event_free(event); +diff --git a/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp b/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp +index fe5d9eb..bb469c5 100644 +--- WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp ++++ WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp +@@ -372,6 +372,7 @@ void ChromeClient::scroll(const IntSize& delta, const IntRect& rectToScroll, con + sourceRect.x -= delta.width(); + sourceRect.y -= delta.height(); + ++#ifdef GTK_API_VERSION_2 + GdkRegion* invalidRegion = gdk_region_rectangle(&area); + + if (gdk_rectangle_intersect(&area, &sourceRect, &moveRect)) { +@@ -384,6 +385,21 @@ void ChromeClient::scroll(const IntSize& delta, const IntRect& rectToScroll, con + + gdk_window_invalidate_region(window, invalidRegion, FALSE); + gdk_region_destroy(invalidRegion); ++#else ++ cairo_region_t* invalidRegion = cairo_region_create_rectangle(&area); ++ ++ if (gdk_rectangle_intersect(&area, &sourceRect, &moveRect)) { ++ cairo_region_t* moveRegion = cairo_region_create_rectangle(&moveRect); ++ gdk_window_move_region(window, moveRegion, delta.width(), delta.height()); ++ cairo_region_translate(moveRegion, delta.width(), delta.height()); ++ cairo_region_subtract(invalidRegion, moveRegion); ++ cairo_region_destroy(moveRegion); ++ } ++ ++ gdk_window_invalidate_region(window, invalidRegion, FALSE); ++ cairo_region_destroy(invalidRegion); ++#endif ++ + } + + // FIXME: this does not take into account the WM decorations +diff --git a/WebKit/gtk/webkit/webkitwebview.cpp b/WebKit/gtk/webkit/webkitwebview.cpp +index ff4aa8a..62997c5 100644 +--- WebKit/gtk/webkit/webkitwebview.cpp ++++ WebKit/gtk/webkit/webkitwebview.cpp +@@ -517,10 +517,16 @@ static gboolean webkit_web_view_expose_event(GtkWidget* widget, GdkEventExpose* + cairo_destroy(cr); + ctx.setGdkExposeEvent(event); + +- GOwnPtr<GdkRectangle> rects; + int rectCount; ++#ifdef GTK_API_VERSION_2 ++ GOwnPtr<GdkRectangle> rects; + gdk_region_get_rectangles(event->region, &rects.outPtr(), &rectCount); +- ++#else ++ rectCount = cairo_region_num_rectangles(event->region); ++ GOwnPtr<GdkRectangle> rects(g_new(GdkRectangle, rectCount)); ++ for (int i = 0; i < rectCount; i++) ++ cairo_region_get_rectangle(event->region, i, rects.get()+i); ++#endif + // Avoid recursing into the render tree excessively + bool coalesce = shouldCoalesce(event->area, rects.get(), rectCount); + +-- +1.6.6.1 + |