diff --git a/gsk/gpu/gskgpuconicgradientop.c b/gsk/gpu/gskgpuconicgradientop.c index cb52736c52..3232047e21 100644 --- a/gsk/gpu/gskgpuconicgradientop.c +++ b/gsk/gpu/gskgpuconicgradientop.c @@ -60,7 +60,7 @@ gsk_gpu_conic_gradient_op (GskGpuFrame *frame, const graphene_rect_t *rect, const graphene_point_t *center, float angle, - const GskColorStop *stops, + const GskColorStop2 *stops, gsize n_stops) { GskGpuConicgradientInstance *instance; @@ -83,18 +83,18 @@ gsk_gpu_conic_gradient_op (GskGpuFrame *frame, gsk_gpu_rect_to_float (rect, offset, instance->rect); gsk_gpu_point_to_float (center, offset, instance->center); instance->angle = angle; - gsk_gpu_rgba_to_float (&stops[MIN (n_stops - 1, 6)].color, ics, opacity, instance->color6); + gsk_gpu_color_to_float (&stops[MIN (n_stops - 1, 6)].color, ics, opacity, instance->color6); instance->offsets1[2] = stops[MIN (n_stops - 1, 6)].offset; - gsk_gpu_rgba_to_float (&stops[MIN (n_stops - 1, 5)].color, ics, opacity, instance->color5); + gsk_gpu_color_to_float (&stops[MIN (n_stops - 1, 5)].color, ics, opacity, instance->color5); instance->offsets1[1] = stops[MIN (n_stops - 1, 5)].offset; - gsk_gpu_rgba_to_float (&stops[MIN (n_stops - 1, 4)].color, ics, opacity, instance->color4); + gsk_gpu_color_to_float (&stops[MIN (n_stops - 1, 4)].color, ics, opacity, instance->color4); instance->offsets1[0] = stops[MIN (n_stops - 1, 4)].offset; - gsk_gpu_rgba_to_float (&stops[MIN (n_stops - 1, 3)].color, ics, opacity, instance->color3); + gsk_gpu_color_to_float (&stops[MIN (n_stops - 1, 3)].color, ics, opacity, instance->color3); instance->offsets0[3] = stops[MIN (n_stops - 1, 3)].offset; - gsk_gpu_rgba_to_float (&stops[MIN (n_stops - 1, 2)].color, ics, opacity, instance->color2); + gsk_gpu_color_to_float (&stops[MIN (n_stops - 1, 2)].color, ics, opacity, instance->color2); instance->offsets0[2] = stops[MIN (n_stops - 1, 2)].offset; - gsk_gpu_rgba_to_float (&stops[1].color, ics, opacity, instance->color1); + gsk_gpu_color_to_float (&stops[1].color, ics, opacity, instance->color1); instance->offsets0[1] = stops[1].offset; - gsk_gpu_rgba_to_float (&stops[0].color, ics, opacity, instance->color0); + gsk_gpu_color_to_float (&stops[0].color, ics, opacity, instance->color0); instance->offsets0[0] = stops[0].offset; } diff --git a/gsk/gpu/gskgpuconicgradientopprivate.h b/gsk/gpu/gskgpuconicgradientopprivate.h index 275a0a1e50..4e00272cc5 100644 --- a/gsk/gpu/gskgpuconicgradientopprivate.h +++ b/gsk/gpu/gskgpuconicgradientopprivate.h @@ -18,7 +18,7 @@ void gsk_gpu_conic_gradient_op (GskGpuF const graphene_rect_t *rect, const graphene_point_t *center, float angle, - const GskColorStop *stops, + const GskColorStop2 *stops, gsize n_stops); diff --git a/gsk/gpu/gskgpulineargradientop.c b/gsk/gpu/gskgpulineargradientop.c index 819259e853..8b4668e50a 100644 --- a/gsk/gpu/gskgpulineargradientop.c +++ b/gsk/gpu/gskgpulineargradientop.c @@ -64,7 +64,7 @@ gsk_gpu_linear_gradient_op (GskGpuFrame *frame, const graphene_rect_t *rect, const graphene_point_t *start, const graphene_point_t *end, - const GskColorStop *stops, + const GskColorStop2 *stops, gsize n_stops) { GskGpuLineargradientInstance *instance; @@ -88,18 +88,18 @@ gsk_gpu_linear_gradient_op (GskGpuFrame *frame, gsk_gpu_rect_to_float (rect, offset, instance->rect); gsk_gpu_point_to_float (start, offset, instance->startend); gsk_gpu_point_to_float (end, offset, &instance->startend[2]); - gsk_gpu_rgba_to_float (&stops[MIN (n_stops - 1, 6)].color, ics, opacity, instance->color6); + gsk_gpu_color_to_float (&stops[MIN (n_stops - 1, 6)].color, ics, opacity, instance->color6); instance->offsets1[2] = stops[MIN (n_stops - 1, 6)].offset; - gsk_gpu_rgba_to_float (&stops[MIN (n_stops - 1, 5)].color, ics, opacity, instance->color5); + gsk_gpu_color_to_float (&stops[MIN (n_stops - 1, 5)].color, ics, opacity, instance->color5); instance->offsets1[1] = stops[MIN (n_stops - 1, 5)].offset; - gsk_gpu_rgba_to_float (&stops[MIN (n_stops - 1, 4)].color, ics, opacity, instance->color4); + gsk_gpu_color_to_float (&stops[MIN (n_stops - 1, 4)].color, ics, opacity, instance->color4); instance->offsets1[0] = stops[MIN (n_stops - 1, 4)].offset; - gsk_gpu_rgba_to_float (&stops[MIN (n_stops - 1, 3)].color, ics, opacity, instance->color3); + gsk_gpu_color_to_float (&stops[MIN (n_stops - 1, 3)].color, ics, opacity, instance->color3); instance->offsets0[3] = stops[MIN (n_stops - 1, 3)].offset; - gsk_gpu_rgba_to_float (&stops[MIN (n_stops - 1, 2)].color, ics, opacity, instance->color2); + gsk_gpu_color_to_float (&stops[MIN (n_stops - 1, 2)].color, ics, opacity, instance->color2); instance->offsets0[2] = stops[MIN (n_stops - 1, 2)].offset; - gsk_gpu_rgba_to_float (&stops[1].color, ics, opacity, instance->color1); + gsk_gpu_color_to_float (&stops[1].color, ics, opacity, instance->color1); instance->offsets0[1] = stops[1].offset; - gsk_gpu_rgba_to_float (&stops[0].color, ics, opacity, instance->color0); + gsk_gpu_color_to_float (&stops[0].color, ics, opacity, instance->color0); instance->offsets0[0] = stops[0].offset; } diff --git a/gsk/gpu/gskgpulineargradientopprivate.h b/gsk/gpu/gskgpulineargradientopprivate.h index 2485b2d3e5..ee1c0a4872 100644 --- a/gsk/gpu/gskgpulineargradientopprivate.h +++ b/gsk/gpu/gskgpulineargradientopprivate.h @@ -19,7 +19,7 @@ void gsk_gpu_linear_gradient_op (GskGpuF const graphene_rect_t *rect, const graphene_point_t *start, const graphene_point_t *end, - const GskColorStop *stops, + const GskColorStop2 *stops, gsize n_stops); diff --git a/gsk/gpu/gskgpunodeprocessor.c b/gsk/gpu/gskgpunodeprocessor.c index 5ec3eda777..80bc0f2d69 100644 --- a/gsk/gpu/gskgpunodeprocessor.c +++ b/gsk/gpu/gskgpunodeprocessor.c @@ -2465,17 +2465,17 @@ gsk_gpu_node_processor_add_outset_shadow_node (GskGpuNodeProcessor *self, typedef void (* GradientOpFunc) (GskGpuNodeProcessor *self, GskRenderNode *node, - const GskColorStop *stops, + const GskColorStop2 *stops, gsize n_stops); static void gsk_gpu_node_processor_add_gradient_node (GskGpuNodeProcessor *self, GskRenderNode *node, - const GskColorStop *stops, + const GskColorStop2 *stops, gsize n_stops, GradientOpFunc func) { - GskColorStop real_stops[7]; + GskColorStop2 real_stops[7]; GskGpuNodeProcessor other; graphene_rect_t bounds; gsize i, j; @@ -2483,18 +2483,7 @@ gsk_gpu_node_processor_add_gradient_node (GskGpuNodeProcessor *self, if (n_stops < 8) { - if (self->opacity < 1.0) - { - for (i = 0; i < n_stops; i++) - { - real_stops[i].offset = stops[i].offset; - real_stops[i].color = stops[i].color; - } - stops = real_stops; - } - func (self, node, stops, n_stops); - return; } @@ -2513,38 +2502,40 @@ gsk_gpu_node_processor_add_gradient_node (GskGpuNodeProcessor *self, other.blend = GSK_GPU_BLEND_ADD; other.pending_globals |= GSK_GPU_GLOBAL_BLEND; gsk_gpu_node_processor_sync_globals (&other, 0); - + for (i = 0; i < n_stops; /* happens inside the loop */) { if (i == 0) { real_stops[0].offset = stops[i].offset; - real_stops[0].color = stops[i].color; + gdk_color_init_copy (&real_stops[i].color, &stops[i].color); i++; } else { real_stops[0].offset = stops[i-1].offset; - real_stops[0].color = GDK_RGBA_INIT_ALPHA (&stops[i-1].color, 0); + gdk_color_init_copy (&real_stops[0].color, &stops[i - 1].color); + real_stops[0].color.alpha *= 0; } for (j = 1; j < 6 && i < n_stops; j++) { real_stops[j].offset = stops[i].offset; - real_stops[j].color = stops[i].color; + gdk_color_init_copy (&real_stops[j].color, &stops[i].color); i++; } if (i == n_stops - 1) { g_assert (j == 6); real_stops[j].offset = stops[i].offset; - real_stops[j].color = stops[i].color; + gdk_color_init_copy (&real_stops[j].color, &stops[i].color); j++; i++; } else if (i < n_stops) { real_stops[j].offset = stops[i].offset; - real_stops[j].color = GDK_RGBA_INIT_ALPHA (&stops[i].color, 0); + gdk_color_init_copy (&real_stops[j].color, &stops[i].color); + real_stops[j].color.alpha *= 0; j++; } @@ -2569,7 +2560,7 @@ gsk_gpu_node_processor_add_gradient_node (GskGpuNodeProcessor *self, static void gsk_gpu_node_processor_linear_gradient_op (GskGpuNodeProcessor *self, GskRenderNode *node, - const GskColorStop *stops, + const GskColorStop2 *stops, gsize n_stops) { gsk_gpu_linear_gradient_op (self->frame, @@ -2577,8 +2568,8 @@ gsk_gpu_node_processor_linear_gradient_op (GskGpuNodeProcessor *self, self->ccs, self->opacity, &self->offset, - GDK_COLOR_STATE_SRGB, - GSK_HUE_INTERPOLATION_SHORTER, + gsk_linear_gradient_node_get_interpolation_color_state (node), + gsk_linear_gradient_node_get_hue_interpolation (node), GSK_RENDER_NODE_TYPE (node) == GSK_REPEATING_LINEAR_GRADIENT_NODE, &node->bounds, gsk_linear_gradient_node_get_start (node), @@ -2593,7 +2584,7 @@ gsk_gpu_node_processor_add_linear_gradient_node (GskGpuNodeProcessor *self, { gsk_gpu_node_processor_add_gradient_node (self, node, - gsk_linear_gradient_node_get_color_stops (node, NULL), + gsk_linear_gradient_node_get_color_stops2 (node), gsk_linear_gradient_node_get_n_color_stops (node), gsk_gpu_node_processor_linear_gradient_op); } @@ -2601,7 +2592,7 @@ gsk_gpu_node_processor_add_linear_gradient_node (GskGpuNodeProcessor *self, static void gsk_gpu_node_processor_radial_gradient_op (GskGpuNodeProcessor *self, GskRenderNode *node, - const GskColorStop *stops, + const GskColorStop2 *stops, gsize n_stops) { gsk_gpu_radial_gradient_op (self->frame, @@ -2609,8 +2600,8 @@ gsk_gpu_node_processor_radial_gradient_op (GskGpuNodeProcessor *self, self->ccs, self->opacity, &self->offset, - GDK_COLOR_STATE_SRGB, - GSK_HUE_INTERPOLATION_SHORTER, + gsk_radial_gradient_node_get_interpolation_color_state (node), + gsk_radial_gradient_node_get_hue_interpolation (node), GSK_RENDER_NODE_TYPE (node) == GSK_REPEATING_RADIAL_GRADIENT_NODE, &node->bounds, gsk_radial_gradient_node_get_center (node), @@ -2630,7 +2621,7 @@ gsk_gpu_node_processor_add_radial_gradient_node (GskGpuNodeProcessor *self, { gsk_gpu_node_processor_add_gradient_node (self, node, - gsk_radial_gradient_node_get_color_stops (node, NULL), + gsk_radial_gradient_node_get_color_stops2 (node), gsk_radial_gradient_node_get_n_color_stops (node), gsk_gpu_node_processor_radial_gradient_op); } @@ -2638,7 +2629,7 @@ gsk_gpu_node_processor_add_radial_gradient_node (GskGpuNodeProcessor *self, static void gsk_gpu_node_processor_conic_gradient_op (GskGpuNodeProcessor *self, GskRenderNode *node, - const GskColorStop *stops, + const GskColorStop2 *stops, gsize n_stops) { gsk_gpu_conic_gradient_op (self->frame, @@ -2646,8 +2637,8 @@ gsk_gpu_node_processor_conic_gradient_op (GskGpuNodeProcessor *self, self->ccs, self->opacity, &self->offset, - GDK_COLOR_STATE_SRGB, - GSK_HUE_INTERPOLATION_SHORTER, + gsk_conic_gradient_node_get_interpolation_color_state (node), + gsk_conic_gradient_node_get_hue_interpolation (node), &node->bounds, gsk_conic_gradient_node_get_center (node), gsk_conic_gradient_node_get_angle (node), @@ -2661,7 +2652,7 @@ gsk_gpu_node_processor_add_conic_gradient_node (GskGpuNodeProcessor *self, { gsk_gpu_node_processor_add_gradient_node (self, node, - gsk_conic_gradient_node_get_color_stops (node, NULL), + gsk_conic_gradient_node_get_color_stops2 (node), gsk_conic_gradient_node_get_n_color_stops (node), gsk_gpu_node_processor_conic_gradient_op); } diff --git a/gsk/gpu/gskgpuradialgradientop.c b/gsk/gpu/gskgpuradialgradientop.c index 3b1972dcd8..5015f2886a 100644 --- a/gsk/gpu/gskgpuradialgradientop.c +++ b/gsk/gpu/gskgpuradialgradientop.c @@ -66,7 +66,7 @@ gsk_gpu_radial_gradient_op (GskGpuFrame *frame, const graphene_point_t *radius, float start, float end, - const GskColorStop *stops, + const GskColorStop2 *stops, gsize n_stops) { GskGpuRadialgradientInstance *instance; @@ -92,18 +92,18 @@ gsk_gpu_radial_gradient_op (GskGpuFrame *frame, gsk_gpu_point_to_float (radius, graphene_point_zero(), &instance->center_radius[2]); instance->startend[0] = start; instance->startend[1] = end; - gsk_gpu_rgba_to_float (&stops[MIN (n_stops - 1, 6)].color, ics, opacity, instance->color6); + gsk_gpu_color_to_float (&stops[MIN (n_stops - 1, 6)].color, ics, opacity, instance->color6); instance->offsets1[2] = stops[MIN (n_stops - 1, 6)].offset; - gsk_gpu_rgba_to_float (&stops[MIN (n_stops - 1, 5)].color, ics, opacity, instance->color5); + gsk_gpu_color_to_float (&stops[MIN (n_stops - 1, 5)].color, ics, opacity, instance->color5); instance->offsets1[1] = stops[MIN (n_stops - 1, 5)].offset; - gsk_gpu_rgba_to_float (&stops[MIN (n_stops - 1, 4)].color, ics, opacity, instance->color4); + gsk_gpu_color_to_float (&stops[MIN (n_stops - 1, 4)].color, ics, opacity, instance->color4); instance->offsets1[0] = stops[MIN (n_stops - 1, 4)].offset; - gsk_gpu_rgba_to_float (&stops[MIN (n_stops - 1, 3)].color, ics, opacity, instance->color3); + gsk_gpu_color_to_float (&stops[MIN (n_stops - 1, 3)].color, ics, opacity, instance->color3); instance->offsets0[3] = stops[MIN (n_stops - 1, 3)].offset; - gsk_gpu_rgba_to_float (&stops[MIN (n_stops - 1, 2)].color, ics, opacity, instance->color2); + gsk_gpu_color_to_float (&stops[MIN (n_stops - 1, 2)].color, ics, opacity, instance->color2); instance->offsets0[2] = stops[MIN (n_stops - 1, 2)].offset; - gsk_gpu_rgba_to_float (&stops[1].color, ics, opacity, instance->color1); + gsk_gpu_color_to_float (&stops[1].color, ics, opacity, instance->color1); instance->offsets0[1] = stops[1].offset; - gsk_gpu_rgba_to_float (&stops[0].color, ics, opacity, instance->color0); + gsk_gpu_color_to_float (&stops[0].color, ics, opacity, instance->color0); instance->offsets0[0] = stops[0].offset; } diff --git a/gsk/gpu/gskgpuradialgradientopprivate.h b/gsk/gpu/gskgpuradialgradientopprivate.h index 8a2c216a6e..a1ac46d779 100644 --- a/gsk/gpu/gskgpuradialgradientopprivate.h +++ b/gsk/gpu/gskgpuradialgradientopprivate.h @@ -21,7 +21,7 @@ void gsk_gpu_radial_gradient_op (GskGpuF const graphene_point_t *radius, float start, float end, - const GskColorStop *stops, + const GskColorStop2 *stops, gsize n_stops); diff --git a/gsk/gpu/gskgpushaderopprivate.h b/gsk/gpu/gskgpushaderopprivate.h index 73c4621d1a..b560c6c963 100644 --- a/gsk/gpu/gskgpushaderopprivate.h +++ b/gsk/gpu/gskgpushaderopprivate.h @@ -113,18 +113,4 @@ gsk_gpu_color_to_float (const GdkColor *color, values[3] *= opacity; } -static inline void -gsk_gpu_rgba_to_float (const GdkRGBA *rgba, - GdkColorState *target, - float opacity, - float values[4]) -{ - GdkColor color; - - gdk_color_init_from_rgba (&color, rgba); - gdk_color_to_float (&color, target, values); - values[3] *= opacity; - gdk_color_finish (&color); -} - G_END_DECLS