From 595242c389577599ecb943e45f365765b06f364b Mon Sep 17 00:00:00 2001 From: "Owen W. Taylor" Date: Sat, 19 Sep 2009 23:28:39 -0400 Subject: [PATCH] Fix problems with 4-sided padding: specifiers The test for identifying such a specifier was wrong, and the last value was assigned to the wrong sides. https://bugzilla.gnome.org/show_bug.cgi?id=595990 --- src/st/st-theme-node.c | 26 ++++++++++++++------------ src/st/test-theme.c | 17 +++++++++++++++++ src/st/test-theme.css | 1 + 3 files changed, 32 insertions(+), 12 deletions(-) diff --git a/src/st/st-theme-node.c b/src/st/st-theme-node.c index 1e5d43915..6fe550a41 100644 --- a/src/st/st-theme-node.c +++ b/src/st/st-theme-node.c @@ -863,26 +863,28 @@ do_padding_property (StThemeNode *node, */ if (decl->value == NULL) /* 0 values */ return; - else if (decl->value->next == NULL) - { /* 1 value */ + else if (decl->value->next == NULL) /* 1 value */ + { do_padding_property_term (node, decl->value, TRUE, TRUE, TRUE, TRUE); /* left/right/top/bottom */ return; - } else if (decl->value->next->next == NULL) - { /* 2 values */ + } + else if (decl->value->next->next == NULL) /* 2 values */ + { do_padding_property_term (node, decl->value, FALSE, FALSE, TRUE, TRUE); /* top/bottom */ do_padding_property_term (node, decl->value->next, TRUE, TRUE, FALSE, FALSE); /* left/right */ - } else if (decl->value->next->next->next == NULL) - { /* 3 values */ + } + else if (decl->value->next->next->next == NULL) /* 3 values */ + { do_padding_property_term (node, decl->value, FALSE, FALSE, TRUE, FALSE); /* top */ do_padding_property_term (node, decl->value->next, TRUE, TRUE, FALSE, FALSE); /* left/right */ do_padding_property_term (node, decl->value->next->next, FALSE, FALSE, FALSE, TRUE); /* bottom */ } - else if (decl->value->next->next->next == NULL) - { /* 4 values */ - do_padding_property_term (node, decl->value, FALSE, FALSE, TRUE, FALSE); - do_padding_property_term (node, decl->value->next, FALSE, TRUE, FALSE, FALSE); /* left */ - do_padding_property_term (node, decl->value->next->next, FALSE, FALSE, FALSE, TRUE); - do_padding_property_term (node, decl->value->next->next->next, TRUE, FALSE, FALSE, TRUE); /* left */ + else if (decl->value->next->next->next->next == NULL) /* 4 values */ + { + do_padding_property_term (node, decl->value, FALSE, FALSE, TRUE, FALSE); /* top */ + do_padding_property_term (node, decl->value->next, FALSE, TRUE, FALSE, FALSE); /* right */ + do_padding_property_term (node, decl->value->next->next, FALSE, FALSE, FALSE, TRUE); /* bottom */ + do_padding_property_term (node, decl->value->next->next->next, TRUE, FALSE, FALSE, FALSE); /* left */ } else { diff --git a/src/st/test-theme.c b/src/st/test-theme.c index 772981baa..30bc4bdce 100644 --- a/src/st/test-theme.c +++ b/src/st/test-theme.c @@ -206,6 +206,22 @@ test_adjacent_selector (void) assert_foreground_color (text2, "text2", 0x000000ff); } +static void +test_padding (void) +{ + test = "padding"; + /* Test that a 4-sided padding property assigns the right paddings to + * all sides */ + assert_length ("group2", "padding-top", 1., + st_theme_node_get_padding (group2, ST_SIDE_TOP)); + assert_length ("group2", "padding-right", 2., + st_theme_node_get_padding (group2, ST_SIDE_RIGHT)); + assert_length ("group2", "padding-bottom", 3., + st_theme_node_get_padding (group2, ST_SIDE_BOTTOM)); + assert_length ("group2", "padding-left", 4., + st_theme_node_get_padding (group2, ST_SIDE_LEFT)); +} + static void test_background (void) { @@ -295,6 +311,7 @@ main (int argc, char **argv) test_classes (); test_type_inheritance (); test_adjacent_selector (); + test_padding (); test_background (); test_font (); test_pseudo_class (); diff --git a/src/st/test-theme.css b/src/st/test-theme.css index 5776e0fe4..be512d5cd 100644 --- a/src/st/test-theme.css +++ b/src/st/test-theme.css @@ -57,6 +57,7 @@ stage > #text2 { #group2 { background-image: url('other-background.png'); + padding: 1px 2px 3px 4px; } ClutterText:hover {