Add gtk_snapshot_push_blur()

This function is similar to the other push functions.
This one uses the newly created blur node.
This commit is contained in:
Matthias Clasen
2017-09-02 23:50:39 -04:00
parent a9eb06392f
commit 4b4fbf2ac6
3 changed files with 59 additions and 0 deletions

View File

@@ -321,6 +321,57 @@ gtk_snapshot_push_opacity (GtkSnapshot *snapshot,
snapshot->state = state;
}
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,

View File

@@ -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,

View File

@@ -48,6 +48,9 @@ struct _GtkSnapshotState {
struct {
double opacity;
} opacity;
struct {
double radius;
} blur;
struct {
graphene_matrix_t matrix;
graphene_vec4_t offset;