1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
| #include <gtk/gtk.h>
static const struct
{
gchar *name;
gchar *pattern;
} chooser_filters[] = {
{ "All Files (*)", "*" },
{ "PNG Files (*.png)", "*.png" },
{ "JPEG Files (*.jpg)", "*.jpg" },
{ "BMP Files (*.bmp)", "*.bmp" },
};
void file_set_cb(GtkFileChooserButton *but, GtkImage *im)
{
gchar *filename;
filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(but));
gtk_image_set_from_file(im, filename);
}
void rot_left(GtkWidget *but, GtkImage *im)
{
GdkPixbuf *pbuf;
pbuf = gtk_image_get_pixbuf(im);
if(pbuf == NULL)
return;
pbuf = gdk_pixbuf_rotate_simple(pbuf, GDK_PIXBUF_ROTATE_COUNTERCLOCKWISE);
gtk_image_set_from_pixbuf(im, pbuf);
}
void rot_right(GtkWidget *but, GtkImage *im)
{
GdkPixbuf *pbuf;
pbuf = gtk_image_get_pixbuf(im);
if(pbuf == NULL)
return;
pbuf = gdk_pixbuf_rotate_simple(pbuf, GDK_PIXBUF_ROTATE_CLOCKWISE);
gtk_image_set_from_pixbuf(im, pbuf);
}
int main(int argc, char **argv)
{
GtkWidget *win;
GtkWidget *vbox;
GtkWidget *button;
GtkWidget *swin;
GtkWidget *image;
GtkWidget *hbox;
GtkFileFilter *fil;
gint i;
gtk_init(&argc, &argv);
win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(G_OBJECT(win), "delete-event", G_CALLBACK(gtk_main_quit), NULL);
vbox = gtk_vbox_new(FALSE, 5);
gtk_container_add(GTK_CONTAINER(win), vbox);
gtk_widget_show(vbox);
button = gtk_file_chooser_button_new("Select File", GTK_FILE_CHOOSER_ACTION_OPEN);
gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0);
gtk_widget_show(button);
for(i = 0; i < G_N_ELEMENTS(chooser_filters); i++)
{
fil = gtk_file_filter_new();
gtk_file_filter_set_name(fil, chooser_filters[i].name);
gtk_file_filter_add_pattern(fil, chooser_filters[i].pattern);
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(button), fil);
}
swin = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_box_pack_start(GTK_BOX(vbox), swin, TRUE, TRUE, 0);
gtk_widget_show(swin);
image = gtk_image_new();
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(swin), image);
gtk_widget_show(image);
/* connect "file-set" of button now that we have image */
g_signal_connect(G_OBJECT(button), "file-set", G_CALLBACK(file_set_cb), (gpointer)image);
hbox = gtk_hbox_new(TRUE, 2);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
gtk_widget_show(hbox);
button = gtk_button_new_with_label("Rotate Left");
g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(rot_left), (gpointer)image);
gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0);
gtk_widget_show(button);
button = gtk_button_new_with_label("Rotate Right");
g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(rot_right), (gpointer)image);
gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0);
gtk_widget_show(button);
gtk_widget_show(win);
gtk_main();
return 0;
} |