tests: Add simple test for image clipboard

This commit is contained in:
William Jon McCann 2011-06-14 16:01:29 -04:00
parent da9e1954eb
commit be7f734aff
2 changed files with 143 additions and 0 deletions

View File

@ -40,6 +40,7 @@ noinst_PROGRAMS = $(TEST_PROGS) \
testbuttons \
testcairo \
testcalendar \
testclipboard \
testcombo \
testcombochange \
testcellrenderertext \
@ -148,6 +149,7 @@ testbbox_DEPENDENCIES = $(TEST_DEPS)
testbuttons_DEPENDENCIES = $(TEST_DEPS)
testcairo_DEPENDENCIES = $(TEST_DEPS)
testcalendar_DEPENDENCIES = $(TEST_DEPS)
testclipboard_DEPENDENCIES = $(TEST_DEPS)
testcombo_DEPENDENCIES = $(TEST_DEPS)
testcombochange_DEPENDENCIES = $(TEST_DEPS)
testcellrenderertext_DEPENDENCIES = $(TEST_DEPS)
@ -234,6 +236,7 @@ testboxcss_LDADD = $(LDADDS)
testbuttons_LDADD = $(LDADDS)
testcairo_LDADD = $(LDADDS)
testcalendar_LDADD = $(LDADDS)
testclipboard_LDADD = $(LDADDS)
testcombo_LDADD = $(LDADDS)
testcombochange_LDADD = $(LDADDS)
testcellrenderertext_LDADD = $(LDADDS)

140
tests/testclipboard.c Normal file
View File

@ -0,0 +1,140 @@
/*
* Copyright (C) 2011 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#include <gtk/gtk.h>
GtkClipboard *clipboard;
GtkWidget *image;
GtkWidget *label;
#define SIZE 256.
static void
image_request_cb (GtkClipboard *clipboard,
GdkPixbuf *pixbuf,
gpointer data)
{
GdkPixbuf *copy;
int height;
int width;
gdouble factor;
char *str;
if (pixbuf != NULL)
{
height = gdk_pixbuf_get_height (pixbuf);
width = gdk_pixbuf_get_width (pixbuf);
factor = MAX ((SIZE / height), (SIZE / width));
copy = gdk_pixbuf_scale_simple (pixbuf, width * factor, height * factor, GDK_INTERP_BILINEAR);
gtk_image_set_from_pixbuf (GTK_IMAGE (image), copy);
g_object_unref (copy);
str = g_strdup_printf ("<b>Image</b> %d \342\234\225 %d", width, height);
}
else
{
str = g_strdup ("<b>No image data</b>");
}
gtk_label_set_markup (GTK_LABEL (label), str);
g_free (str);
}
static void
update_display (void)
{
gtk_clipboard_request_image (clipboard, image_request_cb, NULL);
}
static void
on_owner_change (GtkClipboard *clipboard,
GdkEvent *event,
gpointer user_data)
{
update_display ();
}
static void
on_response (GtkDialog *dialog,
gint response_id,
gpointer user_data)
{
switch (response_id)
{
case 0:
/* copy large */
{
GtkIconTheme *theme;
GdkPixbuf *pixbuf;
theme = gtk_icon_theme_get_default ();
pixbuf = gtk_icon_theme_load_icon (theme, "terminal", 1600, 0, NULL);
gtk_clipboard_set_image (clipboard, pixbuf);
}
break;
case 1:
/* copy small */
{
GtkIconTheme *theme;
GdkPixbuf *pixbuf;
theme = gtk_icon_theme_get_default ();
pixbuf = gtk_icon_theme_load_icon (theme, "terminal", 48, 0, NULL);
gtk_clipboard_set_image (clipboard, pixbuf);
}
break;
case GTK_RESPONSE_CLOSE:
default:
gtk_main_quit ();
break;
}
}
int
main (int argc, char **argv)
{
GtkWidget *window;
gtk_init (&argc, &argv);
window = gtk_dialog_new_with_buttons ("Clipboard",
NULL,
0,
"Copy Large", 0,
"Copy Small", 1,
GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
NULL);
image = gtk_image_new ();
gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (window))), image, FALSE, FALSE, 0);
label = gtk_label_new ("No data found");
gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (window))), label, FALSE, FALSE, 0);
g_signal_connect (window, "response", G_CALLBACK (on_response), NULL);
clipboard = gtk_clipboard_get_for_display (gtk_widget_get_display (window),
GDK_SELECTION_CLIPBOARD);
g_signal_connect (clipboard, "owner-change", G_CALLBACK (on_owner_change), NULL);
update_display ();
gtk_widget_show_all (window);
gtk_main ();
return 0;
}