From 26c2c6afdadcce79e9b661cfa34f9da84747023f Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Mon, 4 Aug 2008 20:11:35 +0000 Subject: [PATCH] :size-changed-detailed): change double to int in signal parameters. 2008-08-04 Michael Natterer * app/core/gimpimage.[ch] (GimpImage::size-changed-detailed): change double to int in signal parameters. Remove gimp_image_emit_size_changed_signals() and call gimp_viewable_size_changed() in size-changed-detailed's default handler. * app/core/gimpimageundo.[ch] * app/core/gimpimage-undo-push.[ch]: change double to int in previous-origin related code. * app/core/gimpimage-undo.c * app/core/gimpimage-scale.c * app/core/gimpimage-crop.c * app/core/gimpimage-rotate.c * app/core/gimpimage-resize.c: call gimp_image_size_changed_detailed() instead of the removed gimp_image_emit_size_changed_signals() * app/display/gimpdisplayshell-scroll.[ch]: remove gimp_display_shell_handle_size_changed_detailed() because it handles both scrolling and scaling and doesn't belong here. * app/display/gimpdisplayshell-handlers.c: moved its code back to gimp_display_shell_size_changed_detailed_handler() and follow the double -> int change above. svn path=/trunk/; revision=26367 --- ChangeLog | 28 +++++++++++++++ app/core/gimpimage-crop.c | 2 +- app/core/gimpimage-resize.c | 2 +- app/core/gimpimage-rotate.c | 2 +- app/core/gimpimage-scale.c | 2 +- app/core/gimpimage-undo-push.c | 4 +-- app/core/gimpimage-undo-push.h | 4 +-- app/core/gimpimage-undo.c | 7 ++-- app/core/gimpimage.c | 46 +++++++++++++------------ app/core/gimpimage.h | 17 ++++----- app/core/gimpimageundo.c | 38 ++++++++++---------- app/core/gimpimageundo.h | 4 +-- app/display/gimpdisplayshell-handlers.c | 34 ++++++++++++++---- app/display/gimpdisplayshell-scroll.c | 41 ---------------------- app/display/gimpdisplayshell-scroll.h | 4 --- 15 files changed, 119 insertions(+), 116 deletions(-) diff --git a/ChangeLog b/ChangeLog index c23871cac3..2c6693e5cb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,31 @@ +2008-08-04 Michael Natterer + + * app/core/gimpimage.[ch] (GimpImage::size-changed-detailed): + change double to int in signal parameters. + + Remove gimp_image_emit_size_changed_signals() and call + gimp_viewable_size_changed() in size-changed-detailed's default + handler. + + * app/core/gimpimageundo.[ch] + * app/core/gimpimage-undo-push.[ch]: change double to int in + previous-origin related code. + + * app/core/gimpimage-undo.c + * app/core/gimpimage-scale.c + * app/core/gimpimage-crop.c + * app/core/gimpimage-rotate.c + * app/core/gimpimage-resize.c: call gimp_image_size_changed_detailed() + instead of the removed gimp_image_emit_size_changed_signals() + + * app/display/gimpdisplayshell-scroll.[ch]: remove + gimp_display_shell_handle_size_changed_detailed() because it + handles both scrolling and scaling and doesn't belong here. + + * app/display/gimpdisplayshell-handlers.c: moved its code back to + gimp_display_shell_size_changed_detailed_handler() and follow the + double -> int change above. + 2008-08-04 Michael Natterer * app/core/gimpimagemapconfig.c (gimp_image_map_config_compare): diff --git a/app/core/gimpimage-crop.c b/app/core/gimpimage-crop.c index 7701d17db9..d5c68b3f2a 100644 --- a/app/core/gimpimage-crop.c +++ b/app/core/gimpimage-crop.c @@ -267,7 +267,7 @@ gimp_image_crop (GimpImage *image, gimp_image_get_width (image), gimp_image_get_height (image)); - gimp_image_emit_size_changed_signals (image, -x1, -y1); + gimp_image_size_changed_detailed (image, -x1, -y1); g_object_thaw_notify (G_OBJECT (image)); } diff --git a/app/core/gimpimage-resize.c b/app/core/gimpimage-resize.c index 62f610732a..1659d8c121 100644 --- a/app/core/gimpimage-resize.c +++ b/app/core/gimpimage-resize.c @@ -220,7 +220,7 @@ gimp_image_resize_with_layers (GimpImage *image, gimp_image_undo_group_end (image); - gimp_image_emit_size_changed_signals (image, offset_x, offset_y); + gimp_image_size_changed_detailed (image, offset_x, offset_y); g_object_thaw_notify (G_OBJECT (image)); diff --git a/app/core/gimpimage-rotate.c b/app/core/gimpimage-rotate.c index ede8acef6b..53c2d20a07 100644 --- a/app/core/gimpimage-rotate.c +++ b/app/core/gimpimage-rotate.c @@ -208,7 +208,7 @@ gimp_image_rotate (GimpImage *image, gimp_image_undo_group_end (image); if (size_changed) - gimp_image_emit_size_changed_signals (image, -offset_x, -offset_y); + gimp_image_size_changed_detailed (image, -offset_x, -offset_y); g_object_thaw_notify (G_OBJECT (image)); diff --git a/app/core/gimpimage-scale.c b/app/core/gimpimage-scale.c index e33aebd53e..c1c60a94b9 100644 --- a/app/core/gimpimage-scale.c +++ b/app/core/gimpimage-scale.c @@ -212,7 +212,7 @@ gimp_image_scale (GimpImage *image, g_object_unref (sub_progress); - gimp_image_emit_size_changed_signals (image, -offset_x, -offset_y); + gimp_image_size_changed_detailed (image, -offset_x, -offset_y); g_object_thaw_notify (G_OBJECT (image)); diff --git a/app/core/gimpimage-undo-push.c b/app/core/gimpimage-undo-push.c index dc1a869b36..4525fcbc9b 100644 --- a/app/core/gimpimage-undo-push.c +++ b/app/core/gimpimage-undo-push.c @@ -81,8 +81,8 @@ gimp_image_undo_push_image_type (GimpImage *image, GimpUndo * gimp_image_undo_push_image_size (GimpImage *image, const gchar *undo_desc, - gdouble previous_origin_x, - gdouble previous_origin_y) + gint previous_origin_x, + gint previous_origin_y) { g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL); diff --git a/app/core/gimpimage-undo-push.h b/app/core/gimpimage-undo-push.h index dd3c72d171..1acb0e6937 100644 --- a/app/core/gimpimage-undo-push.h +++ b/app/core/gimpimage-undo-push.h @@ -26,8 +26,8 @@ GimpUndo * gimp_image_undo_push_image_type (GimpImage *image, const gchar *undo_desc); GimpUndo * gimp_image_undo_push_image_size (GimpImage *image, const gchar *undo_desc, - gdouble previous_origin_x, - gdouble previous_origin_y); + gint previous_origin_x, + gint previous_origin_y); GimpUndo * gimp_image_undo_push_image_resolution (GimpImage *image, const gchar *undo_desc); GimpUndo * gimp_image_undo_push_image_grid (GimpImage *image, diff --git a/app/core/gimpimage-undo.c b/app/core/gimpimage-undo.c index f799478322..0759a5f51e 100644 --- a/app/core/gimpimage-undo.c +++ b/app/core/gimpimage-undo.c @@ -381,9 +381,10 @@ gimp_image_undo_pop_stack (GimpImage *image, gimp_image_mode_changed (image); if (accum.size_changed) - gimp_image_emit_size_changed_signals (image, - accum.previous_origin_x, - accum.previous_origin_y); + gimp_image_size_changed_detailed (image, + accum.previous_origin_x, + accum.previous_origin_y); + if (accum.resolution_changed) gimp_image_resolution_changed (image); diff --git a/app/core/gimpimage.c b/app/core/gimpimage.c index 4b2f3561c8..bedfa42f80 100644 --- a/app/core/gimpimage.c +++ b/app/core/gimpimage.c @@ -148,6 +148,10 @@ static void gimp_image_invalidate_preview (GimpViewable *viewable); static void gimp_image_size_changed (GimpViewable *viewable); static gchar * gimp_image_get_description (GimpViewable *viewable, gchar **tooltip); +static void gimp_image_real_size_changed_detailed + (GimpImage *image, + gint previous_origin_x, + gint previous_origin_y); static void gimp_image_real_colormap_changed (GimpImage *image, gint color_index); static void gimp_image_real_flush (GimpImage *image, @@ -321,10 +325,10 @@ gimp_image_class_init (GimpImageClass *klass) G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (GimpImageClass, size_changed_detailed), NULL, NULL, - gimp_marshal_VOID__DOUBLE_DOUBLE, + gimp_marshal_VOID__INT_INT, G_TYPE_NONE, 2, - G_TYPE_DOUBLE, - G_TYPE_DOUBLE); + G_TYPE_INT, + G_TYPE_INT); gimp_image_signals[UNIT_CHANGED] = g_signal_new ("unit-changed", @@ -516,7 +520,11 @@ gimp_image_class_init (GimpImageClass *klass) klass->component_visibility_changed = NULL; klass->component_active_changed = NULL; klass->mask_changed = NULL; - klass->size_changed_detailed = NULL; + klass->resolution_changed = NULL; + klass->size_changed_detailed = gimp_image_real_size_changed_detailed; + klass->unit_changed = NULL; + klass->quick_mask_changed = NULL; + klass->selection_control = NULL; klass->clean = NULL; klass->dirty = NULL; @@ -1111,6 +1119,14 @@ gimp_image_get_description (GimpViewable *viewable, return retval; } +static void +gimp_image_real_size_changed_detailed (GimpImage *image, + gint previous_origin_x, + gint previous_origin_y) +{ + gimp_viewable_size_changed (GIMP_VIEWABLE (image)); +} + static void gimp_image_real_colormap_changed (GimpImage *image, gint color_index) @@ -1483,7 +1499,7 @@ gimp_image_set_resolution (GimpImage *image, image->yresolution = yresolution; gimp_image_resolution_changed (image); - gimp_image_emit_size_changed_signals (image, 0.0, 0.0); + gimp_image_size_changed_detailed (image, 0, 0); } } @@ -1816,11 +1832,12 @@ gimp_image_sample_point_removed (GimpImage *image, * position of the image in the display shell on various operations, * e.g. crop. * + * This function makes sure that GimpViewable::size-changed is also emitted. **/ void gimp_image_size_changed_detailed (GimpImage *image, - gdouble previous_origin_x, - gdouble previous_origin_y) + gint previous_origin_x, + gint previous_origin_y) { g_return_if_fail (GIMP_IS_IMAGE (image)); @@ -1857,21 +1874,6 @@ gimp_image_quick_mask_changed (GimpImage *image) g_signal_emit (image, gimp_image_signals[QUICK_MASK_CHANGED], 0); } -void -gimp_image_emit_size_changed_signals (GimpImage *image, - gdouble previous_origin_x, - gdouble previous_origin_y) -{ - /* Emit GimpViewable::size-changed */ - gimp_viewable_size_changed (GIMP_VIEWABLE (image)); - - /* Then emit basically the same signal but with more - * details. Clients can choose what signal of these two to listen to - * depending on how much info they need. - */ - gimp_image_size_changed_detailed (image, previous_origin_x, previous_origin_y); -} - /* undo */ diff --git a/app/core/gimpimage.h b/app/core/gimpimage.h index 6e45b58822..9a896c16da 100644 --- a/app/core/gimpimage.h +++ b/app/core/gimpimage.h @@ -191,6 +191,9 @@ struct _GimpImageClass GimpChannelType channel); void (* mask_changed) (GimpImage *image); void (* resolution_changed) (GimpImage *image); + void (* size_changed_detailed) (GimpImage *image, + gint previous_origin_x, + gint previous_origin_y); void (* unit_changed) (GimpImage *image); void (* quick_mask_changed) (GimpImage *image); void (* selection_control) (GimpImage *image, @@ -216,9 +219,6 @@ struct _GimpImageClass GimpSamplePoint *sample_point); void (* sample_point_removed) (GimpImage *image, GimpSamplePoint *sample_point); - void (* size_changed_detailed) (GimpImage *image, - gdouble previous_origin_x, - gdouble previous_origin_y); void (* parasite_attached) (GimpImage *image, const gchar *name); void (* parasite_detached) (GimpImage *image, @@ -322,19 +322,14 @@ void gimp_image_sample_point_added (GimpImage *image, GimpSamplePoint *sample_point); void gimp_image_sample_point_removed (GimpImage *image, GimpSamplePoint *sample_point); -void gimp_image_size_changed_detailed (GimpImage *image, - gdouble previous_origin_x, - gdouble previous_origin_y); void gimp_image_colormap_changed (GimpImage *image, gint col); void gimp_image_selection_control (GimpImage *image, GimpSelectionControl control); void gimp_image_quick_mask_changed (GimpImage *image); -void gimp_image_emit_size_changed_signals - (GimpImage *image, - gdouble previous_origin_x, - gdouble previous_origin_y); - +void gimp_image_size_changed_detailed (GimpImage *image, + gint previous_origin_x, + gint previous_origin_y); /* undo */ diff --git a/app/core/gimpimageundo.c b/app/core/gimpimageundo.c index 6eafee2fda..203b4cb4e7 100644 --- a/app/core/gimpimageundo.c +++ b/app/core/gimpimageundo.c @@ -92,18 +92,20 @@ gimp_image_undo_class_init (GimpImageUndoClass *klass) undo_class->free = gimp_image_undo_free; g_object_class_install_property (object_class, PROP_PREVIOUS_ORIGIN_X, - g_param_spec_double ("previous-origin-x", NULL, NULL, - -G_MAXDOUBLE, - G_MAXDOUBLE, - 0.0, - GIMP_PARAM_READWRITE)); + g_param_spec_int ("previous-origin-x", + NULL, NULL, + -GIMP_MAX_IMAGE_SIZE, + GIMP_MAX_IMAGE_SIZE, + 0, + GIMP_PARAM_READWRITE)); g_object_class_install_property (object_class, PROP_PREVIOUS_ORIGIN_Y, - g_param_spec_double ("previous-origin-y", NULL, NULL, - -G_MAXDOUBLE, - G_MAXDOUBLE, - 0.0, - GIMP_PARAM_READWRITE)); + g_param_spec_int ("previous-origin-y", + NULL, NULL, + -GIMP_MAX_IMAGE_SIZE, + GIMP_MAX_IMAGE_SIZE, + 0, + GIMP_PARAM_READWRITE)); g_object_class_install_property (object_class, PROP_GRID, g_param_spec_object ("grid", NULL, NULL, @@ -193,10 +195,10 @@ gimp_image_undo_set_property (GObject *object, switch (property_id) { case PROP_PREVIOUS_ORIGIN_X: - image_undo->previous_origin_x = g_value_get_double (value); + image_undo->previous_origin_x = g_value_get_int (value); break; case PROP_PREVIOUS_ORIGIN_Y: - image_undo->previous_origin_y = g_value_get_double (value); + image_undo->previous_origin_y = g_value_get_int (value); break; case PROP_GRID: { @@ -227,10 +229,10 @@ gimp_image_undo_get_property (GObject *object, switch (property_id) { case PROP_PREVIOUS_ORIGIN_X: - g_value_set_double (value, image_undo->previous_origin_x); + g_value_set_int (value, image_undo->previous_origin_x); break; case PROP_PREVIOUS_ORIGIN_Y: - g_value_set_double (value, image_undo->previous_origin_y); + g_value_set_int (value, image_undo->previous_origin_y); break; case PROP_GRID: g_value_set_object (value, image_undo->grid); @@ -293,10 +295,10 @@ gimp_image_undo_pop (GimpUndo *undo, case GIMP_UNDO_IMAGE_SIZE: { - gint width; - gint height; - gdouble previous_origin_x; - gdouble previous_origin_y; + gint width; + gint height; + gint previous_origin_x; + gint previous_origin_y; width = image_undo->width; height = image_undo->height; diff --git a/app/core/gimpimageundo.h b/app/core/gimpimageundo.h index cbc018cde5..f77cde2478 100644 --- a/app/core/gimpimageundo.h +++ b/app/core/gimpimageundo.h @@ -40,8 +40,8 @@ struct _GimpImageUndo GimpImageBaseType base_type; gint width; gint height; - gdouble previous_origin_x; - gdouble previous_origin_y; + gint previous_origin_x; + gint previous_origin_y; gdouble xresolution; gdouble yresolution; GimpUnit resolution_unit; diff --git a/app/display/gimpdisplayshell-handlers.c b/app/display/gimpdisplayshell-handlers.c index 7a6ead0cc3..dfc2366fb8 100644 --- a/app/display/gimpdisplayshell-handlers.c +++ b/app/display/gimpdisplayshell-handlers.c @@ -21,6 +21,7 @@ #include #include "libgimpcolor/gimpcolor.h" +#include "libgimpmath/gimpmath.h" #include "libgimpwidgets/gimpwidgets.h" #include "display-types.h" @@ -67,8 +68,8 @@ static void gimp_display_shell_selection_control_handler (GimpImage *i GimpDisplayShell *shell); static void gimp_display_shell_size_changed_detailed_handler (GimpImage *image, - gdouble previous_origin_x, - gdouble previous_origin_y, + gint previous_origin_x, + gint previous_origin_y, GimpDisplayShell *shell); static void gimp_display_shell_resolution_changed_handler (GimpImage *image, GimpDisplayShell *shell); @@ -481,13 +482,32 @@ gimp_display_shell_update_sample_point_handler (GimpImage *image, static void gimp_display_shell_size_changed_detailed_handler (GimpImage *image, - gdouble previous_origin_x, - gdouble previous_origin_y, + gint previous_origin_x, + gint previous_origin_y, GimpDisplayShell *shell) { - gimp_display_shell_handle_size_changed_detailed (shell, - previous_origin_x, - previous_origin_y); + if (shell->display->config->resize_windows_on_resize) + { + /* If the window is resized just center the image in it when it + * has change size + */ + gimp_display_shell_shrink_wrap (shell, FALSE); + gimp_display_shell_center_image_on_next_size_allocate (shell); + } + else + { + gint scaled_previous_origin_x = SCALEX (shell, previous_origin_x); + gint scaled_previous_origin_y = SCALEY (shell, previous_origin_y); + + /* Note that we can't use gimp_display_shell_scroll_private() here + * because that would expose the image twice, causing unwanted + * flicker. + */ + gimp_display_shell_scale_by_values (shell, gimp_zoom_model_get_factor (shell->zoom), + shell->offset_x + scaled_previous_origin_x, + shell->offset_y + scaled_previous_origin_y, + FALSE); + } } static void diff --git a/app/display/gimpdisplayshell-scroll.c b/app/display/gimpdisplayshell-scroll.c index 871c785447..8b0674391a 100644 --- a/app/display/gimpdisplayshell-scroll.c +++ b/app/display/gimpdisplayshell-scroll.c @@ -204,47 +204,6 @@ gimp_display_shell_scroll_clamp_offsets (GimpDisplayShell *shell) } } -/** - * gimp_display_shell_handle_size_changed_detailed: - * @shell: - * @previous_origin_x: - * @previous_origin_y: - * - * On e.g. an image crop we want to avoid repositioning the image - * content in the display shell if possible. - * - **/ -void -gimp_display_shell_handle_size_changed_detailed (GimpDisplayShell *shell, - gdouble previous_origin_x, - gdouble previous_origin_y) -{ - g_return_if_fail (GIMP_IS_DISPLAY_SHELL (shell)); - - if (shell->display->config->resize_windows_on_resize) - { - /* If the window is resized just center the image in it when it - * has change size - */ - gimp_display_shell_shrink_wrap (shell, FALSE); - gimp_display_shell_center_image_on_next_size_allocate (shell); - } - else - { - gint scaled_previous_origin_x = SCALEX (shell, previous_origin_x); - gint scaled_previous_origin_y = SCALEY (shell, previous_origin_y); - - /* Note that we can't use gimp_display_shell_scroll_private() here - * because that would expose the image twice, causing unwanted - * flicker. - */ - gimp_display_shell_scale_by_values (shell, gimp_zoom_model_get_factor (shell->zoom), - shell->offset_x + scaled_previous_origin_x, - shell->offset_y + scaled_previous_origin_y, - FALSE); - } -} - /** * gimp_display_shell_get_scaled_viewport: * @shell: diff --git a/app/display/gimpdisplayshell-scroll.h b/app/display/gimpdisplayshell-scroll.h index 47930fef21..845b8c6933 100644 --- a/app/display/gimpdisplayshell-scroll.h +++ b/app/display/gimpdisplayshell-scroll.h @@ -26,10 +26,6 @@ void gimp_display_shell_center_around_image_coordinate (GimpDisplayShell void gimp_display_shell_scroll_clamp_offsets (GimpDisplayShell *shell); -void gimp_display_shell_handle_size_changed_detailed (GimpDisplayShell *shell, - gdouble previous_origin_x, - gdouble previous_origin_y); - void gimp_display_shell_get_scaled_viewport (const GimpDisplayShell *shell, gint *x, gint *y,