diff --git a/ChangeLog b/ChangeLog index 685faabf0eed1ced9e8e81e5f344b4da40dad36e..0fc7118e286f4feae8e1fdab607201f5969a67ca 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2005-11-21 Sven Neumann + + * plug-ins/MapObject/mapobject_main.[ch] + * plug-ins/MapObject/mapobject_preview.c + * plug-ins/MapObject/mapobject_ui.c: must not keep pointers in the + struct that is being used to preserve data between invocations of + the plug-in. Fixes bug #321932. + 2005-11-19 Michael Natterer * app/tools/gimppaintoptions-gui.c diff --git a/plug-ins/MapObject/mapobject_main.c b/plug-ins/MapObject/mapobject_main.c index 69198e101ff8704c606c0bf8df0c50cf76597865..ad345ea3a0dfd39394e9fe832a990501c817a254 100644 --- a/plug-ins/MapObject/mapobject_main.c +++ b/plug-ins/MapObject/mapobject_main.c @@ -74,9 +74,7 @@ set_default_settings (void) mapvals.cylinder_radius = 0.25; mapvals.cylinder_length = 1.0; - mapvals.zoom_model = gimp_zoom_model_new (); - gimp_zoom_model_set_range (mapvals.zoom_model, 0.25, 1.0); - + mapvals.zoom = 1.0; mapvals.lightsource.type = POINT_LIGHT; mapvals.antialiasing = TRUE; diff --git a/plug-ins/MapObject/mapobject_main.h b/plug-ins/MapObject/mapobject_main.h index b879df10cfb61c851e35c0845ad3a90cb1a48210..cfd8ca716c8738aafeef1b1f832dbfbb996143f9 100644 --- a/plug-ins/MapObject/mapobject_main.h +++ b/plug-ins/MapObject/mapobject_main.h @@ -63,8 +63,7 @@ typedef struct gint showgrid; gint showcaps; - GimpZoomModel *zoom_model; - + gdouble zoom; gdouble alpha,beta,gamma; gdouble maxdepth; gdouble pixeltreshold; diff --git a/plug-ins/MapObject/mapobject_preview.c b/plug-ins/MapObject/mapobject_preview.c index cdc003089582a479e7844aaded44a67cf751a7ad..0ddec02e1ecf7999da223b324b35c202d0aaad43 100644 --- a/plug-ins/MapObject/mapobject_preview.c +++ b/plug-ins/MapObject/mapobject_preview.c @@ -396,10 +396,9 @@ update_light (gint xpos, gint ypos) { gint startx, starty, pw, ph; - gdouble zoom = gimp_zoom_model_get_factor (mapvals.zoom_model); - pw = PREVIEW_WIDTH * zoom; - ph = PREVIEW_HEIGHT * zoom; + pw = PREVIEW_WIDTH * mapvals.zoom; + ph = PREVIEW_HEIGHT * mapvals.zoom; startx = (PREVIEW_WIDTH - pw) / 2; starty = (PREVIEW_HEIGHT - ph) / 2; @@ -416,7 +415,6 @@ void draw_preview_image (gint docompute) { gint startx, starty, pw, ph; - gdouble zoom; GdkColor color; color.red = 0x0; @@ -432,10 +430,8 @@ draw_preview_image (gint docompute) gdk_gc_set_function (gc, GDK_COPY); linetab[0].x1 = -1; - zoom = gimp_zoom_model_get_factor (mapvals.zoom_model); - - pw = PREVIEW_WIDTH * zoom; - ph = PREVIEW_HEIGHT * zoom; + pw = PREVIEW_WIDTH * mapvals.zoom; + ph = PREVIEW_HEIGHT * mapvals.zoom; startx = (PREVIEW_WIDTH - pw) / 2; starty = (PREVIEW_HEIGHT - ph) / 2; @@ -475,8 +471,7 @@ draw_preview_image (gint docompute) void draw_preview_wireframe (void) { - gint startx, starty, pw, ph; - gdouble zoom; + gint startx, starty, pw, ph; GdkColor color; color.red = 0x0; @@ -491,10 +486,8 @@ draw_preview_wireframe (void) gdk_gc_set_function (gc, GDK_INVERT); - zoom = gimp_zoom_model_get_factor (mapvals.zoom_model); - - pw = PREVIEW_WIDTH * zoom; - ph = PREVIEW_HEIGHT * zoom; + pw = PREVIEW_WIDTH * mapvals.zoom; + ph = PREVIEW_HEIGHT * mapvals.zoom; startx = (PREVIEW_WIDTH - pw) / 2; starty = (PREVIEW_HEIGHT - ph) / 2; diff --git a/plug-ins/MapObject/mapobject_ui.c b/plug-ins/MapObject/mapobject_ui.c index ace33548257bf67da253c878b3d682c8d52721ed..d17601798e155b63e4d93ca5d2e3f0173b848a13 100644 --- a/plug-ins/MapObject/mapobject_ui.c +++ b/plug-ins/MapObject/mapobject_ui.c @@ -300,10 +300,13 @@ preview_callback (GtkWidget *widget, } static void -zoom_notify_callback (GObject *model) +zoomed_callback (GimpZoomModel *model) { + mapvals.zoom = gimp_zoom_model_get_factor (model); + if (linetab[0].x1 != -1) clear_wireframe (); + draw_preview_image (TRUE); } @@ -1330,13 +1333,14 @@ create_main_notebook (GtkWidget *container) gboolean main_dialog (GimpDrawable *drawable) { - GtkWidget *main_hbox; - GtkWidget *vbox; - GtkWidget *hbox; - GtkWidget *frame; - GtkWidget *button; - GtkWidget *toggle; - gboolean run = FALSE; + GtkWidget *main_hbox; + GtkWidget *vbox; + GtkWidget *hbox; + GtkWidget *frame; + GtkWidget *button; + GtkWidget *toggle; + GimpZoomModel *model; + gboolean run = FALSE; gimp_ui_init ("MapObject", FALSE); @@ -1404,18 +1408,20 @@ main_dialog (GimpDrawable *drawable) gimp_help_set_help_data (button, _("Recompute preview image"), NULL); - button = gimp_zoom_button_new (mapvals.zoom_model, - GIMP_ZOOM_IN, GTK_ICON_SIZE_MENU); + model = gimp_zoom_model_new (); + gimp_zoom_model_set_range (model, 0.25, 1.0); + gimp_zoom_model_zoom (model, GIMP_ZOOM_TO, mapvals.zoom); + + button = gimp_zoom_button_new (model, GIMP_ZOOM_IN, GTK_ICON_SIZE_MENU); gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0); gtk_widget_show (button); - button = gimp_zoom_button_new (mapvals.zoom_model, - GIMP_ZOOM_OUT, GTK_ICON_SIZE_MENU); + button = gimp_zoom_button_new (model, GIMP_ZOOM_OUT, GTK_ICON_SIZE_MENU); gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0); gtk_widget_show (button); - g_signal_connect (mapvals.zoom_model, "notify::value", - G_CALLBACK (zoom_notify_callback), + g_signal_connect (model, "zoomed", + G_CALLBACK (zoomed_callback), NULL); toggle = gtk_check_button_new_with_mnemonic (_("Show preview _wireframe"));