[Theme] Add angle support to linear-gradient.

This commit is contained in:
Dave Davenport 2021-06-14 16:04:15 +02:00 committed by Dave Davenport
parent 3f9bbcff13
commit 89ccfa7b3d
5 changed files with 24 additions and 0 deletions

View File

@ -370,6 +370,9 @@ Format: linear\-gradient(stop color,stop1, color, stop2 color, ...);
.IP \(bu 2
Format: linear\-gradient(to direction, stop color,stop1, color, stop2 color, ...);
where direction is: top,left,right,bottom.
.IP \(bu 2
Format: linear\-gradient(angle, stop color,stop1, color, stop2 color, ...);
Angle in deg,rad,grad (as used in color).
.PP
Where the path is a string, and stop color is of type color.

View File

@ -258,6 +258,8 @@ dynamic: false;
* Format: linear-gradient(stop color,stop1, color, stop2 color, ...);
* Format: linear-gradient(to direction, stop color,stop1, color, stop2 color, ...);
where direction is: top,left,right,bottom.
* Format: linear-gradient(angle, stop color,stop1, color, stop2 color, ...);
Angle in deg,rad,grad (as used in color).
Where the path is a string, and stop color is of type color.

View File

@ -185,6 +185,7 @@ typedef enum
ROFI_DIRECTION_RIGHT,
ROFI_DIRECTION_TOP,
ROFI_DIRECTION_BOTTOM,
ROFI_DIRECTION_ANGLE,
} RofiDirection;
@ -194,6 +195,7 @@ typedef struct
char *url;
RofiDirection dir;
double angle;
/** colors */
GList *colors;

View File

@ -556,6 +556,14 @@ t_property_element
$$->value.image.dir = $4;
$$->value.image.colors = $6;
}
| T_LINEAR_GRADIENT T_PARENT_LEFT t_property_color_value_angle T_COMMA t_color_list T_PARENT_RIGHT {
$$ = rofi_theme_property_create ( P_IMAGE );
$$->value.image.type = ROFI_IMAGE_LINEAR_GRADIENT;
$$->value.image.dir = ROFI_DIRECTION_ANGLE;
$$->value.image.angle = $3;
$$->value.image.colors = $5;
}
;
t_property_direction

View File

@ -1015,6 +1015,15 @@ gboolean rofi_theme_get_image ( const widget *widget, const char *property, cair
case ROFI_DIRECTION_TOP:
pat = cairo_pattern_create_linear (0.0,widget->h, 0.0, 0.0);
break;
case ROFI_DIRECTION_ANGLE:
{
double offsety1 = sin(G_PI*2*p->value.image.angle)*(widget->h/2.0);
double offsetx1 = cos(G_PI*2*p->value.image.angle)*(widget->w/2.0);
pat = cairo_pattern_create_linear (
widget->w/2.0 - offsetx1, widget->h/2.0 - offsety1,
widget->w/2.0 + offsetx1, widget->h/2.0 + offsety1 );
break;
}
};
guint length = g_list_length ( p->value.image.colors );
if ( length > 1 ){