diff --git a/gsk/gpu/gskgpunodeprocessor.c b/gsk/gpu/gskgpunodeprocessor.c index 88d1bea7e1..77d251870c 100644 --- a/gsk/gpu/gskgpunodeprocessor.c +++ b/gsk/gpu/gskgpunodeprocessor.c @@ -2293,8 +2293,7 @@ gsk_gpu_node_processor_add_inset_shadow_node (GskGpuNodeProcessor *self, self->opacity, &self->offset, gsk_inset_shadow_node_get_outline (node), - &GRAPHENE_POINT_INIT (gsk_inset_shadow_node_get_dx (node), - gsk_inset_shadow_node_get_dy (node)), + gsk_inset_shadow_node_get_offset (node), (float[4]) { spread, spread, spread, spread }, colors); @@ -2311,8 +2310,7 @@ gsk_gpu_node_processor_add_inset_shadow_node (GskGpuNodeProcessor *self, TRUE, &node->bounds, gsk_inset_shadow_node_get_outline (node), - &GRAPHENE_POINT_INIT (gsk_inset_shadow_node_get_dx (node), - gsk_inset_shadow_node_get_dy (node)), + gsk_inset_shadow_node_get_offset (node), spread, blur_radius, color); @@ -2323,14 +2321,14 @@ static void gsk_gpu_node_processor_add_outset_shadow_node (GskGpuNodeProcessor *self, GskRenderNode *node) { - float spread, blur_radius, dx, dy; + float spread, blur_radius; const GdkColor *color; + const graphene_point_t *offset; color = gsk_outset_shadow_node_get_color2 (node); spread = gsk_outset_shadow_node_get_spread (node); blur_radius = gsk_outset_shadow_node_get_blur_radius (node); - dx = gsk_outset_shadow_node_get_dx (node); - dy = gsk_outset_shadow_node_get_dy (node); + offset = gsk_outset_shadow_node_get_offset (node); if (blur_radius < 0.01) { @@ -2339,7 +2337,7 @@ gsk_gpu_node_processor_add_outset_shadow_node (GskGpuNodeProcessor *self, gsk_rounded_rect_init_copy (&outline, gsk_outset_shadow_node_get_outline (node)); gsk_rounded_rect_shrink (&outline, -spread, -spread, -spread, -spread); - graphene_rect_offset (&outline.bounds, dx, dy); + graphene_rect_offset (&outline.bounds, offset->x, offset->y); for (int i = 0; i < 4; i++) gdk_color_init_copy (&colors[i], color); @@ -2350,7 +2348,7 @@ gsk_gpu_node_processor_add_outset_shadow_node (GskGpuNodeProcessor *self, self->opacity, &self->offset, &outline, - &GRAPHENE_POINT_INIT (-dx, -dy), + &GRAPHENE_POINT_INIT (- offset->x, - offset->y), (float[4]) { spread, spread, spread, spread }, colors); @@ -2367,7 +2365,7 @@ gsk_gpu_node_processor_add_outset_shadow_node (GskGpuNodeProcessor *self, FALSE, &node->bounds, gsk_outset_shadow_node_get_outline (node), - &GRAPHENE_POINT_INIT (dx, dy), + offset, spread, blur_radius, color); diff --git a/gsk/gskrendernodeimpl.c b/gsk/gskrendernodeimpl.c index 80664c35ee..be83658562 100644 --- a/gsk/gskrendernodeimpl.c +++ b/gsk/gskrendernodeimpl.c @@ -2324,8 +2324,7 @@ struct _GskInsetShadowNode GskRoundedRect outline; GdkColor color; - float dx; - float dy; + graphene_point_t offset; float spread; float blur_radius; }; @@ -2650,7 +2649,7 @@ gsk_inset_shadow_node_draw (GskRenderNode *node, cairo_clip (cr); gsk_rounded_rect_init_copy (&box, &self->outline); - gsk_rounded_rect_offset (&box, self->dx, self->dy); + gsk_rounded_rect_offset (&box, self->offset.x, self->offset.y); gsk_rounded_rect_shrink (&box, self->spread, self->spread, self->spread, self->spread); gsk_rounded_rect_init_copy (&clip_box, &self->outline); @@ -2732,8 +2731,7 @@ gsk_inset_shadow_node_diff (GskRenderNode *node1, if (gsk_rounded_rect_equal (&self1->outline, &self2->outline) && gdk_color_equal (&self1->color, &self2->color) && - self1->dx == self2->dx && - self1->dy == self2->dy && + graphene_point_equal (&self1->offset, &self2->offset) && self1->spread == self2->spread && self1->blur_radius == self2->blur_radius) return; @@ -2782,7 +2780,7 @@ gsk_inset_shadow_node_new (const GskRoundedRect *outline, gdk_color_init_from_rgba (&color2, color); node = gsk_inset_shadow_node_new2 (outline, &color2, - dx, dy, + &GRAPHENE_POINT_INIT (dx, dy), spread, blur_radius); gdk_color_finish (&color2); @@ -2793,8 +2791,7 @@ gsk_inset_shadow_node_new (const GskRoundedRect *outline, * gsk_inset_shadow_node_new2: * @outline: outline of the region containing the shadow * @color: color of the shadow - * @dx: horizontal offset of shadow - * @dy: vertical offset of shadow + * @offset: offset of shadow * @spread: how far the shadow spreads towards the inside * @blur_radius: how much blur to apply to the shadow * @@ -2804,18 +2801,18 @@ gsk_inset_shadow_node_new (const GskRoundedRect *outline, * Returns: (transfer full) (type GskInsetShadowNode): A new `GskRenderNode` */ GskRenderNode * -gsk_inset_shadow_node_new2 (const GskRoundedRect *outline, - const GdkColor *color, - float dx, - float dy, - float spread, - float blur_radius) +gsk_inset_shadow_node_new2 (const GskRoundedRect *outline, + const GdkColor *color, + const graphene_point_t *offset, + float spread, + float blur_radius) { GskInsetShadowNode *self; GskRenderNode *node; g_return_val_if_fail (outline != NULL, NULL); g_return_val_if_fail (color != NULL, NULL); + g_return_val_if_fail (offset != NULL, NULL); g_return_val_if_fail (blur_radius >= 0, NULL); self = gsk_render_node_alloc (GSK_INSET_SHADOW_NODE); @@ -2825,8 +2822,7 @@ gsk_inset_shadow_node_new2 (const GskRoundedRect *outline, gsk_rounded_rect_init_copy (&self->outline, outline); gdk_color_init_copy (&self->color, color); - self->dx = dx; - self->dy = dy; + self->offset = *offset; self->spread = spread; self->blur_radius = blur_radius; @@ -2900,7 +2896,7 @@ gsk_inset_shadow_node_get_dx (const GskRenderNode *node) { const GskInsetShadowNode *self = (const GskInsetShadowNode *) node; - return self->dx; + return self->offset.x; } /** @@ -2916,7 +2912,23 @@ gsk_inset_shadow_node_get_dy (const GskRenderNode *node) { const GskInsetShadowNode *self = (const GskInsetShadowNode *) node; - return self->dy; + return self->offset.y; +} + +/** + * gsk_inset_shadow_node_get_offset: + * @node: (type GskInsetShadowNode): a `GskRenderNode` for an inset shadow + * + * Retrieves the offset of the inset shadow. + * + * Returns: an offset, in pixels + **/ +const graphene_point_t * +gsk_inset_shadow_node_get_offset (const GskRenderNode *node) +{ + const GskInsetShadowNode *self = (const GskInsetShadowNode *) node; + + return &self->offset; } /** @@ -2965,8 +2977,7 @@ struct _GskOutsetShadowNode GskRoundedRect outline; GdkColor color; - float dx; - float dy; + graphene_point_t offset; float spread; float blur_radius; }; @@ -2992,10 +3003,10 @@ gsk_outset_shadow_get_extents (GskOutsetShadowNode *self, float clip_radius; clip_radius = gsk_cairo_blur_compute_pixels (ceil (self->blur_radius / 2.0)); - *top = MAX (0, ceil (clip_radius + self->spread - self->dy)); - *right = MAX (0, ceil (clip_radius + self->spread + self->dx)); - *bottom = MAX (0, ceil (clip_radius + self->spread + self->dy)); - *left = MAX (0, ceil (clip_radius + self->spread - self->dx)); + *top = MAX (0, ceil (clip_radius + self->spread - self->offset.y)); + *right = MAX (0, ceil (clip_radius + self->spread + self->offset.x)); + *bottom = MAX (0, ceil (clip_radius + self->spread + self->offset.y)); + *left = MAX (0, ceil (clip_radius + self->spread - self->offset.x)); } static void @@ -3035,7 +3046,7 @@ gsk_outset_shadow_node_draw (GskRenderNode *node, cairo_clip (cr); gsk_rounded_rect_init_copy (&box, &self->outline); - gsk_rounded_rect_offset (&box, self->dx, self->dy); + gsk_rounded_rect_offset (&box, self->offset.x, self->offset.y); gsk_rounded_rect_shrink (&box, -self->spread, -self->spread, -self->spread, -self->spread); if (!needs_blur (blur_radius)) @@ -3116,8 +3127,7 @@ gsk_outset_shadow_node_diff (GskRenderNode *node1, if (gsk_rounded_rect_equal (&self1->outline, &self2->outline) && gdk_color_equal (&self1->color, &self2->color) && - self1->dx == self2->dx && - self1->dy == self2->dy && + graphene_point_equal (&self1->offset, &self2->offset) && self1->spread == self2->spread && self1->blur_radius == self2->blur_radius) return; @@ -3166,7 +3176,8 @@ gsk_outset_shadow_node_new (const GskRoundedRect *outline, gdk_color_init_from_rgba (&color2, color); node = gsk_outset_shadow_node_new2 (outline, &color2, - dx, dy, spread, blur_radius); + &GRAPHENE_POINT_INIT (dx, dy), + spread, blur_radius); gdk_color_finish (&color2); return node; @@ -3176,8 +3187,7 @@ gsk_outset_shadow_node_new (const GskRoundedRect *outline, * gsk_outset_shadow_node_new2: * @outline: outline of the region surrounded by shadow * @color: color of the shadow - * @dx: horizontal offset of shadow - * @dy: vertical offset of shadow + * @offset: offset of shadow * @spread: how far the shadow spreads towards the inside * @blur_radius: how much blur to apply to the shadow * @@ -3187,12 +3197,11 @@ gsk_outset_shadow_node_new (const GskRoundedRect *outline, * Returns: (transfer full) (type GskOutsetShadowNode): A new `GskRenderNode` */ GskRenderNode * -gsk_outset_shadow_node_new2 (const GskRoundedRect *outline, - const GdkColor *color, - float dx, - float dy, - float spread, - float blur_radius) +gsk_outset_shadow_node_new2 (const GskRoundedRect *outline, + const GdkColor *color, + const graphene_point_t *offset, + float spread, + float blur_radius) { GskOutsetShadowNode *self; GskRenderNode *node; @@ -3209,8 +3218,7 @@ gsk_outset_shadow_node_new2 (const GskRoundedRect *outline, gsk_rounded_rect_init_copy (&self->outline, outline); gdk_color_init_copy (&self->color, color); - self->dx = dx; - self->dy = dy; + self->offset = *offset; self->spread = spread; self->blur_radius = blur_radius; @@ -3290,7 +3298,7 @@ gsk_outset_shadow_node_get_dx (const GskRenderNode *node) { const GskOutsetShadowNode *self = (const GskOutsetShadowNode *) node; - return self->dx; + return self->offset.x; } /** @@ -3306,7 +3314,23 @@ gsk_outset_shadow_node_get_dy (const GskRenderNode *node) { const GskOutsetShadowNode *self = (const GskOutsetShadowNode *) node; - return self->dy; + return self->offset.y; +} + +/** + * gsk_outset_shadow_node_get_offset: + * @node: (type GskOutsetShadowNode): a `GskRenderNode` for an outset shadow + * + * Retrieves the offset of the outset shadow. + * + * Returns: an offset, in pixels + **/ +const graphene_point_t * +gsk_outset_shadow_node_get_offset (const GskRenderNode *node) +{ + const GskOutsetShadowNode *self = (const GskOutsetShadowNode *) node; + + return &self->offset; } /** diff --git a/gsk/gskrendernodeparser.c b/gsk/gskrendernodeparser.c index 53fe68dbdc..20b7959619 100644 --- a/gsk/gskrendernodeparser.c +++ b/gsk/gskrendernodeparser.c @@ -1892,7 +1892,7 @@ parse_inset_shadow_node (GtkCssParser *parser, parse_declarations (parser, context, declarations, G_N_ELEMENTS (declarations)); - node = gsk_inset_shadow_node_new2 (&outline, &color, dx, dy, spread, blur); + node = gsk_inset_shadow_node_new2 (&outline, &color, &GRAPHENE_POINT_INIT (dx, dy), spread, blur); gdk_color_finish (&color); @@ -2306,7 +2306,7 @@ parse_outset_shadow_node (GtkCssParser *parser, parse_declarations (parser, context, declarations, G_N_ELEMENTS (declarations)); - node = gsk_outset_shadow_node_new2 (&outline, &color, dx, dy, spread, blur); + node = gsk_outset_shadow_node_new2 (&outline, &color, &GRAPHENE_POINT_INIT (dx, dy), spread, blur); gdk_color_finish (&color); diff --git a/gsk/gskrendernodeprivate.h b/gsk/gskrendernodeprivate.h index 8b914c4cb1..a09becaedf 100644 --- a/gsk/gskrendernodeprivate.h +++ b/gsk/gskrendernodeprivate.h @@ -123,31 +123,31 @@ _gsk_render_node_ref (GskRenderNode *node) return node; } -GskRenderNode * gsk_color_node_new2 (const GdkColor *color, - const graphene_rect_t *bounds); +GskRenderNode * gsk_color_node_new2 (const GdkColor *color, + const graphene_rect_t *bounds); -const GdkColor* gsk_color_node_get_color2 (const GskRenderNode *node); +const GdkColor * gsk_color_node_get_color2 (const GskRenderNode *node); -GskRenderNode * gsk_border_node_new2 (const GskRoundedRect *outline, - const float border_width[4], - const GdkColor border_color[4]); -const GdkColor *gsk_border_node_get_colors2 (const GskRenderNode *node); +GskRenderNode * gsk_border_node_new2 (const GskRoundedRect *outline, + const float border_width[4], + const GdkColor border_color[4]); +const GdkColor * gsk_border_node_get_colors2 (const GskRenderNode *node); -GskRenderNode * gsk_inset_shadow_node_new2 (const GskRoundedRect *outline, - const GdkColor *color, - float dx, - float dy, - float spread, - float blur_radius); -const GdkColor *gsk_inset_shadow_node_get_color2 (const GskRenderNode *node); +GskRenderNode * gsk_inset_shadow_node_new2 (const GskRoundedRect *outline, + const GdkColor *color, + const graphene_point_t *offset, + float spread, + float blur_radius); +const GdkColor * gsk_inset_shadow_node_get_color2 (const GskRenderNode *node); +const graphene_point_t *gsk_inset_shadow_node_get_offset (const GskRenderNode *node); -GskRenderNode * gsk_outset_shadow_node_new2 (const GskRoundedRect *outline, - const GdkColor *color, - float dx, - float dy, - float spread, - float blur_radius); -const GdkColor *gsk_outset_shadow_node_get_color2 (const GskRenderNode *node); +GskRenderNode * gsk_outset_shadow_node_new2 (const GskRoundedRect *outline, + const GdkColor *color, + const graphene_point_t *offset, + float spread, + float blur_radius); +const GdkColor * gsk_outset_shadow_node_get_color2 (const GskRenderNode *node); +const graphene_point_t *gsk_outset_shadow_node_get_offset (const GskRenderNode *node); diff --git a/gtk/gtkcssshadowvalue.c b/gtk/gtkcssshadowvalue.c index e37aa07756..3446d1de14 100644 --- a/gtk/gtkcssshadowvalue.c +++ b/gtk/gtkcssshadowvalue.c @@ -623,7 +623,8 @@ gtk_css_shadow_value_snapshot_outset (const GtkCssValue *value, gtk_snapshot_append_outset_shadow2 (snapshot, border_box, &color, - dx, dy, spread, radius); + &GRAPHENE_POINT_INIT (dx, dy), + spread, radius); gdk_color_finish (&color); } } @@ -719,7 +720,8 @@ gtk_css_shadow_value_snapshot_inset (const GtkCssValue *value, gtk_snapshot_append_inset_shadow2 (snapshot, padding_box, &color, - dx, dy, spread, radius); + &GRAPHENE_POINT_INIT (dx, dy), + spread, radius); } gdk_color_finish (&color); diff --git a/gtk/gtksnapshot.c b/gtk/gtksnapshot.c index 0dcd181779..a9d191e1f2 100644 --- a/gtk/gtksnapshot.c +++ b/gtk/gtksnapshot.c @@ -2887,7 +2887,8 @@ gtk_snapshot_append_inset_shadow (GtkSnapshot *snapshot, gtk_snapshot_append_inset_shadow2 (snapshot, outline, &color2, - dx, dy, spread, blur_radius); + &GRAPHENE_POINT_INIT (dx, dy), + spread, blur_radius); gdk_color_finish (&color2); } @@ -2896,21 +2897,19 @@ gtk_snapshot_append_inset_shadow (GtkSnapshot *snapshot, * @snapshot: a `GtkSnapshot` * @outline: outline of the region surrounded by shadow * @color: color of the shadow - * @dx: horizontal offset of shadow - * @dy: vertical offset of shadow + * @offset: offset of shadow * @spread: how far the shadow spreads towards the inside * @blur_radius: how much blur to apply to the shadow * * Appends an inset shadow into the box given by @outline. */ void -gtk_snapshot_append_inset_shadow2 (GtkSnapshot *snapshot, - const GskRoundedRect *outline, - const GdkColor *color, - float dx, - float dy, - float spread, - float blur_radius) +gtk_snapshot_append_inset_shadow2 (GtkSnapshot *snapshot, + const GskRoundedRect *outline, + const GdkColor *color, + const graphene_point_t *offset, + float spread, + float blur_radius) { GskRenderNode *node; GskRoundedRect real_outline; @@ -2919,14 +2918,15 @@ gtk_snapshot_append_inset_shadow2 (GtkSnapshot *snapshot, g_return_if_fail (snapshot != NULL); g_return_if_fail (outline != NULL); g_return_if_fail (color != NULL); + g_return_if_fail (offset != NULL); gtk_snapshot_ensure_affine (snapshot, &scale_x, &scale_y, &x, &y); gsk_rounded_rect_scale_affine (&real_outline, outline, scale_x, scale_y, x, y); node = gsk_inset_shadow_node_new2 (&real_outline, color, - scale_x * dx, - scale_y * dy, + &GRAPHENE_POINT_INIT (scale_x * offset->x, + scale_y * offset->y), spread, blur_radius); @@ -2960,7 +2960,8 @@ gtk_snapshot_append_outset_shadow (GtkSnapshot *snapshot, gtk_snapshot_append_outset_shadow2 (snapshot, outline, &color2, - dx, dy, spread, blur_radius); + &GRAPHENE_POINT_INIT (dx, dy), + spread, blur_radius); gdk_color_finish (&color2); } @@ -2969,21 +2970,19 @@ gtk_snapshot_append_outset_shadow (GtkSnapshot *snapshot, * @snapshot: a `GtkSnapshot` * @outline: outline of the region surrounded by shadow * @color: color of the shadow - * @dx: horizontal offset of shadow - * @dy: vertical offset of shadow + * @offset: offset of shadow * @spread: how far the shadow spreads towards the outside * @blur_radius: how much blur to apply to the shadow * * Appends an outset shadow node around the box given by @outline. */ void -gtk_snapshot_append_outset_shadow2 (GtkSnapshot *snapshot, - const GskRoundedRect *outline, - const GdkColor *color, - float dx, - float dy, - float spread, - float blur_radius) +gtk_snapshot_append_outset_shadow2 (GtkSnapshot *snapshot, + const GskRoundedRect *outline, + const GdkColor *color, + const graphene_point_t *offset, + float spread, + float blur_radius) { GskRenderNode *node; GskRoundedRect real_outline; @@ -2992,14 +2991,15 @@ gtk_snapshot_append_outset_shadow2 (GtkSnapshot *snapshot, g_return_if_fail (snapshot != NULL); g_return_if_fail (outline != NULL); g_return_if_fail (color != NULL); + g_return_if_fail (offset != NULL); gtk_snapshot_ensure_affine (snapshot, &scale_x, &scale_y, &x, &y); gsk_rounded_rect_scale_affine (&real_outline, outline, scale_x, scale_y, x, y); node = gsk_outset_shadow_node_new2 (&real_outline, color, - scale_x * dx, - scale_y * dy, + &GRAPHENE_POINT_INIT (scale_x * offset->x, + scale_y * offset->y), spread, blur_radius); diff --git a/gtk/gtksnapshotprivate.h b/gtk/gtksnapshotprivate.h index 0e96f61714..f2fb2c1445 100644 --- a/gtk/gtksnapshotprivate.h +++ b/gtk/gtksnapshotprivate.h @@ -45,21 +45,19 @@ void gtk_snapshot_append_border2 (GtkSnapshot const float border_width[4], const GdkColor border_color[4]); -void gtk_snapshot_append_inset_shadow2 (GtkSnapshot *snapshot, - const GskRoundedRect *outline, - const GdkColor *color, - float dx, - float dy, - float spread, - float blur_radius); +void gtk_snapshot_append_inset_shadow2 (GtkSnapshot *snapshot, + const GskRoundedRect *outline, + const GdkColor *color, + const graphene_point_t *offset, + float spread, + float blur_radius); -void gtk_snapshot_append_outset_shadow2 (GtkSnapshot *snapshot, - const GskRoundedRect *outline, - const GdkColor *color, - float dx, - float dy, - float spread, - float blur_radius); +void gtk_snapshot_append_outset_shadow2 (GtkSnapshot *snapshot, + const GskRoundedRect *outline, + const GdkColor *color, + const graphene_point_t *offset, + float spread, + float blur_radius); G_END_DECLS diff --git a/testsuite/gsk/replay-node.c b/testsuite/gsk/replay-node.c index e0a1c7392c..7a4432cc60 100644 --- a/testsuite/gsk/replay-node.c +++ b/testsuite/gsk/replay-node.c @@ -121,13 +121,12 @@ replay_inset_shadow_node (GskRenderNode *node, GtkSnapshot *snapshot) { const GskRoundedRect *outline = gsk_inset_shadow_node_get_outline (node); const GdkColor *color = gsk_inset_shadow_node_get_color2 (node); - float dx = gsk_inset_shadow_node_get_dx (node); - float dy = gsk_inset_shadow_node_get_dy (node); + const graphene_point_t *offset = gsk_inset_shadow_node_get_offset (node); float spread = gsk_inset_shadow_node_get_spread (node); float blur_radius = gsk_inset_shadow_node_get_blur_radius (node); gtk_snapshot_append_inset_shadow2 (snapshot, outline, color, - dx, dy, spread, blur_radius); + offset, spread, blur_radius); } static void @@ -135,13 +134,12 @@ replay_outset_shadow_node (GskRenderNode *node, GtkSnapshot *snapshot) { const GskRoundedRect *outline = gsk_outset_shadow_node_get_outline (node); const GdkColor *color = gsk_outset_shadow_node_get_color2 (node); - float dx = gsk_outset_shadow_node_get_dx (node); - float dy = gsk_outset_shadow_node_get_dy (node); + const graphene_point_t *offset = gsk_outset_shadow_node_get_offset (node); float spread = gsk_outset_shadow_node_get_spread (node); float blur_radius = gsk_outset_shadow_node_get_blur_radius (node); gtk_snapshot_append_outset_shadow2 (snapshot, outline, color, - dx, dy, spread, blur_radius); + offset, spread, blur_radius); } static void