diff --git a/gtk/gtkcssstyle.c b/gtk/gtkcssstyle.c index f7b626357d..cd5d4d7cfe 100644 --- a/gtk/gtkcssstyle.c +++ b/gtk/gtkcssstyle.c @@ -841,7 +841,8 @@ static const int values_size[] = { sizeof (GtkCssAnimationValues), sizeof (GtkCssTransitionValues), sizeof (GtkCssSizeValues), - sizeof (GtkCssOtherValues) + sizeof (GtkCssOtherValues), + sizeof (GtkCssUsedValues) }; #define TYPE_INDEX(type) ((type) - ((type) % 2)) diff --git a/gtk/gtkcssstyleprivate.h b/gtk/gtkcssstyleprivate.h index 32076e1b88..8b2048ef8d 100644 --- a/gtk/gtkcssstyleprivate.h +++ b/gtk/gtkcssstyleprivate.h @@ -59,6 +59,7 @@ typedef enum { GTK_CSS_SIZE_INITIAL_VALUES, GTK_CSS_OTHER_VALUES, GTK_CSS_OTHER_INITIAL_VALUES, + GTK_CSS_USED_VALUES, } GtkCssValuesType; typedef struct _GtkCssValues GtkCssValues; @@ -73,6 +74,7 @@ typedef struct _GtkCssAnimationValues GtkCssAnimationValues; typedef struct _GtkCssTransitionValues GtkCssTransitionValues; typedef struct _GtkCssSizeValues GtkCssSizeValues; typedef struct _GtkCssOtherValues GtkCssOtherValues; +typedef struct _GtkCssUsedValues GtkCssUsedValues; struct _GtkCssValues { int ref_count; @@ -227,6 +229,28 @@ struct _GtkCssOtherValues { GtkCssValue *filter; }; +struct _GtkCssUsedValues { + GtkCssValues base; + + GtkCssValue *color; + GtkCssValue *icon_palette; + GtkCssValue *background_color; + GtkCssValue *box_shadow; + GtkCssValue *background_image; + GtkCssValue *border_top_color; + GtkCssValue *border_right_color; + GtkCssValue *border_bottom_color; + GtkCssValue *border_left_color; + GtkCssValue *border_image_source; + GtkCssValue *icon_shadow; + GtkCssValue *outline_color; + GtkCssValue *caret_color; + GtkCssValue *secondary_caret_color; + GtkCssValue *text_shadow; + GtkCssValue *text_decoration_color; + GtkCssValue *icon_source; +}; + /* typedef struct _GtkCssStyle GtkCssStyle; */ typedef struct _GtkCssStyleClass GtkCssStyleClass; @@ -245,6 +269,8 @@ struct _GtkCssStyle GtkCssTransitionValues *transition; GtkCssSizeValues *size; GtkCssOtherValues *other; + GtkCssUsedValues *used; + GtkCssVariableSet *variables; GtkCssValue *variable_values; diff --git a/gtk/gtkcssvaluesprivate.h b/gtk/gtkcssvaluesprivate.h index e212ee0b84..d5f7494d87 100644 --- a/gtk/gtkcssvaluesprivate.h +++ b/gtk/gtkcssvaluesprivate.h @@ -148,4 +148,65 @@ static const int other_props[] = { GTK_CSS_PROPERTY_FILTER, }; +static const int used_props[] = { + GTK_CSS_PROPERTY_COLOR, + GTK_CSS_PROPERTY_ICON_PALETTE, + GTK_CSS_PROPERTY_BACKGROUND_COLOR, + GTK_CSS_PROPERTY_BOX_SHADOW, + GTK_CSS_PROPERTY_BACKGROUND_IMAGE, + GTK_CSS_PROPERTY_BORDER_TOP_COLOR, + GTK_CSS_PROPERTY_BORDER_RIGHT_COLOR, + GTK_CSS_PROPERTY_BORDER_BOTTOM_COLOR, + GTK_CSS_PROPERTY_BORDER_LEFT_COLOR, + GTK_CSS_PROPERTY_BORDER_IMAGE_SOURCE, + GTK_CSS_PROPERTY_ICON_SHADOW, + GTK_CSS_PROPERTY_OUTLINE_COLOR, + GTK_CSS_PROPERTY_CARET_COLOR, + GTK_CSS_PROPERTY_SECONDARY_CARET_COLOR, + GTK_CSS_PROPERTY_TEXT_SHADOW, + GTK_CSS_PROPERTY_TEXT_DECORATION_COLOR, + GTK_CSS_PROPERTY_ICON_SOURCE, +}; + +/* Maps back from css property ids to position in used_props. + * -1 means 'not present'. + */ +static const int used_props_map[] = { + 0, /* color */ + -1, -1, + 1, /* icon-palette */ + 2, /* background-color */ + -1, -1, -1, -1, -1, -1, + 15, /* text-decoration-color */ + -1, -1, -1, -1, -1, -1, -1, -1, + -1, + 14, /* text-shadow */ + 3, /* box-shadow */ + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, + 5, /* border-top-color */ + 6, /* border-right-color */ + 7, /* border-bottom-color */ + 8, /* border-left-color */ + 11, /* outline-color */ + -1, + 4, /* background-image */ + -1, + 9, /* border-image-source */ + -1, -1, -1, + 16, /* icon-source */ + -1, + 10, /* icon-shadow */ + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, + 12, /* caret-color */ + 13, /* secondary-caret-color */ + -1, -1, -1, +}; + +G_STATIC_ASSERT (G_N_ELEMENTS (used_props_map) == GTK_CSS_PROPERTY_N_PROPERTIES); + G_END_DECLS