/** * gtk_symbolic_color_resolve: * @color: a #GtkSymbolicColor * @props: (allow-none): #GtkStyleProperties to use when resolving * named colors, or %NULL * @resolved_color: (out): return location for the resolved color * * If @color is resolvable, @resolved_color will be filled in * with the resolved color, and %TRUE will be returned. Generally, * if @color can't be resolved, it is due to it being defined on * top of a named color that doesn't exist in @props. * * When @props is %NULL, resolving of named colors will fail, so if * your @color is or references such a color, this function will * return %FALSE. * * Returns: %TRUE if the color has been resolved * * Since: 3.0 * * Deprecated: 3.8: #GtkSymbolicColor is deprecated. **/ gboolean gtk_symbolic_color_resolve (GtkSymbolicColor *color, GtkStyleProperties *props, GdkRGBA *resolved_color) { GdkRGBA pink = { 1.0, 0.5, 0.5, 1.0 }; GtkCssValue *v, *current; g_return_val_if_fail (color != NULL, FALSE); g_return_val_if_fail (resolved_color != NULL, FALSE); g_return_val_if_fail (props == NULL || GTK_IS_STYLE_PROPERTIES (props), FALSE); current = _gtk_css_rgba_value_new_from_rgba (&pink); v = _gtk_css_color_value_resolve (color->value, GTK_STYLE_PROVIDER_PRIVATE (props), current, 0, NULL); _gtk_css_value_unref (current); if (v == NULL) return FALSE; *resolved_color = *_gtk_css_rgba_value_get_rgba (v); _gtk_css_value_unref (v); return TRUE; }
/** * _gtk_style_property_assign: * @property: the property * @props: The properties to assign to * @state: The state to assign * @value: (out): the #GValue with the value to be * assigned * * This function is called by gtk_style_properties_set() and in * turn gtk_style_context_set() and similar functions to set the * value from code using old APIs. **/ void _gtk_style_property_assign (GtkStyleProperty *property, GtkStyleProperties *props, GtkStateFlags state, const GValue *value) { GtkStylePropertyClass *klass; g_return_if_fail (GTK_IS_STYLE_PROPERTY (property)); g_return_if_fail (GTK_IS_STYLE_PROPERTIES (props)); g_return_if_fail (value != NULL); klass = GTK_STYLE_PROPERTY_GET_CLASS (property); klass->assign (property, props, state, value); }
/** * gtk_gradient_resolve: * @gradient: a #GtkGradient * @props: #GtkStyleProperties to use when resolving named colors * @resolved_gradient: (out): return location for the resolved pattern * * If @gradient is resolvable, @resolved_gradient will be filled in * with the resolved gradient as a cairo_pattern_t, and %TRUE will * be returned. Generally, if @gradient can't be resolved, it is * due to it being defined on top of a named color that doesn't * exist in @props. * * Returns: %TRUE if the gradient has been resolved * * Since: 3.0 * * Deprecated: 3.8: #GtkGradient is deprecated. **/ gboolean gtk_gradient_resolve (GtkGradient *gradient, GtkStyleProperties *props, cairo_pattern_t **resolved_gradient) { cairo_pattern_t *pattern; guint i; g_return_val_if_fail (gradient != NULL, FALSE); g_return_val_if_fail (GTK_IS_STYLE_PROPERTIES (props), FALSE); g_return_val_if_fail (resolved_gradient != NULL, FALSE); if (gradient->radius0 == 0 && gradient->radius1 == 0) pattern = cairo_pattern_create_linear (gradient->x0, gradient->y0, gradient->x1, gradient->y1); else pattern = cairo_pattern_create_radial (gradient->x0, gradient->y0, gradient->radius0, gradient->x1, gradient->y1, gradient->radius1); for (i = 0; i < gradient->stops->len; i++) { ColorStop *stop; GdkRGBA color; stop = &g_array_index (gradient->stops, ColorStop, i); if (!gtk_symbolic_color_resolve (stop->color, props, &color)) { cairo_pattern_destroy (pattern); return FALSE; } cairo_pattern_add_color_stop_rgba (pattern, stop->offset, color.red, color.green, color.blue, color.alpha); } *resolved_gradient = pattern; return TRUE; }