[gtk+/wip/matthiasc/fancy-overlay: 23/26] Add gtk_snapshot_push_blur()



commit 4b4fbf2ac62ec177ec4d9d4234b6d7ddfb8c374c
Author: Matthias Clasen <mclasen redhat com>
Date:   Sat Sep 2 23:50:39 2017 -0400

    Add gtk_snapshot_push_blur()
    
    This function is similar to the other push functions.
    This one uses the newly created blur node.

 gtk/gtksnapshot.c        |   51 ++++++++++++++++++++++++++++++++++++++++++++++
 gtk/gtksnapshot.h        |    5 ++++
 gtk/gtksnapshotprivate.h |    3 ++
 3 files changed, 59 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtksnapshot.c b/gtk/gtksnapshot.c
index 0408a70..7f5a1f1 100644
--- a/gtk/gtksnapshot.c
+++ b/gtk/gtksnapshot.c
@@ -322,6 +322,57 @@ gtk_snapshot_push_opacity (GtkSnapshot *snapshot,
 }
 
 static GskRenderNode *
+gtk_snapshot_collect_blur (GtkSnapshotState *state,
+                           GskRenderNode **nodes,
+                           guint           n_nodes,
+                           const char     *name)
+{
+  GskRenderNode *node, *blur_node;
+
+  node = gtk_snapshot_collect_default (state, nodes, n_nodes, name);
+  if (node == NULL)
+    return NULL;
+
+  blur_node = gsk_blur_node_new (node, state->data.blur.radius);
+  if (name)
+    gsk_render_node_set_name (blur_node, name);
+
+  gsk_render_node_unref (node);
+
+  return blur_node;
+}
+
+void
+gtk_snapshot_push_blur (GtkSnapshot *snapshot,
+                        double       radius,
+                        const char  *name,
+                        ...)
+{
+  GtkSnapshotState *state;
+  char *str;
+
+  if (name && snapshot->record_names)
+    {
+      va_list args;
+
+      va_start (args, name);
+      str = g_strdup_vprintf (name, args);
+      va_end (args);
+    }
+  else
+    str = NULL;
+
+  state = gtk_snapshot_state_new (snapshot->state,
+                                  str,
+                                  snapshot->state->clip_region,
+                                  snapshot->state->translate_x,
+                                  snapshot->state->translate_y,
+                                  gtk_snapshot_collect_blur);
+  state->data.blur.radius = radius;
+  snapshot->state = state;
+}
+
+static GskRenderNode *
 gtk_snapshot_collect_color_matrix (GtkSnapshotState *state,
                                    GskRenderNode   **nodes,
                                    guint             n_nodes,
diff --git a/gtk/gtksnapshot.h b/gtk/gtksnapshot.h
index 39ebd25..b5e21ae 100644
--- a/gtk/gtksnapshot.h
+++ b/gtk/gtksnapshot.h
@@ -51,6 +51,11 @@ void            gtk_snapshot_push_opacity               (GtkSnapshot
                                                          double                  opacity,
                                                          const char             *name,
                                                          ...) G_GNUC_PRINTF (3, 4);
+GDK_AVAILABLE_IN_3_92
+void            gtk_snapshot_push_blur                  (GtkSnapshot            *snapshot,
+                                                         double                  radius,
+                                                         const char             *name,
+                                                         ...) G_GNUC_PRINTF (3, 4);
 GDK_AVAILABLE_IN_3_90
 void            gtk_snapshot_push_color_matrix          (GtkSnapshot            *snapshot,
                                                          const graphene_matrix_t*color_matrix,
diff --git a/gtk/gtksnapshotprivate.h b/gtk/gtksnapshotprivate.h
index 3676a10..deffbc1 100644
--- a/gtk/gtksnapshotprivate.h
+++ b/gtk/gtksnapshotprivate.h
@@ -49,6 +49,9 @@ struct _GtkSnapshotState {
       double            opacity;
     } opacity;
     struct {
+      double            radius;
+    } blur;
+    struct {
       graphene_matrix_t matrix;
       graphene_vec4_t offset;
     } color_matrix;


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