diff options
Diffstat (limited to 'test/test-eel-image-table.c')
-rw-r--r-- | test/test-eel-image-table.c | 304 |
1 files changed, 304 insertions, 0 deletions
diff --git a/test/test-eel-image-table.c b/test/test-eel-image-table.c new file mode 100644 index 00000000..d60aa91b --- /dev/null +++ b/test/test-eel-image-table.c @@ -0,0 +1,304 @@ +#include "test.h" + +#include <eel/eel-image-table.h> +#include <gtk/gtk.h> +#include <stdlib.h> + +static const char pixbuf_name[] = "/usr/share/pixmaps/mate-about-logo.png"; + +#define BG_COLOR 0xFFFFFF +#define BG_COLOR_SPEC "white" + +static const char *names[] = +{ + "Tomaso Albinoni", + "Isaac Alb�niz", + "Georges Bizet", + "Luigi Boccherini", + "Alexander Borodin", + "Johannes Brahms", + "Max Bruch", + "Anton Bruckner", + "Fr�d�ric Chopin", + "Aaron Copland", + "John Corigliano", + "Claude Debussy", + "L�o Delibes", + "Anton�n Dvor�k", + "Edward Elgar", + "Manuel de Falla", + "George Gershwin", + "Alexander Glazunov", + "Mikhail Glinka", + "Enrique Granados", + "Edvard Grieg", + "Joseph Haydn", + "Scott Joplin", + "Franz Liszt", + "Gustav Mahler", + "Igor Markevitch", + "Felix Mendelssohn", + "Modest Mussorgsky", + "Sergei Prokofiev", + "Giacomo Puccini", + "Maurice Ravel", + "Ottorino Respighi", + "Joaquin Rodrigo", + "Gioachino Rossini", + "Domenico Scarlatti", + "Franz Schubert", + "Robert Schumann", + "Jean Sibelius", + "Bedrich Smetana", + "Johann Strauss", + "Igor Stravinsky", + "Giuseppe Verdi", + "Antonio Vivaldi", + "Richard Wagner", +}; + +static GtkWidget * +labeled_image_new (const char *text, + const char *icon_name) +{ + GtkWidget *image; + GdkPixbuf *pixbuf = NULL; + + if (icon_name) { + float sizes[] = { 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, + 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0 }; + pixbuf = test_pixbuf_new_named (icon_name, sizes[random () % G_N_ELEMENTS (sizes)]); + } + + image = eel_labeled_image_new (text, pixbuf); + + eel_gdk_pixbuf_unref_if_not_null (pixbuf); + + return image; +} + + +static void +image_table_child_enter_callback (GtkWidget *image_table, + GtkWidget *item, + gpointer callback_data) +{ +#if 0 + char *text; + + g_return_if_fail (EEL_IS_IMAGE_TABLE (image_table)); + g_return_if_fail (EEL_IS_LABELED_IMAGE (item)); + + text = eel_labeled_image_get_text (EEL_LABELED_IMAGE (item)); + + g_print ("%s(%s)\n", G_STRFUNC, text); +#endif +} + +static void +image_table_child_leave_callback (GtkWidget *image_table, + GtkWidget *item, + gpointer callback_data) +{ +#if 0 + char *text; + + g_return_if_fail (EEL_IS_IMAGE_TABLE (image_table)); + g_return_if_fail (EEL_IS_LABELED_IMAGE (item)); + + text = eel_labeled_image_get_text (EEL_LABELED_IMAGE (item)); + + g_print ("%s(%s)\n", G_STRFUNC, text); +#endif +} + +static void +image_table_child_pressed_callback (GtkWidget *image_table, + GtkWidget *item, + gpointer callback_data) +{ + char *text; + + g_return_if_fail (EEL_IS_IMAGE_TABLE (image_table)); + g_return_if_fail (EEL_IS_LABELED_IMAGE (item)); + + text = eel_labeled_image_get_text (EEL_LABELED_IMAGE (item)); + + g_print ("%s(%s)\n", G_STRFUNC, text); +} + +static void +image_table_child_released_callback (GtkWidget *image_table, + GtkWidget *item, + gpointer callback_data) +{ + char *text; + + g_return_if_fail (EEL_IS_IMAGE_TABLE (image_table)); + g_return_if_fail (EEL_IS_LABELED_IMAGE (item)); + + text = eel_labeled_image_get_text (EEL_LABELED_IMAGE (item)); + + g_print ("%s(%s)\n", G_STRFUNC, text); +} + +static void +image_table_child_clicked_callback (GtkWidget *image_table, + GtkWidget *item, + gpointer callback_data) +{ + char *text; + + g_return_if_fail (EEL_IS_IMAGE_TABLE (image_table)); + g_return_if_fail (EEL_IS_LABELED_IMAGE (item)); + + text = eel_labeled_image_get_text (EEL_LABELED_IMAGE (item)); + + g_print ("%s(%s)\n", G_STRFUNC, text); +} + +static int +foo_timeout (gpointer callback_data) +{ + static int recursion_count = 0; + g_return_val_if_fail (GTK_IS_WINDOW (callback_data), FALSE); + + recursion_count++; + + g_print ("%s(%d)\n", G_STRFUNC, recursion_count); + gtk_widget_queue_resize (GTK_WIDGET (callback_data)); + + recursion_count--; + + return FALSE; +} + +static void +image_table_size_allocate (GtkWidget *image_table, + GtkAllocation *allocation, + gpointer callback_data) +{ + static int recursion_count = 0; + GtkAllocation w_allocation; + + g_return_if_fail (EEL_IS_IMAGE_TABLE (image_table)); + g_return_if_fail (allocation != NULL); + g_return_if_fail (GTK_IS_WINDOW (callback_data)); + + recursion_count++; + + if (0) g_timeout_add (0, foo_timeout, callback_data); + + /*gtk_widget_queue_resize (GTK_WIDGET (callback_data));*/ + + gtk_widget_get_allocation (GTK_WIDGET (image_table), &w_allocation); + if (0) gtk_widget_size_allocate (GTK_WIDGET (image_table), + &w_allocation); + + g_print ("%s(%d)\n", G_STRFUNC, recursion_count); + + recursion_count--; +} + +static GtkWidget * +image_table_new_scrolled (void) +{ + GtkWidget *scrolled; + GtkWidget *viewport; + GtkWidget *window; + GtkWidget *image_table; + int i; + + window = test_window_new ("Image Table Test", 10); + + gtk_window_set_default_size (GTK_WINDOW (window), 400, 300); + + /* Scrolled window */ + scrolled = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled), + GTK_POLICY_NEVER, + GTK_POLICY_AUTOMATIC); + gtk_container_add (GTK_CONTAINER (window), scrolled); + + /* Viewport */ + viewport = gtk_viewport_new (NULL, NULL); + gtk_viewport_set_shadow_type (GTK_VIEWPORT (viewport), GTK_SHADOW_OUT); + gtk_container_add (GTK_CONTAINER (scrolled), viewport); + + image_table = eel_image_table_new (FALSE); + + if (0) g_signal_connect (image_table, + "size_allocate", + G_CALLBACK (image_table_size_allocate), + window); + + eel_wrap_table_set_x_justification (EEL_WRAP_TABLE (image_table), + EEL_JUSTIFICATION_MIDDLE); + eel_wrap_table_set_y_justification (EEL_WRAP_TABLE (image_table), + EEL_JUSTIFICATION_END); + + gtk_container_add (GTK_CONTAINER (viewport), image_table); + + g_signal_connect (image_table, + "child_enter", + G_CALLBACK (image_table_child_enter_callback), + NULL); + + g_signal_connect (image_table, + "child_leave", + G_CALLBACK (image_table_child_leave_callback), + NULL); + + g_signal_connect (image_table, + "child_pressed", + G_CALLBACK (image_table_child_pressed_callback), + NULL); + + g_signal_connect (image_table, + "child_released", + G_CALLBACK (image_table_child_released_callback), + NULL); + + g_signal_connect (image_table, + "child_clicked", + G_CALLBACK (image_table_child_clicked_callback), + NULL); + + eel_gtk_widget_set_background_color (viewport, BG_COLOR_SPEC); + + for (i = 0; i < 100; i++) { + char *text; + GtkWidget *image; + + text = g_strdup_printf ("%s %d", + names[random () % G_N_ELEMENTS (names)], + i); + image = labeled_image_new (text, pixbuf_name); + g_free (text); + + gtk_container_add (GTK_CONTAINER (image_table), image); + gtk_widget_show (image); + } + + gtk_widget_show (viewport); + gtk_widget_show (scrolled); + gtk_widget_show (image_table); + + return window; +} + +int +main (int argc, char* argv[]) +{ + GtkWidget *window = NULL; + + test_init (&argc, &argv); + + window = image_table_new_scrolled (); + + gtk_widget_show (window); + + gtk_main (); + + return 0; +} |