plug-ins/print/gimp_color_window.c fixed some obvious problems like

2003-02-11  Sven Neumann  <sven@gimp.org>

	* plug-ins/print/gimp_color_window.c
	* plug-ins/print/gimp_main_window.c: fixed some obvious problems
	like drawing outside the expose_event handler and not returning a
	value from event handlers. This code really is a mess :(
This commit is contained in:
Sven Neumann 2003-02-11 13:50:39 +00:00 committed by Sven Neumann
parent c5477b1876
commit b0223ce4f9
2 changed files with 59 additions and 106 deletions

View File

@ -123,13 +123,19 @@ gimp_build_dither_combo (void)
void void
gimp_redraw_color_swatch (void) gimp_redraw_color_swatch (void)
{
if (swatch == NULL)
return;
gtk_widget_queue_draw (swatch);
}
static gboolean
gimp_color_swatch_expose (void)
{ {
static GdkGC *gc = NULL; static GdkGC *gc = NULL;
static GdkColormap *cmap; static GdkColormap *cmap;
if (swatch == NULL || swatch->window == NULL)
return;
if (gc == NULL) if (gc == NULL)
{ {
gc = gdk_gc_new (swatch->window); gc = gdk_gc_new (swatch->window);
@ -144,6 +150,8 @@ gimp_redraw_color_swatch (void)
thumbnail_w, thumbnail_h, GDK_RGB_DITHER_NORMAL, thumbnail_w, thumbnail_h, GDK_RGB_DITHER_NORMAL,
adjusted_thumbnail_data, adjusted_thumbnail_data,
adjusted_thumbnail_bpp * thumbnail_w); adjusted_thumbnail_bpp * thumbnail_w);
return FALSE;
} }
/* /*
@ -221,7 +229,7 @@ gimp_create_color_adjust_window (void)
gimp_help_set_help_data (event_box, _("Image Preview"), NULL); gimp_help_set_help_data (event_box, _("Image Preview"), NULL);
g_signal_connect (swatch, "expose_event", g_signal_connect (swatch, "expose_event",
G_CALLBACK (gimp_redraw_color_swatch), G_CALLBACK (gimp_color_swatch_expose),
NULL); NULL);
/* /*

View File

@ -110,6 +110,7 @@ static GtkWidget *ppd_file; /* PPD file entry */
static GtkWidget *ppd_label; /* PPD file entry */ static GtkWidget *ppd_label; /* PPD file entry */
static GtkWidget *ppd_button; /* PPD file browse button */ static GtkWidget *ppd_button; /* PPD file browse button */
static GtkWidget *output_cmd; /* Output command text entry */ static GtkWidget *output_cmd; /* Output command text entry */
static GtkWidget *output_label; /* Output command label */
static GtkWidget *ppd_browser; /* File selection dialog for PPD files */ static GtkWidget *ppd_browser; /* File selection dialog for PPD files */
static GtkWidget *new_printer_dialog; /* New printer dialog window */ static GtkWidget *new_printer_dialog; /* New printer dialog window */
static GtkWidget *new_printer_entry; /* New printer text entry */ static GtkWidget *new_printer_entry; /* New printer text entry */
@ -125,10 +126,11 @@ static gboolean suppress_scaling_callback = FALSE;
static gint suppress_preview_update = 0; static gint suppress_preview_update = 0;
static gint preview_valid = 0; static gint preview_valid = 0;
static gint frame_valid = 0;
static gint need_exposure = 0;
static GtkWidget *preview = NULL; /* Preview drawing area widget */ static GtkWidget *preview = NULL; /* Preview drawing area widget */
static gint paper_left = 0;
static gint paper_top = 0;
static gint orient = 0;
static gint mouse_x; /* Last mouse X */ static gint mouse_x; /* Last mouse X */
static gint mouse_y; /* Last mouse Y */ static gint mouse_y; /* Last mouse Y */
static gint old_top; /* Previous position */ static gint old_top; /* Previous position */
@ -203,11 +205,11 @@ static void gimp_file_ok_callback (void);
static void gimp_file_cancel_callback (void); static void gimp_file_cancel_callback (void);
static void gimp_preview_update (void); static void gimp_preview_update (void);
static void gimp_preview_expose (void); static gboolean gimp_preview_expose (void);
static void gimp_preview_button_callback (GtkWidget *widget, static gboolean gimp_preview_button_callback (GtkWidget *widget,
GdkEventButton *bevent, GdkEventButton *bevent,
gpointer data); gpointer data);
static void gimp_preview_motion_callback (GtkWidget *widget, static gboolean gimp_preview_motion_callback (GtkWidget *widget,
GdkEventMotion *mevent, GdkEventMotion *mevent,
gpointer data); gpointer data);
static void gimp_position_callback (GtkWidget *widget); static void gimp_position_callback (GtkWidget *widget);
@ -757,11 +759,11 @@ create_printer_dialog (void)
* Print command. * Print command.
*/ */
label = gtk_label_new (_("Command:")); output_label = gtk_label_new (_("Command:"));
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); gtk_misc_set_alignment (GTK_MISC (output_label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3, gtk_table_attach (GTK_TABLE (table), output_label, 0, 1, 2, 3,
GTK_FILL, GTK_FILL, 0, 0); GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show (label); gtk_widget_show (output_label);
output_cmd = gtk_entry_new (); output_cmd = gtk_entry_new ();
gtk_table_attach (GTK_TABLE (table), output_cmd, 1, 2, 2, 3, gtk_table_attach (GTK_TABLE (table), output_cmd, 1, 2, 2, 3,
@ -1873,7 +1875,6 @@ gimp_plist_callback (GtkWidget *widget,
gint i; gint i;
const gchar *default_parameter; const gchar *default_parameter;
gimp_invalidate_frame ();
gimp_invalidate_preview_thumbnail (); gimp_invalidate_preview_thumbnail ();
reset_preview (); reset_preview ();
@ -2076,7 +2077,6 @@ static void
gimp_media_size_callback (GtkWidget *widget, gimp_media_size_callback (GtkWidget *widget,
gpointer data) gpointer data)
{ {
gimp_invalidate_frame ();
gimp_invalidate_preview_thumbnail (); gimp_invalidate_preview_thumbnail ();
reset_preview (); reset_preview ();
@ -2218,7 +2218,6 @@ gimp_media_type_callback (GtkWidget *widget,
const gchar *new_media_type = const gchar *new_media_type =
Combo_get_name (media_type_combo, num_media_types, media_types); Combo_get_name (media_type_combo, num_media_types, media_types);
gimp_invalidate_frame ();
gimp_invalidate_preview_thumbnail (); gimp_invalidate_preview_thumbnail ();
reset_preview (); reset_preview ();
stp_set_media_type (*pv, new_media_type); stp_set_media_type (*pv, new_media_type);
@ -2235,7 +2234,6 @@ gimp_media_source_callback (GtkWidget *widget,
const gchar *new_media_source = const gchar *new_media_source =
Combo_get_name (media_source_combo, num_media_sources, media_sources); Combo_get_name (media_source_combo, num_media_sources, media_sources);
gimp_invalidate_frame ();
gimp_invalidate_preview_thumbnail (); gimp_invalidate_preview_thumbnail ();
reset_preview (); reset_preview ();
stp_set_media_source (*pv, new_media_source); stp_set_media_source (*pv, new_media_source);
@ -2252,7 +2250,6 @@ gimp_ink_type_callback (GtkWidget *widget,
const gchar *new_ink_type = const gchar *new_ink_type =
Combo_get_name (ink_type_combo, num_ink_types, ink_types); Combo_get_name (ink_type_combo, num_ink_types, ink_types);
gimp_invalidate_frame ();
gimp_invalidate_preview_thumbnail (); gimp_invalidate_preview_thumbnail ();
reset_preview (); reset_preview ();
stp_set_ink_type (*pv, new_ink_type); stp_set_ink_type (*pv, new_ink_type);
@ -2269,7 +2266,6 @@ gimp_resolution_callback (GtkWidget *widget,
const gchar *new_resolution = const gchar *new_resolution =
Combo_get_name (resolution_combo, num_resolutions, resolutions); Combo_get_name (resolution_combo, num_resolutions, resolutions);
gimp_invalidate_frame();
gimp_invalidate_preview_thumbnail(); gimp_invalidate_preview_thumbnail();
reset_preview(); reset_preview();
stp_set_resolution(*pv, new_resolution); stp_set_resolution(*pv, new_resolution);
@ -2287,7 +2283,6 @@ gimp_orientation_callback (GtkWidget *widget,
if (stp_get_orientation (*pv) != (gint) data) if (stp_get_orientation (*pv) != (gint) data)
{ {
gimp_invalidate_frame ();
gimp_invalidate_preview_thumbnail (); gimp_invalidate_preview_thumbnail ();
stp_set_orientation (*pv, (gint) data); stp_set_orientation (*pv, (gint) data);
stp_set_left (*pv, -1); stp_set_left (*pv, -1);
@ -2308,7 +2303,6 @@ gimp_output_type_callback (GtkWidget *widget,
if (GTK_TOGGLE_BUTTON (widget)->active) if (GTK_TOGGLE_BUTTON (widget)->active)
{ {
stp_set_output_type (*pv, (gint) data); stp_set_output_type (*pv, (gint) data);
gimp_invalidate_frame ();
gimp_invalidate_preview_thumbnail (); gimp_invalidate_preview_thumbnail ();
gimp_update_adjusted_thumbnail (); gimp_update_adjusted_thumbnail ();
} }
@ -2349,7 +2343,6 @@ gimp_image_type_callback (GtkWidget *widget,
if (GTK_TOGGLE_BUTTON (widget)->active) if (GTK_TOGGLE_BUTTON (widget)->active)
{ {
stp_set_image_type (*pv, (gint) data); stp_set_image_type (*pv, (gint) data);
gimp_invalidate_frame ();
gimp_invalidate_preview_thumbnail (); gimp_invalidate_preview_thumbnail ();
gimp_update_adjusted_thumbnail (); gimp_update_adjusted_thumbnail ();
} }
@ -2452,9 +2445,15 @@ gimp_setup_update (void)
gtk_entry_set_text (GTK_ENTRY (output_cmd), stp_get_output_to (*pv)); gtk_entry_set_text (GTK_ENTRY (output_cmd), stp_get_output_to (*pv));
if (plist_current == 0) if (plist_current == 0)
{
gtk_widget_hide (output_label);
gtk_widget_hide (output_cmd); gtk_widget_hide (output_cmd);
}
else else
{
gtk_widget_show (output_label);
gtk_widget_show (output_cmd); gtk_widget_show (output_cmd);
}
gtk_clist_moveto (GTK_CLIST (printer_driver), idx, -1, 0.5, 0.5); gtk_clist_moveto (GTK_CLIST (printer_driver), idx, -1, 0.5, 0.5);
} }
@ -2498,7 +2497,6 @@ static void
gimp_setup_ok_callback (void) gimp_setup_ok_callback (void)
{ {
reset_preview (); reset_preview ();
gimp_invalidate_frame ();
gimp_invalidate_preview_thumbnail (); gimp_invalidate_preview_thumbnail ();
stp_set_driver (*pv, stp_printer_get_driver (current_printer)); stp_set_driver (*pv, stp_printer_get_driver (current_printer));
@ -2520,7 +2518,6 @@ gimp_new_printer_ok_callback (void)
const gchar *data = gtk_entry_get_text (GTK_ENTRY (new_printer_entry)); const gchar *data = gtk_entry_get_text (GTK_ENTRY (new_printer_entry));
gp_plist_t key; gp_plist_t key;
gimp_invalidate_frame ();
gimp_invalidate_preview_thumbnail (); gimp_invalidate_preview_thumbnail ();
reset_preview (); reset_preview ();
initialize_printer (&key); initialize_printer (&key);
@ -2561,7 +2558,6 @@ gimp_print_driver_callback (GtkWidget *widget, /* I - Driver list */
{ {
stp_vars_t printvars; stp_vars_t printvars;
gimp_invalidate_frame ();
gimp_invalidate_preview_thumbnail (); gimp_invalidate_preview_thumbnail ();
reset_preview (); reset_preview ();
data = gtk_clist_get_row_data (GTK_CLIST (widget), row); data = gtk_clist_get_row_data (GTK_CLIST (widget), row);
@ -2689,12 +2685,6 @@ gimp_invalidate_preview_thumbnail (void)
preview_valid = 0; preview_valid = 0;
} }
void
gimp_invalidate_frame (void)
{
frame_valid = 0;
}
static void static void
draw_arrow (GdkWindow *w, draw_arrow (GdkWindow *w,
GdkGC *gc, GdkGC *gc,
@ -2748,9 +2738,7 @@ draw_arrow (GdkWindow *w,
* gimp_preview_update_callback() - * gimp_preview_update_callback() -
*/ */
static void static void
gimp_do_preview_thumbnail (gint paper_left, gimp_do_preview_thumbnail (void)
gint paper_top,
gint orient)
{ {
static GdkGC *gc = NULL; static GdkGC *gc = NULL;
static GdkGC *gcinv = NULL; static GdkGC *gcinv = NULL;
@ -2850,8 +2838,6 @@ gimp_do_preview_thumbnail (gint paper_left,
preview_valid = 1; preview_valid = 1;
} }
if (need_exposure)
{
/* draw paper frame */ /* draw paper frame */
gdk_draw_rectangle (preview->window, gc, 0, gdk_draw_rectangle (preview->window, gc, 0,
paper_left, paper_top, paper_left, paper_top,
@ -2863,49 +2849,6 @@ gimp_do_preview_thumbnail (gint paper_left,
printable_left, printable_top, printable_left, printable_top,
MAX(2, preview_ppi * printable_width / 72), MAX(2, preview_ppi * printable_width / 72),
MAX(2, preview_ppi * printable_height / 72)); MAX(2, preview_ppi * printable_height / 72));
need_exposure = 0;
}
else if (!frame_valid)
{
gdk_window_clear (preview->window);
/* draw paper frame */
gdk_draw_rectangle (preview->window, gc, 0,
paper_left, paper_top,
MAX(2, preview_ppi * paper_width / 72),
MAX(2, preview_ppi * paper_height / 72));
/* draw printable frame */
gdk_draw_rectangle (preview->window, gc, 0,
printable_left, printable_top,
MAX(2, preview_ppi * printable_width / 72),
MAX(2, preview_ppi * printable_height / 72));
frame_valid = 1;
}
else
{
if (opx + opw <= preview_x || opy + oph <= preview_y ||
preview_x + preview_w <= opx || preview_y + preview_h <= opy)
{
gdk_window_clear_area (preview->window, opx, opy, opw, oph);
}
else
{
if (opx < preview_x)
gdk_window_clear_area (preview->window,
opx, opy, preview_x - opx, oph);
if (opy < preview_y)
gdk_window_clear_area (preview->window,
opx, opy, opw, preview_y - opy);
if (opx + opw > preview_x + preview_w)
gdk_window_clear_area (preview->window,
preview_x + preview_w, opy,
(opx + opw) - (preview_x + preview_w), oph);
if (opy + oph > preview_y + preview_h)
gdk_window_clear_area (preview->window,
opx, preview_y + preview_h,
opw, (opy + oph) - (preview_y + preview_h));
}
}
draw_arrow (preview->window, gcset, paper_left, paper_top, orient); draw_arrow (preview->window, gcset, paper_left, paper_top, orient);
@ -2927,11 +2870,12 @@ gimp_do_preview_thumbnail (gint paper_left,
opw = preview_w; opw = preview_w;
} }
static void static gboolean
gimp_preview_expose (void) gimp_preview_expose (void)
{ {
need_exposure = 1; gimp_do_preview_thumbnail ();
gimp_preview_update ();
return FALSE;
} }
static void static void
@ -3135,16 +3079,13 @@ gimp_preview_update (void)
/* draw image */ /* draw image */
if (! suppress_preview_update) if (! suppress_preview_update)
{ gtk_widget_queue_draw (preview);
gimp_do_preview_thumbnail (paper_left, paper_top, orient);
gdk_flush ();
}
} }
/* /*
* gimp_preview_button_callback() - * gimp_preview_button_callback() -
*/ */
static void static gboolean
gimp_preview_button_callback (GtkWidget *widget, gimp_preview_button_callback (GtkWidget *widget,
GdkEventButton *event, GdkEventButton *event,
gpointer data) gpointer data)
@ -3199,20 +3140,22 @@ gimp_preview_button_callback (GtkWidget *widget,
preview_active = 0; preview_active = 0;
} }
} }
return FALSE;
} }
/* /*
* gimp_preview_motion_callback() - * gimp_preview_motion_callback() -
*/ */
static void static gboolean
gimp_preview_motion_callback (GtkWidget *widget, gimp_preview_motion_callback (GtkWidget *widget,
GdkEventMotion *event, GdkEventMotion *event,
gpointer data) gpointer data)
{ {
if (event->type != GDK_MOTION_NOTIFY) if (event->type != GDK_MOTION_NOTIFY)
return; return FALSE;
if (preview_active != 1) if (preview_active != 1)
return; return FALSE;
if (stp_get_left(*pv) < 0 || stp_get_top(*pv) < 0) if (stp_get_left(*pv) < 0 || stp_get_top(*pv) < 0)
{ {
stp_set_left(*pv, 72 * (printable_width - print_width) / 20); stp_set_left(*pv, 72 * (printable_width - print_width) / 20);
@ -3227,7 +3170,7 @@ gimp_preview_motion_callback (GtkWidget *widget,
else if (dy > dx && dy > 3) else if (dy > dx && dy > 3)
move_constraint = MOVE_VERTICAL; move_constraint = MOVE_VERTICAL;
else else
return; return FALSE;
} }
if (mouse_button == 2) if (mouse_button == 2)
@ -3288,7 +3231,7 @@ gimp_preview_motion_callback (GtkWidget *widget,
} }
} }
if (!changes) if (!changes)
return; return FALSE;
} }
else else
{ {
@ -3335,8 +3278,10 @@ gimp_preview_motion_callback (GtkWidget *widget,
mouse_x = event->x; mouse_x = event->x;
mouse_y = event->y; mouse_y = event->y;
if (!changes) if (!changes)
return; return FALSE;
} }
gimp_preview_update (); gimp_preview_update ();
return FALSE;
} }