mirror of
https://gitlab.gnome.org/GNOME/gimp
synced 2024-10-22 04:22:29 +00:00
6c48f2b601
2008-08-03 Martin Nordholts <martinn@svn.gnome.org> Further work for completing bug #362915 that makes changes to the image size (e.g when cropping) be much more nicely handled by display shell. * app/core/gimpimage.[ch]: Add new signal GimpImage::size-changed-detailed that is emited whenever GimpViewable::size-changed is. The new signal provides additional information, namely the previous origin relative to the current origin. Cliens choose what specific signal to listen to depending on how much info they need. * app/display/gimpdisplayshell-handlers.c: Connect to GimpImage::size-changed-detailed instead of GimpViewable::size-changed since the shell wants information about the previous image origin. (gimp_display_shell_resolution_changed_handler): Use gimp_display_shell_scale_resize() instead to avoid display garbage. * app/display/gimpdisplayshell-scale.[ch]: Add new utility function gimp_display_shell_center_image_on_next_size_allocate(). * app/display/gimpdisplayshell-scroll.[ch] (gimp_display_shell_handle_size_changed_detailed): New function that replaces logic in gimp_display_shell_handle_size_changed and that takes previous-origin of the image into account and adjusts the offset so that the image content that remains doesn't move. If the window is resized on image resize, just center the image afterwards. * app/core/gimpimage-undo-push.[ch] (gimp_image_undo_push_image_size): Add previous-origin paremeters. * app/core/gimpimageundo.[ch]: Add and manage previous-origin properties so that the display shell offset can be appropriately adjusted also when undoing. * app/core/gimpundo.h * app/core/gimpimage-undo.c: Add previous_origin members to the undo accumulator and emit that information when the size of the image changes due to the undo. * app/core/gimpimage-crop.c (gimp_image_crop) * app/core/gimpimage-scale.c (gimp_image_scale) * app/core/gimpimage-rotate.c (gimp_image_rotate) * app/core/gimpimage-resize.c (gimp_image_resize_with_layers): Supply information about the previous-origin of the image to the size-changed signals and the undo system. svn path=/trunk/; revision=26354
97 lines
3.5 KiB
C
97 lines
3.5 KiB
C
/* GIMP - The GNU Image Manipulation Program
|
|
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
*/
|
|
|
|
#ifndef __GIMP_UNDO_H__
|
|
#define __GIMP_UNDO_H__
|
|
|
|
|
|
#include "gimpviewable.h"
|
|
|
|
|
|
struct _GimpUndoAccumulator
|
|
{
|
|
gboolean mode_changed;
|
|
gboolean size_changed;
|
|
gdouble previous_origin_x;
|
|
gdouble previous_origin_y;
|
|
gboolean resolution_changed;
|
|
gboolean unit_changed;
|
|
gboolean quick_mask_changed;
|
|
gboolean alpha_changed;
|
|
};
|
|
|
|
|
|
#define GIMP_TYPE_UNDO (gimp_undo_get_type ())
|
|
#define GIMP_UNDO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_UNDO, GimpUndo))
|
|
#define GIMP_UNDO_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_UNDO, GimpUndoClass))
|
|
#define GIMP_IS_UNDO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_UNDO))
|
|
#define GIMP_IS_UNDO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_UNDO))
|
|
#define GIMP_UNDO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_UNDO, GimpUndoClass))
|
|
|
|
|
|
typedef struct _GimpUndoClass GimpUndoClass;
|
|
|
|
struct _GimpUndo
|
|
{
|
|
GimpViewable parent_instance;
|
|
|
|
GimpImage *image; /* the image this undo is part of */
|
|
guint time; /* time of undo step construction */
|
|
|
|
GimpUndoType undo_type; /* undo type */
|
|
GimpDirtyMask dirty_mask; /* affected parts of the image */
|
|
|
|
TempBuf *preview;
|
|
guint preview_idle_id;
|
|
};
|
|
|
|
struct _GimpUndoClass
|
|
{
|
|
GimpViewableClass parent_class;
|
|
|
|
void (* pop) (GimpUndo *undo,
|
|
GimpUndoMode undo_mode,
|
|
GimpUndoAccumulator *accum);
|
|
void (* free) (GimpUndo *undo,
|
|
GimpUndoMode undo_mode);
|
|
};
|
|
|
|
|
|
GType gimp_undo_get_type (void) G_GNUC_CONST;
|
|
|
|
void gimp_undo_pop (GimpUndo *undo,
|
|
GimpUndoMode undo_mode,
|
|
GimpUndoAccumulator *accum);
|
|
void gimp_undo_free (GimpUndo *undo,
|
|
GimpUndoMode undo_mode);
|
|
|
|
void gimp_undo_create_preview (GimpUndo *undo,
|
|
GimpContext *context,
|
|
gboolean create_now);
|
|
void gimp_undo_refresh_preview (GimpUndo *undo,
|
|
GimpContext *context);
|
|
|
|
const gchar * gimp_undo_type_to_name (GimpUndoType type);
|
|
|
|
gboolean gimp_undo_is_weak (GimpUndo *undo);
|
|
gint gimp_undo_get_age (GimpUndo *undo);
|
|
void gimp_undo_reset_age (GimpUndo *undo);
|
|
|
|
|
|
#endif /* __GIMP_UNDO_H__ */
|