diff --git a/src/st/st-theme-node.c b/src/st/st-theme-node.c index f8998e843..03d1543bf 100644 --- a/src/st/st-theme-node.c +++ b/src/st/st-theme-node.c @@ -1356,6 +1356,10 @@ ensure_background (StThemeNode *node) { node->background_gradient_type = ST_GRADIENT_HORIZONTAL; } + else if (strcmp (term->content.str->stryng->str, "radial") == 0) + { + node->background_gradient_type = ST_GRADIENT_RADIAL; + } else { g_warning ("Unrecognized background-gradient-direction \"%s\"", diff --git a/src/st/st-theme-node.h b/src/st/st-theme-node.h index 31fb08ed5..afb8f0f1d 100644 --- a/src/st/st-theme-node.h +++ b/src/st/st-theme-node.h @@ -61,7 +61,8 @@ typedef enum { typedef enum { ST_GRADIENT_NONE, ST_GRADIENT_VERTICAL, - ST_GRADIENT_HORIZONTAL + ST_GRADIENT_HORIZONTAL, + ST_GRADIENT_RADIAL } StGradientType; GType st_theme_node_get_type (void) G_GNUC_CONST; diff --git a/src/st/st-widget.c b/src/st/st-widget.c index e97d7cfcb..9759b729c 100644 --- a/src/st/st-widget.c +++ b/src/st/st-widget.c @@ -632,8 +632,16 @@ st_widget_redraw_gradient (StWidget *widget) if (priv->bg_gradient_type == ST_GRADIENT_VERTICAL) pattern = cairo_pattern_create_linear (0, 0, 0, height); - else + else if (priv->bg_gradient_type == ST_GRADIENT_HORIZONTAL) pattern = cairo_pattern_create_linear (0, 0, width, 0); + else + { + gdouble cx, cy; + + cx = width / 2.; + cy = height / 2.; + pattern = cairo_pattern_create_radial (cx, cy, 0, cx, cy, MIN (cx, cy)); + } cairo_pattern_add_color_stop_rgba (pattern, 0, start->red / 255.,