[gtk/deprecate-render: 12/36] Deprecate gtk_snapshot_render apis




commit 149c32e2a1736ae66b20b04d8d08b78244ce6ddd
Author: Matthias Clasen <mclasen redhat com>
Date:   Sat Oct 8 09:22:26 2022 -0400

    Deprecate gtk_snapshot_render apis
    
    Move the implementations from gtksnapshot.c to
    gtk/deprecated/gtkrender.c and deprecated these
    functions. We want to get rid of them.
    
    These functions are still used in some of our widgetry,
    so use G_GNUC_BEGIN/END_IGNORE_DEPRECATIONS around
    them.

 gtk/deprecated/gtkcellarea.c             |   2 +-
 gtk/deprecated/gtkcellrendererprogress.c |   2 +-
 gtk/deprecated/gtkcellrenderertext.c     |   2 +-
 gtk/deprecated/gtkcellrenderertoggle.c   |   2 +-
 gtk/deprecated/gtkiconview.c             |   8 +-
 gtk/deprecated/gtkrender.c               | 425 +++++++++++++++++++++++++++++++
 gtk/deprecated/gtkrender.h               |  38 +++
 gtk/deprecated/gtktreeview.c             |   2 +-
 gtk/gtkflowbox.c                         |   4 +-
 gtk/gtkglarea.c                          |   3 +
 gtk/gtkinscription.c                     |   4 +-
 gtk/gtklabel.c                           |   4 +-
 gtk/gtkpopover.c                         |   4 +-
 gtk/gtkprintunixdialog.c                 |   5 +
 gtk/gtkscrolledwindow.c                  |   8 +-
 gtk/gtksnapshot.c                        | 147 -----------
 gtk/gtksnapshot.h                        |  37 ---
 gtk/gtkstylecontext.c                    | 267 +------------------
 gtk/gtktext.c                            |   9 +-
 gtk/gtktextlayout.c                      |   2 +
 gtk/gtktextutil.c                        |   5 +
 gtk/gtktextview.c                        |   3 +
 22 files changed, 521 insertions(+), 462 deletions(-)
---
diff --git a/gtk/deprecated/gtkcellarea.c b/gtk/deprecated/gtkcellarea.c
index 7f8d9c88b4..992172ef80 100644
--- a/gtk/deprecated/gtkcellarea.c
+++ b/gtk/deprecated/gtkcellarea.c
@@ -348,7 +348,7 @@
 #include "deprecated/gtkcellareacontext.h"
 #include "gtkmarshalers.h"
 #include "gtkprivate.h"
-#include "gtksnapshot.h"
+#include "deprecated/gtkrender.h"
 #include "gtkstylecontext.h"
 #include "gtknative.h"
 
diff --git a/gtk/deprecated/gtkcellrendererprogress.c b/gtk/deprecated/gtkcellrendererprogress.c
index be8c6edaad..9ecb3c792b 100644
--- a/gtk/deprecated/gtkcellrendererprogress.c
+++ b/gtk/deprecated/gtkcellrendererprogress.c
@@ -30,7 +30,7 @@
 #include <glib/gi18n-lib.h>
 #include "gtkorientable.h"
 #include "gtkprivate.h"
-#include "gtksnapshot.h"
+#include "deprecated/gtkrender.h"
 #include "gtkstylecontext.h"
 
 G_GNUC_BEGIN_IGNORE_DEPRECATIONS
diff --git a/gtk/deprecated/gtkcellrenderertext.c b/gtk/deprecated/gtkcellrenderertext.c
index 579c450c1d..6de4ac1e21 100644
--- a/gtk/deprecated/gtkcellrenderertext.c
+++ b/gtk/deprecated/gtkcellrenderertext.c
@@ -26,7 +26,7 @@
 #include "gtkmarshalers.h"
 #include "gtkprivate.h"
 #include "gtksizerequest.h"
-#include "gtksnapshot.h"
+#include "deprecated/gtkrender.h"
 #include "gtkstylecontextprivate.h"
 #include "deprecated/gtktreeprivate.h"
 
diff --git a/gtk/deprecated/gtkcellrenderertoggle.c b/gtk/deprecated/gtkcellrenderertoggle.c
index 2dd6cd0d03..4586c1646f 100644
--- a/gtk/deprecated/gtkcellrenderertoggle.c
+++ b/gtk/deprecated/gtkcellrenderertoggle.c
@@ -24,7 +24,7 @@
 #include "gtkmarshalers.h"
 #include "gtkprivate.h"
 #include "gtkrendericonprivate.h"
-#include "gtksnapshot.h"
+#include "deprecated/gtkrender.h"
 #include "gtkstylecontextprivate.h"
 #include "gtkwidgetprivate.h"
 #include "deprecated/gtktreeprivate.h"
diff --git a/gtk/deprecated/gtkiconview.c b/gtk/deprecated/gtkiconview.c
index 0e4e31933c..6fc5ff41f5 100644
--- a/gtk/deprecated/gtkiconview.c
+++ b/gtk/deprecated/gtkiconview.c
@@ -34,7 +34,7 @@
 #include "gtkprivate.h"
 #include "gtkscrollable.h"
 #include "gtksizerequest.h"
-#include "gtksnapshot.h"
+#include "deprecated/gtkrender.h"
 #include "gtkstylecontextprivate.h"
 #include "gtktreednd.h"
 #include "gtktypebuiltins.h"
@@ -1712,9 +1712,11 @@ gtk_icon_view_snapshot (GtkWidget   *widget,
       gtk_style_context_save_to_node (context, icon_view->priv->dndnode);
       gtk_style_context_set_state (context, gtk_style_context_get_state (context) | 
GTK_STATE_FLAG_DROP_ACTIVE);
 
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
       gtk_snapshot_render_frame (snapshot, context,
                                  rect.x, rect.y,
                                  rect.width, rect.height);
+G_GNUC_END_IGNORE_DEPRECATIONS
 
       gtk_style_context_restore (context);
     }
@@ -2834,6 +2836,7 @@ gtk_icon_view_snapshot_item (GtkIconView     *icon_view,
 
   gtk_style_context_set_state (style_context, state);
 
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
   gtk_snapshot_render_background (snapshot, style_context,
                                   x - priv->item_padding,
                                   y - priv->item_padding,
@@ -2844,6 +2847,7 @@ gtk_icon_view_snapshot_item (GtkIconView     *icon_view,
                              y - priv->item_padding,
                              item->cell_area.width  + priv->item_padding * 2,
                              item->cell_area.height + priv->item_padding * 2);
+G_GNUC_END_IGNORE_DEPRECATIONS
 
   cell_area.x      = x;
   cell_area.y      = y;
@@ -2875,12 +2879,14 @@ gtk_icon_view_snapshot_rubberband (GtkIconView *icon_view,
 
   gtk_style_context_save_to_node (context, priv->rubberband_node);
 
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
   gtk_snapshot_render_background (snapshot, context,
                                   rect.x, rect.y,
                                   rect.width, rect.height);
   gtk_snapshot_render_frame (snapshot, context,
                              rect.x, rect.y,
                              rect.width, rect.height);
+G_GNUC_END_IGNORE_DEPRECATIONS
 
   gtk_style_context_restore (context);
 }
diff --git a/gtk/deprecated/gtkrender.c b/gtk/deprecated/gtkrender.c
index 0afc1df189..3256c03908 100644
--- a/gtk/deprecated/gtkrender.c
+++ b/gtk/deprecated/gtkrender.c
@@ -28,7 +28,10 @@
 #include "gtkcssshadowvalueprivate.h"
 #include "gtkcsstransformvalueprivate.h"
 #include "gtkrendericonprivate.h"
+#include "gtkrenderborderprivate.h"
+#include "gtkrenderbackgroundprivate.h"
 #include "gtkstylecontextprivate.h"
+#include "gtksettings.h"
 
 #include "gsk/gskroundedrectprivate.h"
 #include <gdk/gdktextureprivate.h>
@@ -539,3 +542,425 @@ gtk_render_icon (GtkStyleContext *context,
   gsk_render_node_draw (node, cr);
   cairo_restore (cr);
 }
+
+
+/**
+ * gtk_snapshot_render_background:
+ * @snapshot: a `GtkSnapshot`
+ * @context: the style context that defines the background
+ * @x: X origin of the rectangle
+ * @y: Y origin of the rectangle
+ * @width: rectangle width
+ * @height: rectangle height
+ *
+ * Creates a render node for the CSS background according to @context,
+ * and appends it to the current node of @snapshot, without changing
+ * the current node.
+ *
+ * Deprecated: 4.10
+ */
+void
+gtk_snapshot_render_background (GtkSnapshot     *snapshot,
+                                GtkStyleContext *context,
+                                double           x,
+                                double           y,
+                                double           width,
+                                double           height)
+{
+  GtkCssBoxes boxes;
+
+  g_return_if_fail (snapshot != NULL);
+  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
+
+  gtk_css_boxes_init_border_box (&boxes,
+                                 gtk_style_context_lookup_style (context),
+                                 x, y, width, height);
+  gtk_css_style_snapshot_background (&boxes, snapshot);
+}
+
+/**
+ * gtk_snapshot_render_frame:
+ * @snapshot: a `GtkSnapshot`
+ * @context: the style context that defines the frame
+ * @x: X origin of the rectangle
+ * @y: Y origin of the rectangle
+ * @width: rectangle width
+ * @height: rectangle height
+ *
+ * Creates a render node for the CSS border according to @context,
+ * and appends it to the current node of @snapshot, without changing
+ * the current node.
+ *
+ * Deprecated: 4.10
+ */
+void
+gtk_snapshot_render_frame (GtkSnapshot     *snapshot,
+                           GtkStyleContext *context,
+                           double           x,
+                           double           y,
+                           double           width,
+                           double           height)
+{
+  GtkCssBoxes boxes;
+
+  g_return_if_fail (snapshot != NULL);
+  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
+
+  gtk_css_boxes_init_border_box (&boxes,
+                                 gtk_style_context_lookup_style (context),
+                                 x, y, width, height);
+  gtk_css_style_snapshot_border (&boxes, snapshot);
+}
+
+/**
+ * gtk_snapshot_render_focus:
+ * @snapshot: a `GtkSnapshot`
+ * @context: the style context that defines the focus ring
+ * @x: X origin of the rectangle
+ * @y: Y origin of the rectangle
+ * @width: rectangle width
+ * @height: rectangle height
+ *
+ * Creates a render node for the focus outline according to @context,
+ * and appends it to the current node of @snapshot, without changing
+ * the current node.
+ *
+ * Deprecated: 4.10
+ */
+void
+gtk_snapshot_render_focus (GtkSnapshot     *snapshot,
+                           GtkStyleContext *context,
+                           double           x,
+                           double           y,
+                           double           width,
+                           double           height)
+{
+  GtkCssBoxes boxes;
+
+  g_return_if_fail (snapshot != NULL);
+  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
+
+  gtk_css_boxes_init_border_box (&boxes,
+                                 gtk_style_context_lookup_style (context),
+                                 x, y, width, height);
+  gtk_css_style_snapshot_outline (&boxes, snapshot);
+}
+
+/**
+ * gtk_snapshot_render_layout:
+ * @snapshot: a `GtkSnapshot`
+ * @context: the style context that defines the text
+ * @x: X origin of the rectangle
+ * @y: Y origin of the rectangle
+ * @layout: the `PangoLayout` to render
+ *
+ * Creates a render node for rendering @layout according to the style
+ * information in @context, and appends it to the current node of @snapshot,
+ * without changing the current node.
+ *
+ * Deprecated: 4.10
+ */
+void
+gtk_snapshot_render_layout (GtkSnapshot     *snapshot,
+                            GtkStyleContext *context,
+                            double           x,
+                            double           y,
+                            PangoLayout     *layout)
+{
+  const bool needs_translate = (x != 0 || y != 0);
+  const GdkRGBA *fg_color;
+  GtkCssValue *shadows_value;
+  gboolean has_shadow;
+
+  g_return_if_fail (snapshot != NULL);
+  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
+  g_return_if_fail (PANGO_IS_LAYOUT (layout));
+
+  if (needs_translate)
+    {
+      gtk_snapshot_save (snapshot);
+      gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (x, y));
+    }
+
+  fg_color = gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, 
GTK_CSS_PROPERTY_COLOR));
+
+  shadows_value = _gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_TEXT_SHADOW);
+  has_shadow = gtk_css_shadow_value_push_snapshot (shadows_value, snapshot);
+
+  gtk_snapshot_append_layout (snapshot, layout, fg_color);
+
+  if (has_shadow)
+    gtk_snapshot_pop (snapshot);
+
+  if (needs_translate)
+    gtk_snapshot_restore (snapshot);
+}
+
+static void
+draw_insertion_cursor (GtkStyleContext *context,
+                       cairo_t         *cr,
+                       double           x,
+                       double           y,
+                       double           width,
+                       double           height,
+                       double           aspect_ratio,
+                       gboolean         is_primary,
+                       PangoDirection   direction,
+                       gboolean         draw_arrow)
+{
+  GdkRGBA primary_color;
+  GdkRGBA secondary_color;
+  int stem_width;
+  double angle;
+  double dx, dy;
+  double xx1, yy1, xx2, yy2;
+
+  cairo_save (cr);
+  cairo_new_path (cr);
+
+  _gtk_style_context_get_cursor_color (context, &primary_color, &secondary_color);
+  gdk_cairo_set_source_rgba (cr, is_primary ? &primary_color : &secondary_color);
+
+  stem_width = height * aspect_ratio + 1;
+
+  yy1 = y;
+  yy2 = y + height;
+
+  if (width < 0)
+    {
+      xx1 = x;
+      xx2 = x - width;
+    }
+  else
+    {
+      xx1 = x + width;
+      xx2 = x;
+    }
+
+  angle = atan2 (height, width);
+
+  dx = (stem_width/2.0) * cos (M_PI/2 - angle);
+  dy = (stem_width/2.0) * sin (M_PI/2 - angle);
+
+  if (draw_arrow)
+    {
+      if (direction == PANGO_DIRECTION_RTL)
+        {
+          double x0, y0, x1, y1, x2, y2;
+
+          x0 = xx2 - dx + 2 * dy;
+          y0 = yy2 - dy - 2 * dx;
+
+          x1 = x0 + 4 * dy;
+          y1 = y0 - 4 * dx;
+          x2 = x0 + 2 * dy - 3 * dx;
+          y2 = y0 - 2 * dx - 3 * dy;
+
+          cairo_move_to (cr, xx1 + dx, yy1 + dy);
+          cairo_line_to (cr, xx2 + dx, yy2 + dy);
+          cairo_line_to (cr, x2, y2);
+          cairo_line_to (cr, x1, y1);
+          cairo_line_to (cr, xx1 - dx, yy1 - dy);
+        }
+      else if (direction == PANGO_DIRECTION_LTR)
+        {
+          double x0, y0, x1, y1, x2, y2;
+
+          x0 = xx2 + dx + 2 * dy;
+          y0 = yy2 + dy - 2 * dx;
+
+          x1 = x0 + 4 * dy;
+          y1 = y0 - 4 * dx;
+          x2 = x0 + 2 * dy + 3 * dx;
+          y2 = y0 - 2 * dx + 3 * dy;
+
+          cairo_move_to (cr, xx1 - dx, yy1 - dy);
+          cairo_line_to (cr, xx2 - dx, yy2 - dy);
+          cairo_line_to (cr, x2, y2);
+          cairo_line_to (cr, x1, y1);
+          cairo_line_to (cr, xx1 + dx, yy1 + dy);
+        }
+      else
+        g_assert_not_reached();
+    }
+  else
+    {
+      cairo_move_to (cr, xx1 + dx, yy1 + dy);
+      cairo_line_to (cr, xx2 + dx, yy2 + dy);
+      cairo_line_to (cr, xx2 - dx, yy2 - dy);
+      cairo_line_to (cr, xx1 - dx, yy1 - dy);
+    }
+
+  cairo_fill (cr);
+
+  cairo_restore (cr);
+}
+
+static void
+get_insertion_cursor_bounds (double           width,
+                             double           height,
+                             double           aspect_ratio,
+                             PangoDirection   direction,
+                             gboolean         draw_arrow,
+                             graphene_rect_t *bounds)
+{
+  int stem_width;
+
+  if (width < 0)
+    width = - width;
+
+  stem_width = height * aspect_ratio + 1;
+
+  graphene_rect_init (bounds,
+                      - 2 * stem_width, - stem_width,
+                      width + 4 * stem_width, height + 2 * stem_width);
+}
+
+static void
+snapshot_insertion_cursor (GtkSnapshot     *snapshot,
+                           GtkStyleContext *context,
+                           double           width,
+                           double           height,
+                           double           aspect_ratio,
+                           gboolean         is_primary,
+                           PangoDirection   direction,
+                           gboolean         draw_arrow)
+{
+  if (width != 0 || draw_arrow)
+    {
+      cairo_t *cr;
+      graphene_rect_t bounds;
+
+      get_insertion_cursor_bounds (width, height, aspect_ratio, direction, draw_arrow, &bounds);
+      cr = gtk_snapshot_append_cairo (snapshot, &bounds);
+
+      draw_insertion_cursor (context, cr, 0, 0, width, height, aspect_ratio, is_primary, direction, 
draw_arrow);
+
+      cairo_destroy (cr);
+    }
+  else
+    {
+      GdkRGBA primary_color;
+      GdkRGBA secondary_color;
+      int stem_width;
+      int offset;
+
+      _gtk_style_context_get_cursor_color (context, &primary_color, &secondary_color);
+
+      stem_width = height * aspect_ratio + 1;
+
+      /* put (stem_width % 2) on the proper side of the cursor */
+      if (direction == PANGO_DIRECTION_LTR)
+        offset = stem_width / 2;
+      else
+        offset = stem_width - stem_width / 2;
+
+      gtk_snapshot_append_color (snapshot,
+                                 is_primary ? &primary_color : &secondary_color,
+                                 &GRAPHENE_RECT_INIT (- offset, 0, stem_width, height));
+    }
+}
+
+/**
+ * gtk_snapshot_render_insertion_cursor:
+ * @snapshot: snapshot to render to
+ * @context: a `GtkStyleContext`
+ * @x: X origin
+ * @y: Y origin
+ * @layout: the `PangoLayout` of the text
+ * @index: the index in the `PangoLayout`
+ * @direction: the `PangoDirection` of the text
+ *
+ * Draws a text caret using @snapshot at the specified index of @layout.
+ *
+ * Deprecated: 4.10
+ */
+void
+gtk_snapshot_render_insertion_cursor (GtkSnapshot     *snapshot,
+                                      GtkStyleContext *context,
+                                      double           x,
+                                      double           y,
+                                      PangoLayout     *layout,
+                                      int              index,
+                                      PangoDirection   direction)
+{
+  GdkDisplay *display;
+  gboolean split_cursor;
+  double aspect_ratio;
+  PangoRectangle strong_pos, weak_pos;
+  PangoRectangle *cursor1, *cursor2;
+  GdkSeat *seat;
+  PangoDirection keyboard_direction;
+  PangoDirection direction2;
+
+  g_return_if_fail (snapshot != NULL);
+  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
+  g_return_if_fail (PANGO_IS_LAYOUT (layout));
+  g_return_if_fail (index >= 0);
+
+  display = gtk_style_context_get_display (context);
+
+  g_object_get (gtk_settings_get_for_display (display),
+                "gtk-split-cursor", &split_cursor,
+                "gtk-cursor-aspect-ratio", &aspect_ratio,
+                NULL);
+
+  keyboard_direction = PANGO_DIRECTION_LTR;
+  seat = gdk_display_get_default_seat (display);
+  if (seat)
+    {
+      GdkDevice *keyboard = gdk_seat_get_keyboard (seat);
+
+      if (keyboard)
+        keyboard_direction = gdk_device_get_direction (keyboard);
+    }
+
+  pango_layout_get_caret_pos (layout, index, &strong_pos, &weak_pos);
+
+  direction2 = PANGO_DIRECTION_NEUTRAL;
+
+  if (split_cursor)
+    {
+      cursor1 = &strong_pos;
+
+      if (strong_pos.x != weak_pos.x || strong_pos.y != weak_pos.y)
+        {
+          direction2 = (direction == PANGO_DIRECTION_LTR) ? PANGO_DIRECTION_RTL : PANGO_DIRECTION_LTR;
+          cursor2 = &weak_pos;
+        }
+    }
+  else
+    {
+      if (keyboard_direction == direction)
+        cursor1 = &strong_pos;
+      else
+        cursor1 = &weak_pos;
+    }
+
+  gtk_snapshot_save (snapshot);
+  gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (x + PANGO_PIXELS (MIN (cursor1->x, cursor1->x + 
cursor1->width)), y + PANGO_PIXELS (cursor1->y)));
+  snapshot_insertion_cursor (snapshot,
+                             context,
+                             PANGO_PIXELS (cursor1->width),
+                             PANGO_PIXELS (cursor1->height),
+                             aspect_ratio,
+                             TRUE,
+                             direction,
+                             direction2 != PANGO_DIRECTION_NEUTRAL);
+  gtk_snapshot_restore (snapshot);
+
+  if (direction2 != PANGO_DIRECTION_NEUTRAL)
+    {
+      gtk_snapshot_save (snapshot);
+      gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (x + PANGO_PIXELS (MIN (cursor2->x, cursor2->x 
+ cursor2->width)), y + PANGO_PIXELS (cursor2->y)));
+      snapshot_insertion_cursor (snapshot,
+                                 context,
+                                 PANGO_PIXELS (cursor2->width),
+                                 PANGO_PIXELS (cursor2->height),
+                                 aspect_ratio,
+                                 FALSE,
+                                 direction2,
+                                 TRUE);
+      gtk_snapshot_restore (snapshot);
+    }
+}
diff --git a/gtk/deprecated/gtkrender.h b/gtk/deprecated/gtkrender.h
index 27fa4847eb..0ccf6248ae 100644
--- a/gtk/deprecated/gtkrender.h
+++ b/gtk/deprecated/gtkrender.h
@@ -28,6 +28,7 @@
 
 #include <gtk/gtkenums.h>
 #include <gtk/gtktypes.h>
+#include <gtk/gtksnapshot.h>
 
 G_BEGIN_DECLS
 
@@ -114,6 +115,43 @@ void        gtk_render_icon        (GtkStyleContext     *context,
                                     GdkTexture          *texture,
                                     double               x,
                                     double               y);
+
+GDK_DEPRECATED_IN_4_10
+void            gtk_snapshot_render_background          (GtkSnapshot            *snapshot,
+                                                         GtkStyleContext        *context,
+                                                         double                  x,
+                                                         double                  y,
+                                                         double                  width,
+                                                         double                  height);
+GDK_DEPRECATED_IN_4_10
+void            gtk_snapshot_render_frame               (GtkSnapshot            *snapshot,
+                                                         GtkStyleContext        *context,
+                                                         double                  x,
+                                                         double                  y,
+                                                         double                  width,
+                                                         double                  height);
+GDK_DEPRECATED_IN_4_10
+void            gtk_snapshot_render_focus               (GtkSnapshot            *snapshot,
+                                                         GtkStyleContext        *context,
+                                                         double                  x,
+                                                         double                  y,
+                                                         double                  width,
+                                                         double                  height);
+GDK_DEPRECATED_IN_4_10
+void            gtk_snapshot_render_layout              (GtkSnapshot            *snapshot,
+                                                         GtkStyleContext        *context,
+                                                         double                  x,
+                                                         double                  y,
+                                                         PangoLayout            *layout);
+GDK_DEPRECATED_IN_4_10
+void            gtk_snapshot_render_insertion_cursor    (GtkSnapshot            *snapshot,
+                                                         GtkStyleContext        *context,
+                                                         double                  x,
+                                                         double                  y,
+                                                         PangoLayout            *layout,
+                                                         int                     index,
+                                                         PangoDirection          direction);
+
 G_END_DECLS
 
 #endif /* __GTK_RENDER_H__ */
diff --git a/gtk/deprecated/gtktreeview.c b/gtk/deprecated/gtktreeview.c
index 5403754579..201db8cba8 100644
--- a/gtk/deprecated/gtktreeview.c
+++ b/gtk/deprecated/gtktreeview.c
@@ -51,7 +51,7 @@
 #include "gtkscrollable.h"
 #include "gtksettingsprivate.h"
 #include "gtkshortcutcontroller.h"
-#include "gtksnapshot.h"
+#include "deprecated/gtkrender.h"
 #include "gtkstylecontextprivate.h"
 #include "gtktooltip.h"
 #include "gtktreednd.h"
diff --git a/gtk/gtkflowbox.c b/gtk/gtkflowbox.c
index 786502ee9e..6676d4c6b8 100644
--- a/gtk/gtkflowbox.c
+++ b/gtk/gtkflowbox.c
@@ -97,7 +97,7 @@
 #include "gtkorientable.h"
 #include "gtkprivate.h"
 #include "gtksizerequest.h"
-#include "gtksnapshot.h"
+#include "deprecated/gtkrender.h"
 #include "gtkstylecontextprivate.h"
 #include "gtktypebuiltins.h"
 #include "gtkviewport.h"
@@ -2586,7 +2586,9 @@ gtk_flow_box_snapshot (GtkWidget   *widget,
           cairo_clip (cr);
 
           bg_snapshot = gtk_snapshot_new ();
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
           gtk_snapshot_render_background (bg_snapshot, context, x, y, width, height);
+G_GNUC_END_IGNORE_DEPRECATIONS
           node = gtk_snapshot_free_to_node (bg_snapshot);
           if (node)
             {
diff --git a/gtk/gtkglarea.c b/gtk/gtkglarea.c
index 92016afe98..2810ed0c1a 100644
--- a/gtk/gtkglarea.c
+++ b/gtk/gtkglarea.c
@@ -29,6 +29,7 @@
 #include "gtksnapshot.h"
 #include "gtknative.h"
 #include "gtkwidgetprivate.h"
+#include "deprecated/gtkrender.h"
 
 #include <epoxy/gl.h>
 
@@ -659,10 +660,12 @@ gtk_gl_area_draw_error_screen (GtkGLArea   *area,
   pango_layout_set_alignment (layout, PANGO_ALIGN_CENTER);
   pango_layout_get_pixel_size (layout, NULL, &layout_height);
 
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
   gtk_snapshot_render_layout (snapshot,
                               gtk_widget_get_style_context (GTK_WIDGET (area)),
                               0, (height - layout_height) / 2,
                               layout);
+G_GNUC_END_IGNORE_DEPRECATIONS
 
   g_object_unref (layout);
 }
diff --git a/gtk/gtkinscription.c b/gtk/gtkinscription.c
index 598c6600c0..d689fc989f 100644
--- a/gtk/gtkinscription.c
+++ b/gtk/gtkinscription.c
@@ -24,7 +24,7 @@
 #include "gtkcssnodeprivate.h"
 #include "gtkcssstylechangeprivate.h"
 #include "gtkpangoprivate.h"
-#include "gtksnapshot.h"
+#include "deprecated/gtkrender.h"
 #include "gtktypebuiltins.h"
 #include "gtkwidgetprivate.h"
 
@@ -520,7 +520,9 @@ gtk_inscription_snapshot (GtkWidget   *widget,
 
   gtk_snapshot_push_clip (snapshot, &GRAPHENE_RECT_INIT(0, 0, gtk_widget_get_width (widget), 
gtk_widget_get_height (widget)));
   gtk_inscription_get_layout_location (self, &lx, &ly);
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
   gtk_snapshot_render_layout (snapshot, context, lx, ly, self->layout);
+G_GNUC_END_IGNORE_DEPRECATIONS
   gtk_snapshot_pop (snapshot);
 }
 
diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c
index 9e2ce06cd6..586aad8cd9 100644
--- a/gtk/gtklabel.c
+++ b/gtk/gtklabel.c
@@ -41,7 +41,7 @@
 #include "gtkshortcutcontroller.h"
 #include "gtkshortcuttrigger.h"
 #include "gtkshow.h"
-#include "gtksnapshot.h"
+#include "deprecated/gtkrender.h"
 #include "gtkstylecontextprivate.h"
 #include "gtktextutilprivate.h"
 #include "gtktooltip.h"
@@ -1382,6 +1382,7 @@ gtk_label_snapshot (GtkWidget   *widget,
   int lx, ly;
   int width, height;
 
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
   if (!self->text || (*self->text == '\0'))
     return;
 
@@ -1492,6 +1493,7 @@ gtk_label_snapshot (GtkWidget   *widget,
           gtk_style_context_restore (context);
         }
     }
+G_GNUC_END_IGNORE_DEPRECATIONS
 }
 
 static GtkSizeRequestMode
diff --git a/gtk/gtkpopover.c b/gtk/gtkpopover.c
index c1409817fe..f9f92d7ea1 100644
--- a/gtk/gtkpopover.c
+++ b/gtk/gtkpopover.c
@@ -118,7 +118,7 @@
 #include "gdk/gdkeventsprivate.h"
 #include "gtkpointerfocusprivate.h"
 #include "gtkcsscolorvalueprivate.h"
-#include "gtksnapshot.h"
+#include "deprecated/gtkrender.h"
 #include "gtkshortcutmanager.h"
 #include "gtkbuildable.h"
 #include "gtktooltipprivate.h"
@@ -1572,11 +1572,13 @@ create_arrow_render_node (GtkPopover *popover)
 
   /* Render the arrow background */
   bg_snapshot = gtk_snapshot_new ();
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
   gtk_snapshot_render_background (bg_snapshot,
                                   context,
                                   0, 0,
                                   gtk_widget_get_width (widget),
                                   gtk_widget_get_height (widget));
+G_GNUC_END_IGNORE_DEPRECATIONS
   node = gtk_snapshot_free_to_node (bg_snapshot);
   if (node)
     {
diff --git a/gtk/gtkprintunixdialog.c b/gtk/gtkprintunixdialog.c
index 95037be452..575b2091bd 100644
--- a/gtk/gtkprintunixdialog.c
+++ b/gtk/gtkprintunixdialog.c
@@ -46,6 +46,7 @@
 #include "gtkbuildable.h"
 #include "gtkmessagedialog.h"
 #include "gtkbutton.h"
+#include "deprecated/gtkrender.h"
 #include <glib/gi18n-lib.h>
 #include "gtkprivate.h"
 #include "gtktypebuiltins.h"
@@ -1964,8 +1965,10 @@ paint_page (GtkPrintUnixDialog *dialog,
   gtk_style_context_save_to_node (context, dialog->collate_paper_node);
 
   snapshot = gtk_snapshot_new ();
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
   gtk_snapshot_render_background (snapshot, context, x, y, width, height);
   gtk_snapshot_render_frame (snapshot, context, x, y, width, height);
+G_GNUC_END_IGNORE_DEPRECATIONS
   node = gtk_snapshot_free_to_node (snapshot);
   if (node)
     {
@@ -2498,8 +2501,10 @@ draw_page (GtkDrawingArea *da,
   cairo_translate (cr, pos_x, pos_y);
 
   snapshot = gtk_snapshot_new ();
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
   gtk_snapshot_render_background (snapshot, context, 1, 1, w, h);
   gtk_snapshot_render_frame (snapshot, context, 1, 1, w, h);
+G_GNUC_END_IGNORE_DEPRECATIONS
   node = gtk_snapshot_free_to_node (snapshot);
   if (node)
     {
diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
index bf581109a0..a8c9b3600e 100644
--- a/gtk/gtkscrolledwindow.c
+++ b/gtk/gtkscrolledwindow.c
@@ -47,7 +47,7 @@
 #include "gtkscrollable.h"
 #include "gtkscrollbar.h"
 #include "gtksettingsprivate.h"
-#include "gtksnapshot.h"
+#include "deprecated/gtkrender.h"
 #include "gtkstylecontextprivate.h"
 #include "gtktypebuiltins.h"
 #include "gtkviewport.h"
@@ -1885,12 +1885,14 @@ gtk_scrolled_window_snapshot_scrollbars_junction (GtkScrolledWindow *scrolled_wi
   context = gtk_widget_get_style_context (widget);
   gtk_style_context_save_to_node (context, priv->junction_node);
 
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
   gtk_snapshot_render_background (snapshot, context,
                                   junction_rect.x, junction_rect.y,
                                   junction_rect.width, junction_rect.height);
   gtk_snapshot_render_frame (snapshot, context,
                              junction_rect.x, junction_rect.y,
                              junction_rect.width, junction_rect.height);
+G_GNUC_END_IGNORE_DEPRECATIONS
 
   gtk_style_context_restore (context);
 }
@@ -1905,6 +1907,7 @@ gtk_scrolled_window_snapshot_overshoot (GtkScrolledWindow *scrolled_window,
   GtkStyleContext *context;
   GdkRectangle rect;
 
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
   if (!_gtk_scrolled_window_get_overshoot (scrolled_window, &overshoot_x, &overshoot_y))
     return;
 
@@ -1943,6 +1946,7 @@ gtk_scrolled_window_snapshot_overshoot (GtkScrolledWindow *scrolled_window,
       gtk_snapshot_render_frame (snapshot, context, rect.x, rect.y, rect.width, -overshoot_y);
       gtk_style_context_restore (context);
     }
+G_GNUC_END_IGNORE_DEPRECATIONS
 }
 
 static void
@@ -1955,6 +1959,7 @@ gtk_scrolled_window_snapshot_undershoot (GtkScrolledWindow *scrolled_window,
   GdkRectangle rect;
   GtkAdjustment *adj;
 
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
   context = gtk_widget_get_style_context (widget);
   gtk_scrolled_window_inner_allocation (scrolled_window, &rect);
 
@@ -1990,6 +1995,7 @@ gtk_scrolled_window_snapshot_undershoot (GtkScrolledWindow *scrolled_window,
       gtk_snapshot_render_frame (snapshot, context, rect.x, rect.y, rect.width, UNDERSHOOT_SIZE);
       gtk_style_context_restore (context);
     }
+G_GNUC_END_IGNORE_DEPRECATIONS
 }
 
 static void
diff --git a/gtk/gtksnapshot.c b/gtk/gtksnapshot.c
index f3902fa376..90cbbb8833 100644
--- a/gtk/gtksnapshot.c
+++ b/gtk/gtksnapshot.c
@@ -23,9 +23,6 @@
 #include "gtkcsscolorvalueprivate.h"
 #include "gtkcssshadowvalueprivate.h"
 #include "gtkdebug.h"
-#include "gtkrenderbackgroundprivate.h"
-#include "gtkrenderborderprivate.h"
-#include "gtkrendericonprivate.h"
 #include "gtkrendernodepaintableprivate.h"
 #include "gtkstylecontextprivate.h"
 #include "gsktransformprivate.h"
@@ -1977,150 +1974,6 @@ gtk_snapshot_append_color (GtkSnapshot           *snapshot,
   gtk_snapshot_append_node_internal (snapshot, node);
 }
 
-/**
- * gtk_snapshot_render_background:
- * @snapshot: a `GtkSnapshot`
- * @context: the style context that defines the background
- * @x: X origin of the rectangle
- * @y: Y origin of the rectangle
- * @width: rectangle width
- * @height: rectangle height
- *
- * Creates a render node for the CSS background according to @context,
- * and appends it to the current node of @snapshot, without changing
- * the current node.
- */
-void
-gtk_snapshot_render_background (GtkSnapshot     *snapshot,
-                                GtkStyleContext *context,
-                                double           x,
-                                double           y,
-                                double           width,
-                                double           height)
-{
-  GtkCssBoxes boxes;
-
-  g_return_if_fail (snapshot != NULL);
-  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
-
-  gtk_css_boxes_init_border_box (&boxes,
-                                 gtk_style_context_lookup_style (context),
-                                 x, y, width, height);
-  gtk_css_style_snapshot_background (&boxes, snapshot);
-}
-
-/**
- * gtk_snapshot_render_frame:
- * @snapshot: a `GtkSnapshot`
- * @context: the style context that defines the frame
- * @x: X origin of the rectangle
- * @y: Y origin of the rectangle
- * @width: rectangle width
- * @height: rectangle height
- *
- * Creates a render node for the CSS border according to @context,
- * and appends it to the current node of @snapshot, without changing
- * the current node.
- */
-void
-gtk_snapshot_render_frame (GtkSnapshot     *snapshot,
-                           GtkStyleContext *context,
-                           double           x,
-                           double           y,
-                           double           width,
-                           double           height)
-{
-  GtkCssBoxes boxes;
-
-  g_return_if_fail (snapshot != NULL);
-  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
-
-  gtk_css_boxes_init_border_box (&boxes,
-                                 gtk_style_context_lookup_style (context),
-                                 x, y, width, height);
-  gtk_css_style_snapshot_border (&boxes, snapshot);
-}
-
-/**
- * gtk_snapshot_render_focus:
- * @snapshot: a `GtkSnapshot`
- * @context: the style context that defines the focus ring
- * @x: X origin of the rectangle
- * @y: Y origin of the rectangle
- * @width: rectangle width
- * @height: rectangle height
- *
- * Creates a render node for the focus outline according to @context,
- * and appends it to the current node of @snapshot, without changing
- * the current node.
- */
-void
-gtk_snapshot_render_focus (GtkSnapshot     *snapshot,
-                           GtkStyleContext *context,
-                           double           x,
-                           double           y,
-                           double           width,
-                           double           height)
-{
-  GtkCssBoxes boxes;
-
-  g_return_if_fail (snapshot != NULL);
-  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
-
-  gtk_css_boxes_init_border_box (&boxes,
-                                 gtk_style_context_lookup_style (context),
-                                 x, y, width, height);
-  gtk_css_style_snapshot_outline (&boxes, snapshot);
-}
-
-/**
- * gtk_snapshot_render_layout:
- * @snapshot: a `GtkSnapshot`
- * @context: the style context that defines the text
- * @x: X origin of the rectangle
- * @y: Y origin of the rectangle
- * @layout: the `PangoLayout` to render
- *
- * Creates a render node for rendering @layout according to the style
- * information in @context, and appends it to the current node of @snapshot,
- * without changing the current node.
- */
-void
-gtk_snapshot_render_layout (GtkSnapshot     *snapshot,
-                            GtkStyleContext *context,
-                            double           x,
-                            double           y,
-                            PangoLayout     *layout)
-{
-  const bool needs_translate = (x != 0 || y != 0);
-  const GdkRGBA *fg_color;
-  GtkCssValue *shadows_value;
-  gboolean has_shadow;
-
-  g_return_if_fail (snapshot != NULL);
-  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
-  g_return_if_fail (PANGO_IS_LAYOUT (layout));
-
-  if (needs_translate)
-    {
-      gtk_snapshot_save (snapshot);
-      gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (x, y));
-    }
-
-  fg_color = gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, 
GTK_CSS_PROPERTY_COLOR));
-
-  shadows_value = _gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_TEXT_SHADOW);
-  has_shadow = gtk_css_shadow_value_push_snapshot (shadows_value, snapshot);
-
-  gtk_snapshot_append_layout (snapshot, layout, fg_color);
-
-  if (has_shadow)
-    gtk_snapshot_pop (snapshot);
-
-  if (needs_translate)
-    gtk_snapshot_restore (snapshot);
-}
-
 void
 gtk_snapshot_append_text (GtkSnapshot           *snapshot,
                           PangoFont             *font,
diff --git a/gtk/gtksnapshot.h b/gtk/gtksnapshot.h
index 6125e44ecc..38cc0271aa 100644
--- a/gtk/gtksnapshot.h
+++ b/gtk/gtksnapshot.h
@@ -225,43 +225,6 @@ void            gtk_snapshot_append_layout              (GtkSnapshot
                                                          const GdkRGBA          *color);
 
 
-GDK_AVAILABLE_IN_ALL
-void            gtk_snapshot_render_background          (GtkSnapshot            *snapshot,
-                                                         GtkStyleContext        *context,
-                                                         double                  x,
-                                                         double                  y,
-                                                         double                  width,
-                                                         double                  height);
-GDK_AVAILABLE_IN_ALL
-void            gtk_snapshot_render_frame               (GtkSnapshot            *snapshot,
-                                                         GtkStyleContext        *context,
-                                                         double                  x,
-                                                         double                  y,
-                                                         double                  width,
-                                                         double                  height);
-GDK_AVAILABLE_IN_ALL
-void            gtk_snapshot_render_focus               (GtkSnapshot            *snapshot,
-                                                         GtkStyleContext        *context,
-                                                         double                  x,
-                                                         double                  y,
-                                                         double                  width,
-                                                         double                  height);
-GDK_AVAILABLE_IN_ALL
-void            gtk_snapshot_render_layout              (GtkSnapshot            *snapshot,
-                                                         GtkStyleContext        *context,
-                                                         double                  x,
-                                                         double                  y,
-                                                         PangoLayout            *layout);
-GDK_AVAILABLE_IN_ALL /* in gtkstylecontext.c */
-void            gtk_snapshot_render_insertion_cursor    (GtkSnapshot            *snapshot,
-                                                         GtkStyleContext        *context,
-                                                         double                  x,
-                                                         double                  y,
-                                                         PangoLayout            *layout,
-                                                         int                     index,
-                                                         PangoDirection          direction);
-
-
 G_END_DECLS
 
 #endif /* __GTK_SNAPSHOT_H__ */
diff --git a/gtk/gtkstylecontext.c b/gtk/gtkstylecontext.c
index 90c2b846b0..18c90bf0d9 100644
--- a/gtk/gtkstylecontext.c
+++ b/gtk/gtkstylecontext.c
@@ -28,7 +28,7 @@
 #include "gtkprivate.h"
 #include "gtksettings.h"
 #include "gtksettingsprivate.h"
-#include "gtksnapshot.h"
+#include "deprecated/gtkrender.h"
 
 
 /**
@@ -949,271 +949,6 @@ _gtk_style_context_get_cursor_color (GtkStyleContext *context,
     *secondary_color = *gtk_css_color_value_get_rgba (style->font->secondary_caret_color ? 
style->font->secondary_caret_color : style->core->color);
 }
 
-static void
-draw_insertion_cursor (GtkStyleContext *context,
-                       cairo_t         *cr,
-                       double           x,
-                       double           y,
-                       double           width,
-                       double           height,
-                       double           aspect_ratio,
-                       gboolean         is_primary,
-                       PangoDirection   direction,
-                       gboolean         draw_arrow)
-{
-  GdkRGBA primary_color;
-  GdkRGBA secondary_color;
-  int stem_width;
-  double angle;
-  double dx, dy;
-  double xx1, yy1, xx2, yy2;
-
-  cairo_save (cr);
-  cairo_new_path (cr);
-
-  _gtk_style_context_get_cursor_color (context, &primary_color, &secondary_color);
-  gdk_cairo_set_source_rgba (cr, is_primary ? &primary_color : &secondary_color);
-
-  stem_width = height * aspect_ratio + 1;
-
-  yy1 = y;
-  yy2 = y + height;
-
-  if (width < 0)
-    {
-      xx1 = x;
-      xx2 = x - width;
-    }
-  else
-    {
-      xx1 = x + width;
-      xx2 = x;
-    }
-
-  angle = atan2 (height, width);
-
-  dx = (stem_width/2.0) * cos (M_PI/2 - angle);
-  dy = (stem_width/2.0) * sin (M_PI/2 - angle);
-
-  if (draw_arrow)
-    {
-      if (direction == PANGO_DIRECTION_RTL)
-        {
-          double x0, y0, x1, y1, x2, y2;
-
-          x0 = xx2 - dx + 2 * dy;
-          y0 = yy2 - dy - 2 * dx;
-
-          x1 = x0 + 4 * dy;
-          y1 = y0 - 4 * dx;
-          x2 = x0 + 2 * dy - 3 * dx;
-          y2 = y0 - 2 * dx - 3 * dy;
-
-          cairo_move_to (cr, xx1 + dx, yy1 + dy);
-          cairo_line_to (cr, xx2 + dx, yy2 + dy);
-          cairo_line_to (cr, x2, y2);
-          cairo_line_to (cr, x1, y1);
-          cairo_line_to (cr, xx1 - dx, yy1 - dy);
-        }
-      else if (direction == PANGO_DIRECTION_LTR)
-        {
-          double x0, y0, x1, y1, x2, y2;
-
-          x0 = xx2 + dx + 2 * dy;
-          y0 = yy2 + dy - 2 * dx;
-
-          x1 = x0 + 4 * dy;
-          y1 = y0 - 4 * dx;
-          x2 = x0 + 2 * dy + 3 * dx;
-          y2 = y0 - 2 * dx + 3 * dy;
-
-          cairo_move_to (cr, xx1 - dx, yy1 - dy);
-          cairo_line_to (cr, xx2 - dx, yy2 - dy);
-          cairo_line_to (cr, x2, y2);
-          cairo_line_to (cr, x1, y1);
-          cairo_line_to (cr, xx1 + dx, yy1 + dy);
-        }
-      else
-        g_assert_not_reached();
-    }
-  else
-    {
-      cairo_move_to (cr, xx1 + dx, yy1 + dy);
-      cairo_line_to (cr, xx2 + dx, yy2 + dy);
-      cairo_line_to (cr, xx2 - dx, yy2 - dy);
-      cairo_line_to (cr, xx1 - dx, yy1 - dy);
-    }
-
-  cairo_fill (cr);
-
-  cairo_restore (cr);
-}
-
-static void
-get_insertion_cursor_bounds (double           width,
-                             double           height,
-                             double           aspect_ratio,
-                             PangoDirection   direction,
-                             gboolean         draw_arrow,
-                             graphene_rect_t *bounds)
-{
-  int stem_width;
-
-  if (width < 0)
-    width = - width;
-
-  stem_width = height * aspect_ratio + 1;
-
-  graphene_rect_init (bounds,
-                      - 2 * stem_width, - stem_width,
-                      width + 4 * stem_width, height + 2 * stem_width);
-}
-
-static void
-snapshot_insertion_cursor (GtkSnapshot     *snapshot,
-                           GtkStyleContext *context,
-                           double           width,
-                           double           height,
-                           double           aspect_ratio,
-                           gboolean         is_primary,
-                           PangoDirection   direction,
-                           gboolean         draw_arrow)
-{
-  if (width != 0 || draw_arrow)
-    {
-      cairo_t *cr;
-      graphene_rect_t bounds;
-
-      get_insertion_cursor_bounds (width, height, aspect_ratio, direction, draw_arrow, &bounds);
-      cr = gtk_snapshot_append_cairo (snapshot, &bounds);
-
-      draw_insertion_cursor (context, cr, 0, 0, width, height, aspect_ratio, is_primary, direction, 
draw_arrow);
-
-      cairo_destroy (cr);
-    }
-  else
-    {
-      GdkRGBA primary_color;
-      GdkRGBA secondary_color;
-      int stem_width;
-      int offset;
-
-      _gtk_style_context_get_cursor_color (context, &primary_color, &secondary_color);
-
-      stem_width = height * aspect_ratio + 1;
-
-      /* put (stem_width % 2) on the proper side of the cursor */
-      if (direction == PANGO_DIRECTION_LTR)
-        offset = stem_width / 2;
-      else
-        offset = stem_width - stem_width / 2;
-
-      gtk_snapshot_append_color (snapshot,
-                                 is_primary ? &primary_color : &secondary_color,
-                                 &GRAPHENE_RECT_INIT (- offset, 0, stem_width, height));
-    }
-}
-
-/**
- * gtk_snapshot_render_insertion_cursor:
- * @snapshot: snapshot to render to
- * @context: a `GtkStyleContext`
- * @x: X origin
- * @y: Y origin
- * @layout: the `PangoLayout` of the text
- * @index: the index in the `PangoLayout`
- * @direction: the `PangoDirection` of the text
- *
- * Draws a text caret using @snapshot at the specified index of @layout.
- */
-void
-gtk_snapshot_render_insertion_cursor (GtkSnapshot     *snapshot,
-                                      GtkStyleContext *context,
-                                      double           x,
-                                      double           y,
-                                      PangoLayout     *layout,
-                                      int              index,
-                                      PangoDirection   direction)
-{
-  GtkStyleContextPrivate *priv = gtk_style_context_get_instance_private (context);
-  gboolean split_cursor;
-  double aspect_ratio;
-  PangoRectangle strong_pos, weak_pos;
-  PangoRectangle *cursor1, *cursor2;
-  GdkSeat *seat;
-  PangoDirection keyboard_direction;
-  PangoDirection direction2;
-
-  g_return_if_fail (snapshot != NULL);
-  g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
-  g_return_if_fail (PANGO_IS_LAYOUT (layout));
-  g_return_if_fail (index >= 0);
-
-  g_object_get (gtk_settings_get_for_display (priv->display),
-                "gtk-split-cursor", &split_cursor,
-                "gtk-cursor-aspect-ratio", &aspect_ratio,
-                NULL);
-
-  keyboard_direction = PANGO_DIRECTION_LTR;
-  seat = gdk_display_get_default_seat (priv->display);
-  if (seat)
-    {
-      GdkDevice *keyboard = gdk_seat_get_keyboard (seat);
-
-      if (keyboard)
-        keyboard_direction = gdk_device_get_direction (keyboard);
-    }
-
-  pango_layout_get_caret_pos (layout, index, &strong_pos, &weak_pos);
-
-  direction2 = PANGO_DIRECTION_NEUTRAL;
-
-  if (split_cursor)
-    {
-      cursor1 = &strong_pos;
-
-      if (strong_pos.x != weak_pos.x || strong_pos.y != weak_pos.y)
-        {
-          direction2 = (direction == PANGO_DIRECTION_LTR) ? PANGO_DIRECTION_RTL : PANGO_DIRECTION_LTR;
-          cursor2 = &weak_pos;
-        }
-    }
-  else
-    {
-      if (keyboard_direction == direction)
-        cursor1 = &strong_pos;
-      else
-        cursor1 = &weak_pos;
-    }
-
-  gtk_snapshot_save (snapshot);
-  gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (x + PANGO_PIXELS (MIN (cursor1->x, cursor1->x + 
cursor1->width)), y + PANGO_PIXELS (cursor1->y)));
-  snapshot_insertion_cursor (snapshot,
-                             context,
-                             PANGO_PIXELS (cursor1->width),
-                             PANGO_PIXELS (cursor1->height),
-                             aspect_ratio,
-                             TRUE,
-                             direction,
-                             direction2 != PANGO_DIRECTION_NEUTRAL);
-  gtk_snapshot_restore (snapshot);
-
-  if (direction2 != PANGO_DIRECTION_NEUTRAL)
-    {
-      gtk_snapshot_save (snapshot);
-      gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (x + PANGO_PIXELS (MIN (cursor2->x, cursor2->x 
+ cursor2->width)), y + PANGO_PIXELS (cursor2->y)));
-      snapshot_insertion_cursor (snapshot,
-                                 context,
-                                 PANGO_PIXELS (cursor2->width),
-                                 PANGO_PIXELS (cursor2->height),
-                                 aspect_ratio,
-                                 FALSE,
-                                 direction2,
-                                 TRUE);
-      gtk_snapshot_restore (snapshot);
-    }
-}
-
 /**
  * GtkStyleContextPrintFlags:
  * @GTK_STYLE_CONTEXT_PRINT_NONE: Default value.
diff --git a/gtk/gtktext.c b/gtk/gtktext.c
index b7c40370b0..dcacb80a75 100644
--- a/gtk/gtktext.c
+++ b/gtk/gtktext.c
@@ -53,7 +53,7 @@
 #include "gtkpopovermenu.h"
 #include "gtkprivate.h"
 #include "gtksettings.h"
-#include "gtksnapshot.h"
+#include "deprecated/gtkrender.h"
 #include "gtkstylecontextprivate.h"
 #include "gtktexthandleprivate.h"
 #include "gtktexthistoryprivate.h"
@@ -65,6 +65,7 @@
 #include "gtknative.h"
 #include "gtkactionmuxerprivate.h"
 #include "gtkjoinedmenuprivate.h"
+#include "deprecated/gtkrender.h"
 
 #include <cairo-gobject.h>
 #include <string.h>
@@ -2524,6 +2525,7 @@ gtk_text_draw_undershoot (GtkText     *self,
   GtkStyleContext *context;
   int min_offset, max_offset;
 
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
   context = gtk_widget_get_style_context (GTK_WIDGET (self));
 
   gtk_text_get_scroll_limits (self, &min_offset, &max_offset);
@@ -2543,6 +2545,7 @@ gtk_text_draw_undershoot (GtkText     *self,
       gtk_snapshot_render_frame (snapshot, context, text_width - UNDERSHOOT_SIZE, 0, UNDERSHOOT_SIZE, 
text_height);
       gtk_style_context_restore (context);
     }
+G_GNUC_END_IGNORE_DEPRECATIONS
 }
 
 static void
@@ -4604,6 +4607,7 @@ gtk_text_draw_text (GtkText     *self,
   PangoLayout *layout;
   int x, y;
 
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
   /* Nothing to display at all */
   if (gtk_text_get_display_mode (self) == DISPLAY_BLANK)
     return;
@@ -4645,6 +4649,7 @@ gtk_text_draw_text (GtkText     *self,
 
       gtk_style_context_restore (context);
     }
+G_GNUC_END_IGNORE_DEPRECATIONS
 }
 
 static void
@@ -4663,6 +4668,7 @@ gtk_text_draw_cursor (GtkText     *self,
   const char *text;
   int x, y;
 
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
   context = gtk_widget_get_style_context (widget);
 
   layout = g_object_ref (gtk_text_ensure_layout (self, TRUE));
@@ -4707,6 +4713,7 @@ gtk_text_draw_cursor (GtkText     *self,
     }
 
   g_object_unref (layout);
+G_GNUC_END_IGNORE_DEPRECATIONS
 }
 
 static void
diff --git a/gtk/gtktextlayout.c b/gtk/gtktextlayout.c
index ce97ff6252..0b47ae4531 100644
--- a/gtk/gtktextlayout.c
+++ b/gtk/gtktextlayout.c
@@ -4271,9 +4271,11 @@ gtk_text_layout_snapshot (GtkTextLayout      *layout,
                   if (cursor.is_insert || cursor.is_selection_bound)
                     gtk_snapshot_push_opacity (cursor_snapshot, cursor_alpha);
 
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
                   gtk_snapshot_render_insertion_cursor (cursor_snapshot, context,
                                                         line_display->x_offset, offset_y + 
line_display->top_margin,
                                                         line_display->layout, cursor.pos, dir);
+G_GNUC_END_IGNORE_DEPRECATIONS
 
                   if (cursor.is_insert || cursor.is_selection_bound)
                     gtk_snapshot_pop (cursor_snapshot);
diff --git a/gtk/gtktextutil.c b/gtk/gtktextutil.c
index 0ec6216dbe..e847e5dcba 100644
--- a/gtk/gtktextutil.c
+++ b/gtk/gtktextutil.c
@@ -34,6 +34,7 @@
 #include "gtkwidgetprivate.h"
 #include "gtkcssstyleprivate.h"
 #include "gtkcsscolorvalueprivate.h"
+#include "deprecated/gtkrender.h"
 
 #define DRAG_ICON_MAX_WIDTH 250
 #define DRAG_ICON_MAX_HEIGHT 250
@@ -146,10 +147,12 @@ gtk_text_util_create_drag_icon (GtkWidget *widget,
       else
         bg_widget = widget;
       pango_layout_get_size (layout, &layout_width, &layout_height);
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
       gtk_snapshot_render_background (snapshot,
                                       gtk_widget_get_style_context (bg_widget),
                                       0, 0, layout_width / PANGO_SCALE,
                                       layout_height / PANGO_SCALE);
+G_GNUC_END_IGNORE_DEPRECATIONS
     }
 
   gtk_snapshot_append_layout (snapshot, layout, color);
@@ -274,9 +277,11 @@ gtk_text_util_create_rich_drag_icon (GtkWidget     *widget,
   if (!gdk_display_is_rgba (display) ||
       !gdk_display_is_composited (display))
     {
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
       gtk_snapshot_render_background (snapshot,
                                       gtk_widget_get_style_context (widget),
                                       0, 0, layout_width, layout_height);
+G_GNUC_END_IGNORE_DEPRECATIONS
     }
 
   gtk_text_layout_snapshot (layout, widget, snapshot, &(GdkRectangle) { 0, 0, layout_width, layout_height }, 
1.0);
diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c
index 754083b9a1..7073149fd0 100644
--- a/gtk/gtktextview.c
+++ b/gtk/gtktextview.c
@@ -59,6 +59,7 @@
 #include "gtkjoinedmenuprivate.h"
 #include "gtkcsslineheightvalueprivate.h"
 #include "gtkcssenumvalueprivate.h"
+#include "deprecated/gtkrender.h"
 
 
 /**
@@ -5864,6 +5865,7 @@ draw_text (GtkWidget   *widget,
 
   context = gtk_widget_get_style_context (widget);
   gtk_style_context_save_to_node (context, text_view->priv->text_window->css_node);
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
   gtk_snapshot_render_background (snapshot, context,
                                   -priv->xoffset, -priv->yoffset - priv->top_margin,
                                   MAX (SCREEN_WIDTH (text_view), priv->width),
@@ -5872,6 +5874,7 @@ draw_text (GtkWidget   *widget,
                              -priv->xoffset, -priv->yoffset - priv->top_margin,
                              MAX (SCREEN_WIDTH (text_view), priv->width),
                              MAX (SCREEN_HEIGHT (text_view), priv->height));
+G_GNUC_END_IGNORE_DEPRECATIONS
   gtk_style_context_restore (context);
 
   if (GTK_TEXT_VIEW_GET_CLASS (text_view)->snapshot_layer != NULL)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]