From 84cf748eae1f21e2b78b8e330a53ee12a308e32f Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sat, 14 Jun 2014 15:06:57 -0400 Subject: [PATCH] Add more icontheme tests This test is focused on svgs, and how we scale them when loading. --- testsuite/gtk/icons/16x16/twosize-fixed.svg | 56 +++++++++++++++++++++ testsuite/gtk/icons/16x16s/twosize.svg | 56 +++++++++++++++++++++ testsuite/gtk/icons/32x32/twosize-fixed.svg | 4 ++ testsuite/gtk/icons/32x32s/twosize.svg | 4 ++ testsuite/gtk/icons/index.theme | 20 ++++++-- testsuite/gtk/icontheme.c | 53 +++++++++++++++++-- 6 files changed, 186 insertions(+), 7 deletions(-) create mode 100644 testsuite/gtk/icons/16x16/twosize-fixed.svg create mode 100644 testsuite/gtk/icons/16x16s/twosize.svg create mode 100644 testsuite/gtk/icons/32x32/twosize-fixed.svg create mode 100644 testsuite/gtk/icons/32x32s/twosize.svg diff --git a/testsuite/gtk/icons/16x16/twosize-fixed.svg b/testsuite/gtk/icons/16x16/twosize-fixed.svg new file mode 100644 index 0000000000..3bb8881269 --- /dev/null +++ b/testsuite/gtk/icons/16x16/twosize-fixed.svg @@ -0,0 +1,56 @@ + + + + + + image/svg+xml + + + + + + + + 16 + diff --git a/testsuite/gtk/icons/16x16s/twosize.svg b/testsuite/gtk/icons/16x16s/twosize.svg new file mode 100644 index 0000000000..3bb8881269 --- /dev/null +++ b/testsuite/gtk/icons/16x16s/twosize.svg @@ -0,0 +1,56 @@ + + + + + + image/svg+xml + + + + + + + + 16 + diff --git a/testsuite/gtk/icons/32x32/twosize-fixed.svg b/testsuite/gtk/icons/32x32/twosize-fixed.svg new file mode 100644 index 0000000000..45b553cb11 --- /dev/null +++ b/testsuite/gtk/icons/32x32/twosize-fixed.svg @@ -0,0 +1,4 @@ + + + 32 + diff --git a/testsuite/gtk/icons/32x32s/twosize.svg b/testsuite/gtk/icons/32x32s/twosize.svg new file mode 100644 index 0000000000..45b553cb11 --- /dev/null +++ b/testsuite/gtk/icons/32x32s/twosize.svg @@ -0,0 +1,4 @@ + + + 32 + diff --git a/testsuite/gtk/icons/index.theme b/testsuite/gtk/icons/index.theme index cecd974868..20c53bb7c0 100644 --- a/testsuite/gtk/icons/index.theme +++ b/testsuite/gtk/icons/index.theme @@ -3,7 +3,7 @@ Name=Icons Comment=Testing of the Icon theme code Example=16x16/simple.png -Directories=16x16,32x32,scalable +Directories=16x16,16x16s,32x32,32x32s,scalable [16x16] Context=16x16 icons @@ -15,9 +15,23 @@ Context=32x32 icons Size=32 Type=Fixed +[16x16s] +Context=scalable 16x16 icons +Size=16 +MinSize=12 +MaxSize=24 +Type=Scalable + +[32x32s] +Context=scalable 32x32 icons +Size=32 +MinSize=24 +MaxSize=48 +Type=Scalable + [scalable] Context=scalable icons Type=Scalable Size=128 -Min-Size=1 -Max-Size=256 +MinSize=1 +MaxSize=256 diff --git a/testsuite/gtk/icontheme.c b/testsuite/gtk/icontheme.c index 17fe6a04e2..01eac235e5 100644 --- a/testsuite/gtk/icontheme.c +++ b/testsuite/gtk/icontheme.c @@ -45,10 +45,11 @@ lookup_flags_to_string (GtkIconLookupFlags flags) } static void -assert_icon_lookup (const char *icon_name, - gint size, - GtkIconLookupFlags flags, - const char *filename) +assert_icon_lookup_size (const char *icon_name, + gint size, + GtkIconLookupFlags flags, + const char *filename, + gint pixbuf_size) { GtkIconInfo *info; @@ -68,9 +69,29 @@ assert_icon_lookup (const char *icon_name, return; } + if (pixbuf_size > 0) + { + GdkPixbuf *pixbuf; + GError *error = NULL; + + pixbuf = gtk_icon_info_load_icon (info, &error); + g_assert_no_error (error); + g_assert_cmpint (gdk_pixbuf_get_width (pixbuf), ==, pixbuf_size); + g_object_unref (pixbuf); + } + g_object_unref (info); } +static void +assert_icon_lookup (const char *icon_name, + gint size, + GtkIconLookupFlags flags, + const char *filename) +{ + assert_icon_lookup_size (icon_name, size, flags, filename, -1); +} + static void assert_icon_lookup_fails (const char *icon_name, gint size, @@ -424,6 +445,29 @@ test_symbolic_single_size (void) "/icons/32x32/only32-symbolic.svg"); } +static void +test_svg_size (void) +{ + /* To understand these results, keep in mind that we never allow upscaling, + * and don't respect min/max size for scaling (though we do take it into + * account for choosing). + */ + /* Check we properly load a svg icon from a sized directory */ + assert_icon_lookup_size ("twosize-fixed", 48, 0, "/icons/32x32/twosize-fixed.svg", 32); + assert_icon_lookup_size ("twosize-fixed", 32, 0, "/icons/32x32/twosize-fixed.svg", 32); + assert_icon_lookup_size ("twosize-fixed", 20, 0, "/icons/32x32/twosize-fixed.svg", 32); + assert_icon_lookup_size ("twosize-fixed", 16, 0, "/icons/16x16/twosize-fixed.svg", 16); + + /* Check that we still properly load it even if a different size is requested */ + assert_icon_lookup_size ("twosize", 64, 0, "/icons/32x32s/twosize.svg", 64); + assert_icon_lookup_size ("twosize", 48, 0, "/icons/32x32s/twosize.svg", 48); + assert_icon_lookup_size ("twosize", 32, 0, "/icons/32x32s/twosize.svg", 32); + assert_icon_lookup_size ("twosize", 24, 0, "/icons/32x32s/twosize.svg", 24); + assert_icon_lookup_size ("twosize", 16, 0, "/icons/16x16s/twosize.svg", 16); + assert_icon_lookup_size ("twosize", 12, 0, "/icons/16x16s/twosize.svg", 12); + assert_icon_lookup_size ("twosize", 8, 0, "/icons/16x16s/twosize.svg", 8); +} + int main (int argc, char *argv[]) { @@ -436,6 +480,7 @@ main (int argc, char *argv[]) g_test_add_func ("/icontheme/force-regular", test_force_regular); g_test_add_func ("/icontheme/rtl", test_rtl); g_test_add_func ("/icontheme/symbolic-single-size", test_symbolic_single_size); + g_test_add_func ("/icontheme/svg-size", test_svg_size); return g_test_run(); }