From 998055c835b2b7a4e002d3dd224216371d7bb6a4 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Sat, 7 Jan 2012 22:20:51 +0100 Subject: [PATCH] css: Introduce GtkCssSide ... and use it. This is basically an encoding of the order of sides in CSS. So when parsing things, this is the way we parse things in. --- gtk/gtkcsstypesprivate.h | 8 ++++++++ gtk/gtkthemingengine.c | 40 +++++++++++++++------------------------- 2 files changed, 23 insertions(+), 25 deletions(-) diff --git a/gtk/gtkcsstypesprivate.h b/gtk/gtkcsstypesprivate.h index 95123bea27..a38ff51f02 100644 --- a/gtk/gtkcsstypesprivate.h +++ b/gtk/gtkcsstypesprivate.h @@ -63,6 +63,14 @@ typedef enum { GTK_CSS_AREA_CONTENT_BOX } GtkCssArea; +/* for the order in arrays */ +typedef enum /*< skip >*/ { + GTK_CSS_TOP, + GTK_CSS_RIGHT, + GTK_CSS_BOTTOM, + GTK_CSS_LEFT +} GtkCssSide; + typedef struct _GtkCssBorderCornerRadius GtkCssBorderCornerRadius; typedef struct _GtkCssBorderImageRepeat GtkCssBorderImageRepeat; diff --git a/gtk/gtkthemingengine.c b/gtk/gtkthemingengine.c index b822da8165..b9e2e38db9 100644 --- a/gtk/gtkthemingengine.c +++ b/gtk/gtkthemingengine.c @@ -57,14 +57,6 @@ * style information contained in the rendered object's #GtkStyleContext. */ -enum { - SIDE_LEFT = 1, - SIDE_BOTTOM = 1 << 1, - SIDE_RIGHT = 1 << 2, - SIDE_TOP = 1 << 3, - SIDE_ALL = 0xF -}; - enum { PROP_0, PROP_NAME @@ -1368,13 +1360,13 @@ static void gtk_theming_engine_hide_border_sides (GtkBorder *border, guint hidden_side) { - if (hidden_side & SIDE_TOP) + if (hidden_side & (1 << GTK_CSS_TOP)) border->top = 0; - if (hidden_side & SIDE_RIGHT) + if (hidden_side & (1 << GTK_CSS_RIGHT)) border->right = 0; - if (hidden_side & SIDE_BOTTOM) + if (hidden_side & (1 << GTK_CSS_BOTTOM)) border->bottom = 0; - if (hidden_side & SIDE_LEFT) + if (hidden_side & (1 << GTK_CSS_LEFT)) border->left = 0; } @@ -1385,7 +1377,6 @@ render_frame_fill (cairo_t *cr, GdkRGBA colors[4], guint hidden_side) { - static const guint current_side[4] = { SIDE_TOP, SIDE_RIGHT, SIDE_BOTTOM, SIDE_LEFT }; GtkRoundedBox padding_box; guint i, j; @@ -1407,12 +1398,12 @@ render_frame_fill (cairo_t *cr, { for (i = 0; i < 4; i++) { - if (hidden_side & current_side[i]) + if (hidden_side & (1 << i)) continue; for (j = 0; j < 4; j++) { - if (hidden_side & current_side[j]) + if (hidden_side & (1 << j)) continue; if (i == j || @@ -1459,7 +1450,6 @@ render_frame_internal (GtkThemingEngine *engine, gdouble progress; gboolean running; GtkBorder border; - static const guint current_side[4] = { SIDE_TOP, SIDE_RIGHT, SIDE_BOTTOM, SIDE_LEFT }; GdkRGBA *alloc_colors[4]; GdkRGBA colors[4]; guint i, j; @@ -1530,7 +1520,7 @@ render_frame_internal (GtkThemingEngine *engine, for (i = 0; i < 4; i++) { - if (hidden_side & current_side[i]) + if (hidden_side & (1 << i)) continue; switch (border_style[i]) @@ -1559,9 +1549,9 @@ render_frame_internal (GtkThemingEngine *engine, for (j = 0; j < 4; j++) { if (border_style[j] == GTK_BORDER_STYLE_DOUBLE) - hidden_side |= current_side[j]; + hidden_side |= (1 << j); else - dont_draw |= current_side[j]; + dont_draw |= (1 << j); } other_border.top = (border.top + 2) / 3; other_border.right = (border.right + 2) / 3; @@ -1595,9 +1585,9 @@ render_frame_internal (GtkThemingEngine *engine, color_shade (&colors[j], 1.8, &colors[j]); if (border_style[j] == GTK_BORDER_STYLE_GROOVE || border_style[j] == GTK_BORDER_STYLE_RIDGE) - hidden_side |= current_side[j]; + hidden_side |= (1 << j); else - dont_draw |= current_side[j]; + dont_draw |= (1 << j); } other_border.top = border.top / 2; other_border.right = border.right / 2; @@ -2114,28 +2104,28 @@ gtk_theming_engine_render_extension (GtkThemingEngine *engine, { case GTK_POS_LEFT: junction = GTK_JUNCTION_LEFT; - hidden_side = SIDE_LEFT; + hidden_side = (1 << GTK_CSS_LEFT); cairo_translate (cr, x + width, y); cairo_rotate (cr, G_PI / 2); break; case GTK_POS_RIGHT: junction = GTK_JUNCTION_RIGHT; - hidden_side = SIDE_RIGHT; + hidden_side = (1 << GTK_CSS_RIGHT); cairo_translate (cr, x, y + height); cairo_rotate (cr, - G_PI / 2); break; case GTK_POS_TOP: junction = GTK_JUNCTION_TOP; - hidden_side = SIDE_TOP; + hidden_side = (1 << GTK_CSS_TOP); cairo_translate (cr, x + width, y + height); cairo_rotate (cr, G_PI); break; case GTK_POS_BOTTOM: junction = GTK_JUNCTION_BOTTOM; - hidden_side = SIDE_BOTTOM; + hidden_side = (1 << GTK_CSS_BOTTOM); cairo_translate (cr, x, y); break;