return gtk_css_parser_consume_number (parser, out_double);
}
+static gboolean
+parse_positive_double (GtkCssParser *parser,
+ Context *context,
+ gpointer out_double)
+{
+ if (gtk_css_parser_has_token (parser, GTK_CSS_TOKEN_SIGNED_NUMBER)
+ || gtk_css_parser_has_token (parser, GTK_CSS_TOKEN_SIGNED_INTEGER))
+ {
+ gtk_css_parser_error_syntax (parser, "Expected a positive number");
+ return FALSE;
+ }
+
+ return gtk_css_parser_consume_number (parser, out_double);
+}
+
static gboolean
parse_point (GtkCssParser *parser,
Context *context,
const Declaration declarations[] = {
{ "bounds", parse_rect, NULL, &bounds },
{ "center", parse_point, NULL, ¢er },
- { "hradius", parse_double, NULL, &hradius },
- { "vradius", parse_double, NULL, &vradius },
- { "start", parse_double, NULL, &start },
- { "end", parse_double, NULL, &end },
+ { "hradius", parse_positive_double, NULL, &hradius },
+ { "vradius", parse_positive_double, NULL, &vradius },
+ { "start", parse_positive_double, NULL, &start },
+ { "end", parse_positive_double, NULL, &end },
{ "stops", parse_stops, clear_stops, &stops },
};
GskRenderNode *result;
{ "dx", parse_double, NULL, &dx },
{ "dy", parse_double, NULL, &dy },
{ "spread", parse_double, NULL, &spread },
- { "blur", parse_double, NULL, &blur }
+ { "blur", parse_positive_double, NULL, &blur }
};
parse_declarations (parser, context, declarations, G_N_ELEMENTS (declarations));
{ "dx", parse_double, NULL, &dx },
{ "dy", parse_double, NULL, &dy },
{ "spread", parse_double, NULL, &spread },
- { "blur", parse_double, NULL, &blur }
+ { "blur", parse_positive_double, NULL, &blur }
};
parse_declarations (parser, context, declarations, G_N_ELEMENTS (declarations));
GskRenderNode *child = NULL;
double blur_radius = 1.0;
const Declaration declarations[] = {
- { "blur", parse_double, NULL, &blur_radius },
+ { "blur", parse_positive_double, NULL, &blur_radius },
{ "child", parse_node, clear_node, &child },
};
GskRenderNode *result;