GtkCssValue * gtk_css_win32_size_value_parse (GtkCssParser *parser, GtkCssNumberParseFlags flags) { GtkWin32Theme *theme; GtkCssValue *result; guint type; for (type = 0; type < G_N_ELEMENTS(css_value_names); type++) { if (_gtk_css_parser_try (parser, css_value_names[type], TRUE)) break; } if (type >= G_N_ELEMENTS(css_value_names)) { _gtk_css_parser_error (parser, "Not a win32 size value"); return NULL; } theme = gtk_win32_theme_parse (parser); if (theme == NULL) return NULL; result = gtk_css_win32_size_value_new (1.0, theme, type); gtk_win32_theme_unref (theme); if (! _gtk_css_parser_try (parser, ",", TRUE)) { _gtk_css_value_unref (result); _gtk_css_parser_error (parser, "Expected ','"); return NULL; } switch (result->type) { case GTK_WIN32_SIZE: result = gtk_css_win32_size_value_parse_size (result, parser); break; case GTK_WIN32_PART_WIDTH: case GTK_WIN32_PART_HEIGHT: case GTK_WIN32_PART_BORDER_TOP: case GTK_WIN32_PART_BORDER_RIGHT: case GTK_WIN32_PART_BORDER_BOTTOM: case GTK_WIN32_PART_BORDER_LEFT: result = gtk_css_win32_size_value_parse_part_size (result, parser); break; default: g_assert_not_reached (); _gtk_css_value_unref (result); result = NULL; break; } if (result == NULL) return NULL; if (!_gtk_css_parser_try (parser, ")", TRUE)) { _gtk_css_value_unref (result); _gtk_css_parser_error (parser, "Expected ')'"); return NULL; } return result; }
static gboolean gtk_css_image_win32_parse (GtkCssImage *image, GtkCssParser *parser) { GtkCssImageWin32 *wimage = GTK_CSS_IMAGE_WIN32 (image); if (!_gtk_css_parser_try (parser, "-gtk-win32-theme-part", TRUE)) { _gtk_css_parser_error (parser, "'-gtk-win32-theme-part'"); return FALSE; } if (!_gtk_css_parser_try (parser, "(", TRUE)) { _gtk_css_parser_error (parser, "Expected '(' after '-gtk-win32-theme-part'"); return FALSE; } wimage->theme = gtk_win32_theme_parse (parser); if (wimage->theme == NULL) return FALSE; if (! _gtk_css_parser_try (parser, ",", TRUE)) { _gtk_css_parser_error (parser, "Expected ','"); return FALSE; } if (!_gtk_css_parser_try_int (parser, &wimage->part)) { _gtk_css_parser_error (parser, "Expected a valid integer value"); return FALSE; } if (! _gtk_css_parser_try (parser, ",", TRUE)) { _gtk_css_parser_error (parser, "Expected ','"); return FALSE; } if (!_gtk_css_parser_try_int (parser, &wimage->state)) { _gtk_css_parser_error (parser, "Expected a valid integer value"); return FALSE; } while ( _gtk_css_parser_try (parser, ",", TRUE)) { if ( _gtk_css_parser_try (parser, "over", TRUE)) { if (!_gtk_css_parser_try (parser, "(", TRUE)) { _gtk_css_parser_error (parser, "Expected '(' after 'over'"); return FALSE; } if (!_gtk_css_parser_try_int (parser, &wimage->part2)) { _gtk_css_parser_error (parser, "Expected a valid integer value"); return FALSE; } if (! _gtk_css_parser_try (parser, ",", TRUE)) { _gtk_css_parser_error (parser, "Expected ','"); return FALSE; } if (!_gtk_css_parser_try_int (parser, &wimage->state2)) { _gtk_css_parser_error (parser, "Expected a valid integer value"); return FALSE; } if ( _gtk_css_parser_try (parser, ",", TRUE)) { if (!_gtk_css_parser_try_double (parser, &wimage->over_alpha)) { _gtk_css_parser_error (parser, "Expected a valid double value"); return FALSE; } } if (!_gtk_css_parser_try (parser, ")", TRUE)) { _gtk_css_parser_error (parser, "Expected ')' at end of 'over'"); return FALSE; } } else if ( _gtk_css_parser_try (parser, "margins", TRUE)) { guint i; if (!_gtk_css_parser_try (parser, "(", TRUE)) { _gtk_css_parser_error (parser, "Expected '(' after 'margins'"); return FALSE; } for (i = 0; i < 4; i++) { if (!_gtk_css_parser_try_int (parser, &wimage->margins[i])) break; } if (i == 0) { _gtk_css_parser_error (parser, "Expected valid margins"); return FALSE; } if (i == 1) wimage->margins[1] = wimage->margins[0]; if (i <= 2) wimage->margins[2] = wimage->margins[1]; if (i <= 3) wimage->margins[3] = wimage->margins[2]; if (!_gtk_css_parser_try (parser, ")", TRUE)) { _gtk_css_parser_error (parser, "Expected ')' at end of 'margins'"); return FALSE; } } else { _gtk_css_parser_error (parser, "Expected identifier"); return FALSE; } } if (!_gtk_css_parser_try (parser, ")", TRUE)) { _gtk_css_parser_error (parser, "Expected ')'"); return FALSE; } return TRUE; }