diff options
author | Alexander Larsson <alexl@redhat.com> | 2014-10-09 10:18:02 +0200 |
---|---|---|
committer | Alexander Larsson <alexl@redhat.com> | 2014-10-09 10:18:02 +0200 |
commit | 946ab24cf7d46bb1acbeefdf740f704cccb672af (patch) | |
tree | 1d14983f1776153ce6b3076cec80d8b9d297caab | |
parent | 91f99ed80785517169d46a2ff9e1b0e74c2c6d35 (diff) | |
download | gtk+-946ab24cf7d46bb1acbeefdf740f704cccb672af.tar.gz |
Add gdk_window_mark_paint_from_clip and call from widget drawing
This is a new function that gets called every time we're drawing
some area in the Gtk paint machinery. It is a no-op right now, but
it will be required later to keep track of what areas which
we previously rendered with GL was overwritten with cairo contents.
-rw-r--r-- | docs/reference/gdk/gdk3-sections.txt | 1 | ||||
-rw-r--r-- | gdk/gdkwindow.c | 20 | ||||
-rw-r--r-- | gdk/gdkwindow.h | 3 | ||||
-rw-r--r-- | gtk/gtkwidget.c | 2 |
4 files changed, 26 insertions, 0 deletions
diff --git a/docs/reference/gdk/gdk3-sections.txt b/docs/reference/gdk/gdk3-sections.txt index 59d4b334ab..fd281cf020 100644 --- a/docs/reference/gdk/gdk3-sections.txt +++ b/docs/reference/gdk/gdk3-sections.txt @@ -394,6 +394,7 @@ gdk_window_constrain_size gdk_window_beep gdk_window_get_scale_factor gdk_window_set_opaque_region +gdk_window_mark_paint_from_clip <SUBSECTION> gdk_window_get_clip_region diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c index 2e349ca661..cbf2fd62d1 100644 --- a/gdk/gdkwindow.c +++ b/gdk/gdkwindow.c @@ -2814,6 +2814,26 @@ gdk_window_begin_paint_region (GdkWindow *window, } /** + * gdk_window_mark_paint_from_clip: + * @window: a #GdkWindow + * @cr: a #cairo_t + * + * If you call this during a paint (e.g. between gdk_window_begin_paint_region() + * and gdk_window_end_paint() then gdk will mark the current clip region of the + * window as being drawn. This is required when mixing GL rendering via + * gdk_cairo_draw_from_gl() and cairo rendering, as otherwise gdk has no way + * of knowing when something paints over the gl drawn regions. + * + * This is typically called automatically by Gtk and you don't need + * to care about this. + **/ +void +gdk_window_mark_paint_from_clip (GdkWindow *window, + cairo_t *cr) +{ +} + +/** * gdk_window_end_paint: * @window: a #GdkWindow * diff --git a/gdk/gdkwindow.h b/gdk/gdkwindow.h index 3617c55f3d..5f2950e921 100644 --- a/gdk/gdkwindow.h +++ b/gdk/gdkwindow.h @@ -739,6 +739,9 @@ cairo_region_t *gdk_window_get_visible_region(GdkWindow *window); GDK_AVAILABLE_IN_ALL void gdk_window_begin_paint_rect (GdkWindow *window, const GdkRectangle *rectangle); +GDK_AVAILABLE_IN_3_14 +void gdk_window_mark_paint_from_clip (GdkWindow *window, + cairo_t *cr); GDK_AVAILABLE_IN_ALL void gdk_window_begin_paint_region (GdkWindow *window, const cairo_region_t *region); diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index b2d3424910..0008519282 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -6948,6 +6948,8 @@ _gtk_widget_draw_internal (GtkWidget *widget, { gboolean result; + gdk_window_mark_paint_from_clip (window, cr); + g_signal_emit (widget, widget_signals[DRAW], 0, cr, &result); |