diff -u --new-file --recursive --exclude-from=/tmp/cvs.exclude.gphoto gphoto.orig/src/Makefile.am gphoto/src/Makefile.am --- gphoto.orig/src/Makefile.am Thu Jun 8 14:25:44 2000 +++ gphoto/src/Makefile.am Fri Aug 4 11:24:51 2000 @@ -2,7 +2,9 @@ developer.h \ developer_dialog.h \ exif.c \ - exif.h + exif.h \ + canvas.c \ + canvas.h gphoto_LDFLAGS = -export-dynamic diff -u --new-file --recursive --exclude-from=/tmp/cvs.exclude.gphoto gphoto.orig/src/callbacks.c gphoto/src/callbacks.c --- gphoto.orig/src/callbacks.c Thu Jul 6 20:08:15 2000 +++ gphoto/src/callbacks.c Fri Aug 4 12:36:49 2000 @@ -53,7 +54,8 @@ extern char post_process_script[]; extern GtkWidget *post_process_pixmap; extern GtkWidget *index_vp; -extern GtkWidget *index_table; +extern GtkWidget *index_frame; +extern GnomeCanvasGroup *index_root; extern char *filesel_cwd; @@ -1196,12 +1278,9 @@ while (Thumbnails.next != NULL) remove_thumbnail(1); - if (index_table) - gtk_widget_destroy(index_table); - - index_table = gtk_table_new(100,6,FALSE); - gtk_widget_show(index_table); - gtk_container_add(GTK_CONTAINER(index_vp), index_table); + create_canvas (0, &index_frame, &index_root); + gtk_widget_show(index_frame); + gtk_container_add(GTK_CONTAINER(index_vp), index_frame); if (cam_busy) { error_dialog("Camera is already busy"); @@ -1267,10 +1354,9 @@ GTK_SIGNAL_FUNC(thumb_click), node); - gtk_table_attach(GTK_TABLE(index_table), - node->button, - i%6,i%6+1,i/6,i/6+1, - GTK_FILL,GTK_FILL,5,5); + add_to_canvas (index_root, + node->button, + 97*(i%6)+5,97*(i/6)+5,87,87); update_progress(progress_max); } deactivate_button(stop_button); diff -u --new-file --recursive --exclude-from=/tmp/cvs.exclude.gphoto gphoto.orig/src/canvas.c gphoto/src/canvas.c --- gphoto.orig/src/canvas.c Thu Jan 1 01:00:00 1970 +++ gphoto/src/canvas.c Sun Aug 6 15:30:19 2000 @@ -0,0 +1,152 @@ +#include "canvas.h" + +static gint +event_handler (GtkWidget *widget, GdkEvent *event, gpointer data) +{ + static double x, y; + double new_x, new_y; + double item_x, item_y; + GdkCursor *fleur; + static int dragging; + static GnomeCanvasItem *rect; + GnomeCanvasGroup *root=data; + + item_x = event->button.x; + item_y = event->button.y; + + switch (event->type) { + case GDK_BUTTON_PRESS: + if (event->button.button==1) { + gnome_canvas_window_to_world (GNOME_CANVAS (widget), + item_x, item_y, &x, &y); + + fleur = gdk_cursor_new (GDK_FLEUR); + gdk_cursor_destroy (fleur); + dragging = TRUE; + rect = gnome_canvas_item_new (root, + gnome_canvas_rect_get_type(), + "x1",x, + "y1",y, + "x2",x, + "y2",y, + "outline_color", "red", + "width_pixels", 8, + NULL); + gnome_canvas_item_raise_to_top (rect); + } + break; + case GDK_MOTION_NOTIFY: + if (dragging && (event->motion.state & GDK_BUTTON1_MASK)) { + gnome_canvas_window_to_world (GNOME_CANVAS (widget), + item_x, item_y, &new_x, &new_y); + gnome_canvas_item_set (rect, + "x2",new_x, + "y2",new_y, + NULL); + + x = new_x; + y = new_y; + } + break; + case GDK_BUTTON_RELEASE: + dragging = FALSE; + gtk_object_destroy (GTK_OBJECT (rect)); + /* FIXME : hide item here */ + break; + + default: + break; + } + return FALSE; +} + +static void +setup_item (GnomeCanvasItem *item, GnomeCanvasGroup *root) +{ + gtk_signal_connect (GTK_OBJECT (item), "event", + (GtkSignalFunc) event_handler, + root); +} + +void +create_canvas (gint aa, GtkWidget **index_table, GnomeCanvasGroup **index_root) +{ + GtkWidget *canvas; + GtkWidget *table; + GtkWidget *w; + GtkWidget *frame; + GnomeCanvasGroup *root; + + + if (aa) { + gtk_widget_push_visual (gdk_rgb_get_visual ()); + gtk_widget_push_colormap (gdk_rgb_get_cmap ()); + canvas = gnome_canvas_new_aa (); + } else { + gtk_widget_push_visual (gdk_imlib_get_visual ()); + gtk_widget_push_colormap (gdk_imlib_get_colormap ()); + canvas = gnome_canvas_new (); + } + + /* Setup canvas items */ + + root = gnome_canvas_root (GNOME_CANVAS (canvas)); + + gtk_signal_connect (GTK_OBJECT (canvas), "event", + (GtkSignalFunc) event_handler, + root); + + gtk_widget_pop_colormap (); + gtk_widget_pop_visual (); + + /* + * Layout + */ + + table = gtk_table_new (2, 2, FALSE); + gtk_table_set_row_spacings (GTK_TABLE (table), 4); + gtk_table_set_col_spacings (GTK_TABLE (table), 4); + gtk_widget_show (table); + + frame = gtk_frame_new (NULL); + gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); + gtk_table_attach (GTK_TABLE (table), frame, + 0, 1, 0, 1, + GTK_EXPAND | GTK_FILL | GTK_SHRINK, + GTK_EXPAND | GTK_FILL | GTK_SHRINK, + 0, 0); + gtk_widget_show (frame); + + gtk_widget_set_usize (canvas, 600, 450); + gnome_canvas_set_scroll_region (GNOME_CANVAS (canvas), 0, 0, 600, 450); + gtk_container_add (GTK_CONTAINER (frame), canvas); + gtk_widget_show (canvas); + + GTK_WIDGET_SET_FLAGS (canvas, GTK_CAN_FOCUS); + gtk_widget_grab_focus (canvas); + + (*index_root)=root; + (*index_table)=table; +} + +void +destroy_canvas (GtkWidget *index_table,GnomeCanvasGroup *index_root) +{ +} + +void +add_to_canvas (GnomeCanvasGroup *root, GtkWidget *widget, gint x, gint y, + guint width, guint height) +{ + setup_item (gnome_canvas_item_new (root, + gnome_canvas_widget_get_type (), + "widget", widget, + "x", (double)x, + "y", (double)y, + "width", (double)width, + "height", (double)height, + "anchor", GTK_ANCHOR_NW, + "size_pixels", FALSE, + NULL), root); + gtk_widget_show (widget); +} diff -u --new-file --recursive --exclude-from=/tmp/cvs.exclude.gphoto gphoto.orig/src/canvas.h gphoto/src/canvas.h --- gphoto.orig/src/canvas.h Thu Jan 1 01:00:00 1970 +++ gphoto/src/canvas.h Fri Aug 4 11:24:29 2000 @@ -0,0 +1,5 @@ +#include + +void create_canvas (gint aa, GtkWidget **index_frame, GnomeCanvasGroup **index_root); +void add_to_canvas (GnomeCanvasGroup *root, GtkWidget *widget, gint x, gint y, + guint width, guint height); diff -u --new-file --recursive --exclude-from=/tmp/cvs.exclude.gphoto gphoto.orig/src/main.c gphoto/src/main.c --- gphoto.orig/src/main.c Sun Jul 9 23:40:15 2000 +++ gphoto/src/main.c Fri Aug 4 12:30:06 2000 @@ -23,6 +24,7 @@ #include "toolbar.h" #include "commandline.h" #include "developer_dialog.h" +#include "canvas.h" #include "icons/splash.xpm" /* Splash screen */ #include "icons/post_processing_off.xpm" @@ -33,7 +35,8 @@ GtkWidget *status_bar; /* Main window status bar */ GtkWidget *library_name; /* Main window library bar */ GtkWidget *notebook; /* Main window Notebook */ - GtkWidget *index_table; /* Index table */ + GtkWidget *index_frame; /* Index table */ + GnomeCanvasGroup *index_root; /* Gnome Canvas */ GtkWidget *index_vp; /* Viewport for above */ GtkWidget *index_window; /* Index Scrolled Window */ GtkWidget *progress; /* Progress bar */ @@ -262,11 +270,11 @@ gtk_table_attach(GTK_TABLE(table),sbox, 0, 1, 3, 4, GTK_FILL|GTK_EXPAND, GTK_FILL, 0 , 0); - index_table = gtk_hbox_new(FALSE, 0); - gtk_widget_show(index_table); - gtk_container_add( GTK_CONTAINER(index_vp), index_table); - - gtk_box_pack_start(GTK_BOX(index_table), gpixmap, TRUE, FALSE, 0); + /* + * create_canvas (0, &index_frame, &index_root); + * gtk_widget_show(index_frame); + * gtk_container_add( GTK_CONTAINER(index_vp), index_frame); + */ /* If not command-line mode... --------------------------- */ gtk_widget_show(mainWin);