From 4706b866a177f8daff208bb6460ed55c3b8ad6ae Mon Sep 17 00:00:00 2001 From: Sven Neumann Date: Fri, 7 Jun 2002 23:47:04 +0000 Subject: [PATCH] ported to the GTK+-2.0 API. 2002-06-08 Sven Neumann * plug-ins/common/animationplay.c: ported to the GTK+-2.0 API. --- ChangeLog | 4 + plug-ins/common/animationplay.c | 519 ++++++-------------------------- 2 files changed, 101 insertions(+), 422 deletions(-) diff --git a/ChangeLog b/ChangeLog index f3c143c0c0..815ebd52a1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2002-06-08 Sven Neumann + + * plug-ins/common/animationplay.c: ported to the GTK+-2.0 API. + 2002-06-08 Sven Neumann * app/base/Makefile.am diff --git a/plug-ins/common/animationplay.c b/plug-ins/common/animationplay.c index 57948f7dd4..25e6510f90 100644 --- a/plug-ins/common/animationplay.c +++ b/plug-ins/common/animationplay.c @@ -113,38 +113,15 @@ #include #include -#ifdef __GNUC__ -#warning GTK_DISABLE_DEPRECATED -#endif -#undef GTK_DISABLE_DEPRECATED - #include -#if defined (GDK_WINDOWING_X11) -#include -#elif defined (GDK_WINDOWING_WIN32) -/* the win32 headers aren't installed so the source location is needed */ -#include -#elif defined (GDK_WINDOWING_DIRECTFB) -#include -#elif defined (GDK_WINDOWING_FB) -#include -#endif - #include #include #include "libgimp/stdplugins-intl.h" -/* Test for GTK1.2-style gdkrgb code, else use old 'preview' code. */ -#ifdef __GDK_RGB_H__ -#define RAPH_IS_HOME yep -/* Dithertype for animated GIFs */ #define DITHERTYPE GDK_RGB_DITHER_NORMAL -#endif - -/* #define I_AM_STUPID yesiam */ typedef enum { @@ -165,28 +142,28 @@ static void run (gchar *name, static void do_playback (void); -static gint window_delete_callback (GtkWidget *widget, - GdkEvent *event, - gpointer data); -static void window_close_callback (GtkWidget *widget, - gpointer data); -static void playstop_callback (GtkWidget *widget, - gpointer data); -static void rewind_callback (GtkWidget *widget, - gpointer data); -static void step_callback (GtkWidget *widget, - gpointer data); -#ifdef RAPH_IS_HOME -static void repaint_sda (GtkWidget *darea, - gpointer data); -static void repaint_da (GtkWidget *darea, - gpointer data); -#endif +static gboolean window_delete_callback (GtkWidget *widget, + GdkEvent *event, + gpointer data); +static void window_close_callback (GtkWidget *widget, + gpointer data); +static void playstop_callback (GtkWidget *widget, + gpointer data); +static void rewind_callback (GtkWidget *widget, + gpointer data); +static void step_callback (GtkWidget *widget, + gpointer data); +static gboolean repaint_sda (GtkWidget *darea, + GdkEventExpose *event, + gpointer data); +static gboolean repaint_da (GtkWidget *darea, + GdkEventExpose *event, + gpointer data); -static void render_frame (gint32 whichframe); -static void show_frame (void); -static void total_alpha_preview (guchar* ptr); -static void init_preview_misc (void); +static void render_frame (gint32 whichframe); +static void show_frame (void); +static void total_alpha_preview (guchar* ptr); +static void init_preview_misc (void); /* tag util functions*/ @@ -215,14 +192,10 @@ GimpPlugInInfo PLUG_IN_INFO = /* Global widgets'n'stuff */ static guchar *preview_data; -#ifdef RAPH_IS_HOME static GtkWidget *drawing_area = NULL; static GtkWidget *shape_drawing_area = NULL; static guchar *shape_drawing_area_data = NULL; static guchar *drawing_area_data = NULL; -#else -static GtkPreview* preview = NULL; -#endif static GtkProgressBar *progress; static guint width, height; static guchar *preview_alpha1_data; @@ -242,12 +215,6 @@ static GtkWidget *psbutton; /* for shaping */ static gchar *shape_preview_mask; static GtkWidget *shape_window; -#ifdef RAPH_IS_HOME -#else -static GtkWidget *shape_fixed; -static GtkPreview *shape_preview; -static GdkPixmap *shape_pixmap; -#endif typedef struct _cursoroffset {gint x,y;} CursorOffset; static gint shaping = 0; static GdkWindow *root_win = NULL; @@ -407,7 +374,7 @@ reshape_from_bitmap (gchar* bitmap) } -static void +static gboolean shape_pressed (GtkWidget *widget, GdkEventButton *event) { @@ -415,9 +382,12 @@ shape_pressed (GtkWidget *widget, /* ignore double and triple click */ if (event->type != GDK_BUTTON_PRESS) - return; + return FALSE; - p = gtk_object_get_user_data (GTK_OBJECT(widget)); + p = g_object_get_data (G_OBJECT(widget), "cursor-offset"); + if (!p) + return FALSE; + p->x = (int) event->x; p->y = (int) event->y; @@ -428,99 +398,32 @@ shape_pressed (GtkWidget *widget, GDK_POINTER_MOTION_HINT_MASK, NULL, NULL, 0); gdk_window_raise (widget->window); + + return FALSE; } -#ifdef RAPH_IS_HOME -static void +static gboolean maybeblocked_expose (GtkWidget *widget, GdkEventExpose *event) { if (playing) - gtk_signal_emit_stop_by_name (GTK_OBJECT(widget), "expose_event"); - else - repaint_sda (widget, event); -} -#else - - -static void -blocked_expose (GtkWidget *widget, - GdkEventExpose *event) -{ - gtk_signal_emit_stop_by_name (GTK_OBJECT(widget), "expose_event"); -} -#endif - - -#ifdef I_AM_STUPID -static void -xblocked_expose (GtkWidget *widget, - GdkEventExpose *event) -{ - printf("eep!\n");fflush(stdout); - abort(); + return TRUE; + + return repaint_sda (widget, event, NULL); } -static void -unblocked_expose (GtkWidget *widget, - GdkEventExpose *event) -{ - gboolean should_block; - - printf("%p: t%d w:%p s:%d c:%d \n",widget, event->type, event->window, - event->send_event, event->count); - fflush(stdout); - - return; - - /* - * If the animation is playing, we only respond to exposures - * which are artificially generated as a result of i.e. - * draw_widget. This is to avoid needlessly redrawing twice - * per frame, because also 'real' exposure events may be generated - * by reshaping the windoow. - * - * If the animation is not playing, then we respond to any type - * of expose event. - */ - - if (playing) - should_block = (!event->send_event) || (event->count != 0); - else - should_block = FALSE; - - if (should_block) - { - /* - * Since a whole load of exposures can come back-to-back, - * starvation can occur for the dialog etc. This alleviates - * the pain. - */ - while (gtk_events_pending()) - gtk_main_iteration_do(TRUE); - - /* - * Block the expose from being acted upon. - */ - blocked_expose(widget, event); - - return; - } -} -#endif - - -static void +static gboolean shape_released (GtkWidget *widget) { gtk_grab_remove (widget); gdk_pointer_ungrab (0); gdk_flush(); + + return FALSE; } - -static void +static gboolean shape_motion (GtkWidget *widget, GdkEventMotion *event) { @@ -539,21 +442,25 @@ shape_motion (GtkWidget *widget, GDK_BUTTON4_MASK| GDK_BUTTON5_MASK)) { - p = gtk_object_get_user_data (GTK_OBJECT (widget)); + p = g_object_get_data (G_OBJECT (widget), "cursor-offset"); + if (!p) + return FALSE; - gtk_widget_set_uposition (widget, xp - p->x, yp - p->y); + gtk_window_move (GTK_WINDOW (widget), xp - p->x, yp - p->y); } else /* the user has released all buttons */ { shape_released(widget); } + + return FALSE; } -#ifdef RAPH_IS_HOME -static void -repaint_da (GtkWidget *darea, - gpointer data) +static gboolean +repaint_da (GtkWidget *darea, + GdkEventExpose *event, + gpointer data) { /* printf("Repaint! Woohoo!\n");*/ gdk_draw_rgb_image (drawing_area->window, @@ -561,12 +468,15 @@ repaint_da (GtkWidget *darea, 0, 0, width, height, (total_frames==1)?GDK_RGB_DITHER_MAX:DITHERTYPE, drawing_area_data, width * 3); + + return TRUE; } -static void -repaint_sda (GtkWidget *darea, - gpointer data) +static gboolean +repaint_sda (GtkWidget *darea, + GdkEventExpose *event, + gpointer data) { /*printf("Repaint! Woohoo!\n");*/ gdk_draw_rgb_image (shape_drawing_area->window, @@ -574,62 +484,36 @@ repaint_sda (GtkWidget *darea, 0, 0, width, height, (total_frames==1)?GDK_RGB_DITHER_MAX:DITHERTYPE, shape_drawing_area_data, width * 3); + + return TRUE; } -#endif -static void +static gboolean preview_pressed (GtkWidget *widget, GdkEventButton *event) { -#ifdef RAPH_IS_HOME -#else - gint i; -#endif gint xp, yp; GdkModifierType mask; - if (shaping) return; + if (shaping) + return FALSE; -#ifdef RAPH_IS_HOME /* Create a total-alpha buffer merely for the not-shaped drawing area to now display. */ drawing_area_data = g_malloc (width * height * 3); total_alpha_preview (drawing_area_data); -#else - /* put current preview buf into shaped buf */ - for (i=0;ix, yp - event->y); + gtk_window_move (GTK_WINDOW (shape_window), + xp - event->x, yp - event->y); gtk_widget_show (shape_window); gdk_window_set_back_pixmap(shape_window->window, NULL, 0); -#ifdef RAPH_IS_HOME gdk_window_set_back_pixmap(shape_drawing_area->window, NULL, 1); -#else - gdk_window_set_back_pixmap(shape_fixed->window, NULL, 1); -#endif -#ifdef RAPH_IS_HOME -#else - for (i=0;i1) gtk_widget_show (GTK_WIDGET (progress)); } @@ -815,7 +677,6 @@ build_dialog (GimpImageBaseType basetype, /* let's get into shape. */ shape_window = gtk_window_new (GTK_WINDOW_POPUP); { -#ifdef RAPH_IS_HOME shape_drawing_area = gtk_drawing_area_new (); { gtk_widget_set_size_request (shape_drawing_area, width, height); @@ -825,68 +686,36 @@ build_dialog (GimpImageBaseType basetype, gtk_widget_set_events (shape_drawing_area, gtk_widget_get_events (shape_drawing_area) | GDK_BUTTON_PRESS_MASK); -#else - shape_fixed = gtk_fixed_new (); - { - gtk_widget_set_size_request (shape_fixed, width, height); - gtk_container_add (GTK_CONTAINER (shape_window), shape_fixed); - - shape_preview = - GTK_PREVIEW (gtk_preview_new (GTK_PREVIEW_COLOR)); /* FIXME */ - { - gtk_preview_size (shape_preview, width, height); - } - } - gtk_widget_show (shape_fixed); -#endif gtk_widget_realize (shape_window); -#ifdef RAPH_IS_HOME -#else - shape_pixmap = gdk_pixmap_new (shape_window->window, - width, height, - gtk_preview_get_visual()->depth); -#endif - gdk_window_set_back_pixmap(shape_window->window, NULL, 0); cursor = gdk_cursor_new (GDK_CENTER_PTR); gdk_window_set_cursor(shape_window->window, cursor); gdk_cursor_unref (cursor); - gtk_signal_connect (GTK_OBJECT (shape_window), "button_press_event", - GTK_SIGNAL_FUNC (shape_pressed),NULL); - gtk_signal_connect (GTK_OBJECT (shape_window), "button_release_event", - GTK_SIGNAL_FUNC (shape_released),NULL); - gtk_signal_connect (GTK_OBJECT (shape_window), "motion_notify_event", - GTK_SIGNAL_FUNC (shape_motion),NULL); + g_signal_connect (G_OBJECT (shape_window), "button_press_event", + G_CALLBACK (shape_pressed),NULL); + g_signal_connect (G_OBJECT (shape_window), "button_release_event", + G_CALLBACK (shape_released),NULL); + g_signal_connect (G_OBJECT (shape_window), "motion_notify_event", + G_CALLBACK (shape_motion),NULL); icon_pos = g_new (CursorOffset, 1); - gtk_object_set_user_data(GTK_OBJECT(shape_window), icon_pos); + g_object_set_data (G_OBJECT (shape_window), "cursor-offset", icon_pos); } /* gtk_widget_show (shape_window);*/ - gtk_signal_connect (GTK_OBJECT (eventbox), "button_press_event", - GTK_SIGNAL_FUNC (preview_pressed),NULL); + g_signal_connect (G_OBJECT (eventbox), "button_press_event", + G_CALLBACK (preview_pressed), NULL); -#ifdef I_AM_STUPID - gtk_signal_connect (GTK_OBJECT (shape_window), "expose_event", - GTK_SIGNAL_FUNC (unblocked_expose),shape_window); -#endif + g_signal_connect (G_OBJECT (drawing_area), "expose_event", + G_CALLBACK (repaint_da), drawing_area); -#ifdef RAPH_IS_HOME - gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event", - GTK_SIGNAL_FUNC (repaint_da), drawing_area); + g_signal_connect (G_OBJECT (shape_drawing_area), "expose_event", + G_CALLBACK (maybeblocked_expose), shape_drawing_area); - gtk_signal_connect (GTK_OBJECT (shape_drawing_area), "expose_event", - GTK_SIGNAL_FUNC (maybeblocked_expose), - shape_drawing_area); -#else - gtk_signal_connect (GTK_OBJECT (shape_fixed), "expose_event", - GTK_SIGNAL_FUNC (blocked_expose),shape_fixed); -#endif - - root_win = gdk_window_foreign_new (GDK_ROOT_WINDOW ()); + root_win = gdk_get_default_root_window (); } @@ -930,21 +759,6 @@ do_playback (void) /* Make sure that whole preview is dirtied with pure-alpha */ total_alpha_preview(preview_data); -#ifdef RAPH_IS_HOME - /* gdk_draw_rgb_image (drawing_area->window, - drawing_area->style->white_gc, - 0, 0, width, height, - DITHERTYPE, - preview_data, width * 3);*/ -#else - for (i=0;iwindow, shape_drawing_area->style->white_gc, @@ -1113,18 +926,9 @@ render_frame (gint32 whichframe) (total_frames==1)?GDK_RGB_DITHER_MAX :DITHERTYPE, preview_data, width * 3); -#else - for (i=0;iwindow, drawing_area->style->white_gc, @@ -1132,14 +936,6 @@ render_frame (gint32 whichframe) (total_frames==1)?GDK_RGB_DITHER_MAX :DITHERTYPE, preview_data, width * 3); -#else - for (i=0;i=0 && iwindow, shape_drawing_area->style->white_gc, @@ -1253,21 +1038,12 @@ render_frame (gint32 whichframe) (total_frames==1)?GDK_RGB_DITHER_MAX :DITHERTYPE, preview_data, width * 3); -#else - for (i=0;i=0 && iwindow, drawing_area->style->white_gc, 0, 0, width, height, (total_frames==1)?GDK_RGB_DITHER_MAX: DITHERTYPE, preview_data, width * 3); -#else - for (i=0;iwindow, shape_drawing_area->style->white_gc, @@ -1393,32 +1150,15 @@ render_frame (gint32 whichframe) (total_frames==1)?GDK_RGB_DITHER_MAX: DITHERTYPE, preview_data, width * 3); -#else - for (i=0;iwindow, drawing_area->style->white_gc, 0, 0, width, height, (total_frames==1)?GDK_RGB_DITHER_MAX: DITHERTYPE, preview_data, width * 3); -#else - for (i=0;i=0 && iwindow, shape_drawing_area->style->white_gc, @@ -1538,21 +1267,12 @@ render_frame (gint32 whichframe) (total_frames==1)?GDK_RGB_DITHER_MAX :DITHERTYPE, preview_data, width * 3); -#else - for (i=0;i=0 && iwindow, drawing_area->style->white_gc, 0, 0, width, height, (total_frames==1)?GDK_RGB_DITHER_MAX :DITHERTYPE, preview_data, width * 3); -#else - for (i=0;iwindow, shape_pixmap, - FALSE); - - reshape_from_bitmap(shape_preview_mask); - - gdk_flush(); - - gtk_widget_queue_draw(shape_window); - } -#endif /* ! RAPH_IS_HOME */ + gchar *text; /* update the dialog's progress bar */ - gtk_progress_bar_update (progress, - ((float)frame_number/(float)(total_frames-0.999))); + gtk_progress_bar_set_fraction (progress, + ((float)frame_number / (float)(total_frames-0.999))); + + text = g_strdup_printf (_("Frame %d of %d"), frame_number, total_frames); + gtk_progress_bar_set_text (progress, text); + g_free (text); } @@ -1679,10 +1356,8 @@ init_preview_misc (void) } } -#ifdef RAPH_IS_HOME drawing_area_data = preview_data; shape_drawing_area_data = preview_data; -#endif } @@ -1731,7 +1406,7 @@ do_step (void) /* Callbacks */ -static gint +static gboolean window_delete_callback (GtkWidget *widget, GdkEvent *event, gpointer data)