dom_element *svg;
dom_string *svg_name;
lwc_string *svg_name_lwc;
- struct svgtiny_parse_state state;
+ struct svgtiny_parse_state state = {
+ /* Initialize the unit context here because it has a
+ * const member and doing it any other way subverts
+ * the type system. The magic numbers below were taken
+ * from the libcss example program without much
+ * thought, because at the moment we don't support any
+ * properties with units. */
+ .unit_ctx = {
+ .font_size_default = FLTTOFIX(16.0),
+ .font_size_minimum = FLTTOFIX(6.0),
+ .device_dpi = FLTTOFIX(96.0),
+ .root_style = NULL,
+ .pw = NULL,
+ .measure = NULL,
+ }
+ };
float x, y, width, height;
svgtiny_code code;
return svgtiny_LIBCSS_ERROR;
}
+ /* ...and the unit context, whose other fields were
+ * initialized along with the parser state itself */
+ state.unit_ctx.viewport_width = FLTTOFIX(viewport_width);
+ state.unit_ctx.viewport_height = FLTTOFIX(viewport_height);
+
#define SVGTINY_STRING_ACTION2(s,n) \
if (dom_string_create_interned((const uint8_t *) #n, \
strlen(#n), &state.interned_##s) \
static struct css_select_handler svgtiny_select_handler;
+/* Every call to svgtiny_select_style() needs this, so let's only make
+ * one copy. */
+static const css_media media_all = {
+ .type = CSS_MEDIA_ALL,
+};
+
/**
* Convenient wrapper around css_select_style()
*
const css_stylesheet *inline_sheet,
css_select_results **result)
{
- const css_media media_all = {
- .type = CSS_MEDIA_ALL,
- };
-
- /* These magic numbers below were taken from the libcss
- * example program without much thought, because at the moment
- * we don't support any properties with units. */
- const css_unit_ctx unitctx = {
- .viewport_width = FLTTOFIX(state->viewport_width),
- .viewport_height = FLTTOFIX(state->viewport_height),
- .font_size_default = FLTTOFIX(16.0),
- .font_size_minimum = FLTTOFIX(6.0),
- .device_dpi = FLTTOFIX(96.0),
- .root_style = NULL,
- .pw = NULL,
- .measure = NULL,
- };
-
return css_select_style(state->select_ctx,
node,
- &unitctx,
+ &state->unit_ctx,
&media_all,
inline_sheet,
&svgtiny_select_handler,
* precede it. */
css_select_ctx *select_ctx;
+ /* A libcss unit context. This is used to compute and compose
+ * styles, and is convenient to create once and pass along
+ * with the rest of the state. */
+ css_unit_ctx unit_ctx;
+
/* Keep track of the parent element's computed style so that
* we can compose its children's computed styles with it. */
css_computed_style *parent_style;