[gimp] Bug 764024 - Allow to choose fill color when resizing layers and images
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] Bug 764024 - Allow to choose fill color when resizing layers and images
- Date: Sun, 9 Oct 2016 22:05:57 +0000 (UTC)
commit 997ae1e28b2b300cf83bb39325c9a70a3b3f05b5
Author: Michael Natterer <mitch gimp org>
Date: Mon Oct 10 00:02:16 2016 +0200
Bug 764024 - Allow to choose fill color when resizing layers and images
Add a GimpFillType argument to GimpItem::resize() and fill type
widgets to the canvas and layer resize dialogs. Fill the new parts of
the drawable according to fill type in gimp_drawable_resize(). Make
sure places that need the old behavior get GIMP_FILL_TRANSPARENT
passed by hardcoding it in the GimpItem::resize() implemetations of
channel, mask, selection etc.
app/actions/image-commands.c | 10 ++-
app/actions/layers-commands.c | 14 +++-
app/core/gimpchannel.c | 22 ++++---
app/core/gimpdrawable.c | 39 +++++--------
app/core/gimpgrouplayer.c | 18 +++---
app/core/gimpimage-crop.c | 27 +++++----
app/core/gimpimage-crop.h | 15 +++--
app/core/gimpimage-resize.c | 12 ++--
app/core/gimpimage-resize.h | 1 +
app/core/gimpitem.c | 30 ++++++----
app/core/gimpitem.h | 2 +
app/core/gimplayer.c | 32 +++++++----
app/core/gimplayer.h | 3 +-
app/core/gimpselection.c | 17 +++--
app/dialogs/resize-dialog.c | 105 +++++++++++++++++++++++----------
app/dialogs/resize-dialog.h | 1 +
app/pdb/image-transform-cmds.c | 2 +-
app/pdb/layer-cmds.c | 4 +-
app/pdb/plug-in-compat-cmds.c | 6 +-
app/text/gimptextlayer.c | 4 +-
app/tools/gimpcroptool.c | 9 ++-
app/vectors/gimpvectors.c | 16 +++--
tools/pdbgen/pdb/image_transform.pdb | 2 +-
tools/pdbgen/pdb/layer.pdb | 4 +-
tools/pdbgen/pdb/plug_in_compat.pdb | 6 +-
25 files changed, 244 insertions(+), 157 deletions(-)
---
diff --git a/app/actions/image-commands.c b/app/actions/image-commands.c
index 15b728d..c39df9d 100644
--- a/app/actions/image-commands.c
+++ b/app/actions/image-commands.c
@@ -133,6 +133,7 @@ static void image_profile_convert_callback (GtkWidget *dialog
static void image_resize_callback (GtkWidget *dialog,
GimpViewable *viewable,
GimpContext *context,
+ GimpFillType fill_type,
gint width,
gint height,
GimpUnit unit,
@@ -837,7 +838,8 @@ image_crop_to_selection_cmd_callback (GtkAction *action,
return;
}
- gimp_image_crop (image, action_data_get_context (data),
+ gimp_image_crop (image,
+ action_data_get_context (data), GIMP_FILL_TRANSPARENT,
x, y, width, height, TRUE);
gimp_image_flush (image);
}
@@ -860,7 +862,8 @@ image_crop_to_content_cmd_callback (GtkAction *action,
&x, &y, &width, &height))
{
case GIMP_AUTO_SHRINK_SHRINK:
- gimp_image_crop (image, action_data_get_context (data),
+ gimp_image_crop (image,
+ action_data_get_context (data), GIMP_FILL_TRANSPARENT,
x, y, width, height, TRUE);
gimp_image_flush (image);
break;
@@ -1274,6 +1277,7 @@ static void
image_resize_callback (GtkWidget *dialog,
GimpViewable *viewable,
GimpContext *context,
+ GimpFillType fill_type,
gint width,
gint height,
GimpUnit unit,
@@ -1302,7 +1306,7 @@ image_resize_callback (GtkWidget *dialog,
_("Resizing"));
gimp_image_resize_with_layers (image,
- context,
+ context, fill_type,
width, height, offset_x, offset_y,
layer_set,
resize_text_layers,
diff --git a/app/actions/layers-commands.c b/app/actions/layers-commands.c
index 998b95e..b04b3ce 100644
--- a/app/actions/layers-commands.c
+++ b/app/actions/layers-commands.c
@@ -151,6 +151,7 @@ static void layers_scale_callback (GtkWidget *dialog,
static void layers_resize_callback (GtkWidget *dialog,
GimpViewable *viewable,
GimpContext *context,
+ GimpFillType fill_type,
gint width,
gint height,
GimpUnit unit,
@@ -677,7 +678,9 @@ layers_resize_to_image_cmd_callback (GtkAction *action,
GimpLayer *layer;
return_if_no_layer (image, layer, data);
- gimp_layer_resize_to_image (layer, action_data_get_context (data));
+ gimp_layer_resize_to_image (layer,
+ action_data_get_context (data),
+ GIMP_FILL_TRANSPARENT);
gimp_image_flush (image);
}
@@ -755,7 +758,8 @@ layers_crop_to_selection_cmd_callback (GtkAction *action,
gimp_image_undo_group_start (image, GIMP_UNDO_GROUP_ITEM_RESIZE,
_("Crop Layer to Selection"));
- gimp_item_resize (GIMP_ITEM (layer), action_data_get_context (data),
+ gimp_item_resize (GIMP_ITEM (layer),
+ action_data_get_context (data), GIMP_FILL_TRANSPARENT,
width, height, off_x, off_y);
gimp_image_undo_group_end (image);
@@ -784,7 +788,8 @@ layers_crop_to_content_cmd_callback (GtkAction *action,
gimp_image_undo_group_start (image, GIMP_UNDO_GROUP_ITEM_RESIZE,
_("Crop Layer to Content"));
- gimp_item_resize (GIMP_ITEM (layer), action_data_get_context (data),
+ gimp_item_resize (GIMP_ITEM (layer),
+ action_data_get_context (data), GIMP_FILL_TRANSPARENT,
width, height, -x, -y);
gimp_image_undo_group_end (image);
@@ -1300,6 +1305,7 @@ static void
layers_resize_callback (GtkWidget *dialog,
GimpViewable *viewable,
GimpContext *context,
+ GimpFillType fill_type,
gint width,
gint height,
GimpUnit unit,
@@ -1321,7 +1327,7 @@ layers_resize_callback (GtkWidget *dialog,
height == gimp_item_get_height (item))
return;
- gimp_item_resize (item, context,
+ gimp_item_resize (item, context, fill_type,
width, height, offset_x, offset_y);
gimp_image_flush (gimp_item_get_image (item));
}
diff --git a/app/core/gimpchannel.c b/app/core/gimpchannel.c
index 0b73e87..b36acf2 100644
--- a/app/core/gimpchannel.c
+++ b/app/core/gimpchannel.c
@@ -101,10 +101,11 @@ static void gimp_channel_scale (GimpItem *item,
GimpProgress *progress);
static void gimp_channel_resize (GimpItem *item,
GimpContext *context,
+ GimpFillType fill_type,
gint new_width,
gint new_height,
- gint offx,
- gint offy);
+ gint offset_x,
+ gint offset_y);
static void gimp_channel_flip (GimpItem *item,
GimpContext *context,
GimpOrientationType flip_type,
@@ -611,6 +612,7 @@ gimp_channel_convert (GimpItem *item,
gimp_item_get_height (item) != height)
{
gimp_item_resize (item, gimp_get_user_context (dest_image->gimp),
+ GIMP_FILL_TRANSPARENT,
width, height, 0, 0);
}
}
@@ -750,14 +752,16 @@ gimp_channel_scale (GimpItem *item,
}
static void
-gimp_channel_resize (GimpItem *item,
- GimpContext *context,
- gint new_width,
- gint new_height,
- gint offset_x,
- gint offset_y)
-{
- GIMP_ITEM_CLASS (parent_class)->resize (item, context, new_width, new_height,
+gimp_channel_resize (GimpItem *item,
+ GimpContext *context,
+ GimpFillType fill_type,
+ gint new_width,
+ gint new_height,
+ gint offset_x,
+ gint offset_y)
+{
+ GIMP_ITEM_CLASS (parent_class)->resize (item, context, GIMP_FILL_TRANSPARENT,
+ new_width, new_height,
offset_x, offset_y);
if (G_TYPE_FROM_INSTANCE (item) == GIMP_TYPE_CHANNEL)
diff --git a/app/core/gimpdrawable.c b/app/core/gimpdrawable.c
index 39c8293..b1e2731 100644
--- a/app/core/gimpdrawable.c
+++ b/app/core/gimpdrawable.c
@@ -35,6 +35,7 @@
#include "gimpchannel.h"
#include "gimpcontext.h"
#include "gimpdrawable-combine.h"
+#include "gimpdrawable-fill.h"
#include "gimpdrawable-floating-selection.h"
#include "gimpdrawable-preview.h"
#include "gimpdrawable-private.h"
@@ -105,6 +106,7 @@ static void gimp_drawable_scale (GimpItem *item,
GimpProgress *progress);
static void gimp_drawable_resize (GimpItem *item,
GimpContext *context,
+ GimpFillType fill_type,
gint new_width,
gint new_height,
gint offset_x,
@@ -532,12 +534,13 @@ gimp_drawable_scale (GimpItem *item,
}
static void
-gimp_drawable_resize (GimpItem *item,
- GimpContext *context,
- gint new_width,
- gint new_height,
- gint offset_x,
- gint offset_y)
+gimp_drawable_resize (GimpItem *item,
+ GimpContext *context,
+ GimpFillType fill_type,
+ gint new_width,
+ gint new_height,
+ gint offset_x,
+ gint offset_y)
{
GimpDrawable *drawable = GIMP_DRAWABLE (item);
GeglBuffer *new_buffer;
@@ -578,26 +581,14 @@ gimp_drawable_resize (GimpItem *item,
copy_width != new_width ||
copy_height != new_height)
{
- /* Clear the new tiles if needed */
+ /* Clear the new buffer if needed */
- GimpRGB bg;
- GeglColor *col;
+ GimpRGB color;
+ GimpPattern *pattern;
- if (! gimp_drawable_has_alpha (drawable) && ! GIMP_IS_CHANNEL (drawable))
- {
- gimp_context_get_background (context, &bg);
- gimp_pickable_srgb_to_image_color (GIMP_PICKABLE (drawable),
- &bg, &bg);
- }
- else
- {
- gimp_rgba_set (&bg, 0.0, 0.0, 0.0, 0.0);
- }
-
- col = gimp_gegl_color_new (&bg);
-
- gegl_buffer_set_color (new_buffer, NULL, col);
- g_object_unref (col);
+ gimp_get_fill_params (context, fill_type, &color, &pattern, NULL);
+ gimp_drawable_fill_buffer (drawable, new_buffer,
+ &color, pattern, 0, 0);
}
if (intersect && copy_width && copy_height)
diff --git a/app/core/gimpgrouplayer.c b/app/core/gimpgrouplayer.c
index 73ff833..981fb33 100644
--- a/app/core/gimpgrouplayer.c
+++ b/app/core/gimpgrouplayer.c
@@ -109,6 +109,7 @@ static void gimp_group_layer_scale (GimpItem *item,
GimpProgress *progress);
static void gimp_group_layer_resize (GimpItem *item,
GimpContext *context,
+ GimpFillType fill_type,
gint new_width,
gint new_height,
gint offset_x,
@@ -631,12 +632,13 @@ gimp_group_layer_scale (GimpItem *item,
}
static void
-gimp_group_layer_resize (GimpItem *item,
- GimpContext *context,
- gint new_width,
- gint new_height,
- gint offset_x,
- gint offset_y)
+gimp_group_layer_resize (GimpItem *item,
+ GimpContext *context,
+ GimpFillType fill_type,
+ gint new_width,
+ gint new_height,
+ gint offset_x,
+ gint offset_y)
{
GimpGroupLayer *group = GIMP_GROUP_LAYER (item);
GimpGroupLayerPrivate *private = GET_PRIVATE (item);
@@ -677,7 +679,7 @@ gimp_group_layer_resize (GimpItem *item,
gint child_offset_x = gimp_item_get_offset_x (child) - child_x;
gint child_offset_y = gimp_item_get_offset_y (child) - child_y;
- gimp_item_resize (child, context,
+ gimp_item_resize (child, context, fill_type,
child_width, child_height,
child_offset_x, child_offset_y);
}
@@ -696,7 +698,7 @@ gimp_group_layer_resize (GimpItem *item,
mask = gimp_layer_get_mask (GIMP_LAYER (group));
if (mask)
- gimp_item_resize (GIMP_ITEM (mask), context,
+ gimp_item_resize (GIMP_ITEM (mask), context, GIMP_FILL_TRANSPARENT,
new_width, new_height, offset_x, offset_y);
gimp_group_layer_resume_resize (group, TRUE);
diff --git a/app/core/gimpimage-crop.c b/app/core/gimpimage-crop.c
index 7a0d455..1b901c9 100644
--- a/app/core/gimpimage-crop.c
+++ b/app/core/gimpimage-crop.c
@@ -40,13 +40,14 @@
/* public functions */
void
-gimp_image_crop (GimpImage *image,
- GimpContext *context,
- gint x,
- gint y,
- gint width,
- gint height,
- gboolean crop_layers)
+gimp_image_crop (GimpImage *image,
+ GimpContext *context,
+ GimpFillType fill_type,
+ gint x,
+ gint y,
+ gint width,
+ gint height,
+ gboolean crop_layers)
{
GList *list;
gint previous_width;
@@ -90,7 +91,8 @@ gimp_image_crop (GimpImage *image,
{
GimpItem *item = list->data;
- gimp_item_resize (item, context, width, height, -x, -y);
+ gimp_item_resize (item, context, GIMP_FILL_TRANSPARENT,
+ width, height, -x, -y);
}
/* Resize all vectors */
@@ -100,11 +102,13 @@ gimp_image_crop (GimpImage *image,
{
GimpItem *item = list->data;
- gimp_item_resize (item, context, width, height, -x, -y);
+ gimp_item_resize (item, context, GIMP_FILL_TRANSPARENT,
+ width, height, -x, -y);
}
/* Don't forget the selection mask! */
- gimp_item_resize (GIMP_ITEM (gimp_image_get_mask (image)), context,
+ gimp_item_resize (GIMP_ITEM (gimp_image_get_mask (image)),
+ context, GIMP_FILL_TRANSPARENT,
width, height, -x, -y);
/* crop all layers */
@@ -137,7 +141,8 @@ gimp_image_crop (GimpImage *image,
if (width > 0 && height > 0)
{
- gimp_item_resize (item, context, width, height,
+ gimp_item_resize (item, context, fill_type,
+ width, height,
-(lx1 - off_x),
-(ly1 - off_y));
}
diff --git a/app/core/gimpimage-crop.h b/app/core/gimpimage-crop.h
index 33094e3..af4d975 100644
--- a/app/core/gimpimage-crop.h
+++ b/app/core/gimpimage-crop.h
@@ -19,13 +19,14 @@
#define __GIMP_IMAGE_CROP_H__
-void gimp_image_crop (GimpImage *image,
- GimpContext *context,
- gint x,
- gint y,
- gint width,
- gint height,
- gboolean crop_layers);
+void gimp_image_crop (GimpImage *image,
+ GimpContext *context,
+ GimpFillType fill_type,
+ gint x,
+ gint y,
+ gint width,
+ gint height,
+ gboolean crop_layers);
#endif /* __GIMP_IMAGE_CROP_H__ */
diff --git a/app/core/gimpimage-resize.c b/app/core/gimpimage-resize.c
index e0cf590..2011f2c 100644
--- a/app/core/gimpimage-resize.c
+++ b/app/core/gimpimage-resize.c
@@ -53,7 +53,7 @@ gimp_image_resize (GimpImage *image,
gint offset_y,
GimpProgress *progress)
{
- gimp_image_resize_with_layers (image, context,
+ gimp_image_resize_with_layers (image, context, GIMP_FILL_TRANSPARENT,
new_width, new_height, offset_x, offset_y,
GIMP_ITEM_SET_NONE, TRUE,
progress);
@@ -62,6 +62,7 @@ gimp_image_resize (GimpImage *image,
void
gimp_image_resize_with_layers (GimpImage *image,
GimpContext *context,
+ GimpFillType fill_type,
gint new_width,
gint new_height,
gint offset_x,
@@ -119,7 +120,7 @@ gimp_image_resize_with_layers (GimpImage *image,
{
GimpItem *item = list->data;
- gimp_item_resize (item, context,
+ gimp_item_resize (item, context, GIMP_FILL_TRANSPARENT,
new_width, new_height, offset_x, offset_y);
if (progress)
@@ -133,7 +134,7 @@ gimp_image_resize_with_layers (GimpImage *image,
{
GimpItem *item = list->data;
- gimp_item_resize (item, context,
+ gimp_item_resize (item, context, GIMP_FILL_TRANSPARENT,
new_width, new_height, offset_x, offset_y);
if (progress)
@@ -141,7 +142,8 @@ gimp_image_resize_with_layers (GimpImage *image,
}
/* Don't forget the selection mask! */
- gimp_item_resize (GIMP_ITEM (gimp_image_get_mask (image)), context,
+ gimp_item_resize (GIMP_ITEM (gimp_image_get_mask (image)),
+ context, GIMP_FILL_TRANSPARENT,
new_width, new_height, offset_x, offset_y);
if (progress)
@@ -176,7 +178,7 @@ gimp_image_resize_with_layers (GimpImage *image,
gimp_item_get_offset (item, &old_offset_x, &old_offset_y);
- gimp_item_resize (item, context,
+ gimp_item_resize (item, context, fill_type,
new_width, new_height,
old_offset_x, old_offset_y);
diff --git a/app/core/gimpimage-resize.h b/app/core/gimpimage-resize.h
index 7edd646..003084d 100644
--- a/app/core/gimpimage-resize.h
+++ b/app/core/gimpimage-resize.h
@@ -29,6 +29,7 @@ void gimp_image_resize (GimpImage *image,
void gimp_image_resize_with_layers (GimpImage *image,
GimpContext *context,
+ GimpFillType fill_type,
gint new_width,
gint new_height,
gint offset_x,
diff --git a/app/core/gimpitem.c b/app/core/gimpitem.c
index cc778e5..0fab4ca 100644
--- a/app/core/gimpitem.c
+++ b/app/core/gimpitem.c
@@ -147,6 +147,7 @@ static void gimp_item_real_scale (GimpItem *item,
GimpProgress *progress);
static void gimp_item_real_resize (GimpItem *item,
GimpContext *context,
+ GimpFillType fill_type,
gint new_width,
gint new_height,
gint offset_x,
@@ -602,12 +603,13 @@ gimp_item_real_scale (GimpItem *item,
}
static void
-gimp_item_real_resize (GimpItem *item,
- GimpContext *context,
- gint new_width,
- gint new_height,
- gint offset_x,
- gint offset_y)
+gimp_item_real_resize (GimpItem *item,
+ GimpContext *context,
+ GimpFillType fill_type,
+ gint new_width,
+ gint new_height,
+ gint offset_x,
+ gint offset_y)
{
GimpItemPrivate *private = GET_PRIVATE (item);
@@ -1393,12 +1395,13 @@ gimp_item_scale_by_origin (GimpItem *item,
}
void
-gimp_item_resize (GimpItem *item,
- GimpContext *context,
- gint new_width,
- gint new_height,
- gint offset_x,
- gint offset_y)
+gimp_item_resize (GimpItem *item,
+ GimpContext *context,
+ GimpFillType fill_type,
+ gint new_width,
+ gint new_height,
+ gint offset_x,
+ gint offset_y)
{
GimpItemClass *item_class;
GimpImage *image;
@@ -1418,7 +1421,8 @@ gimp_item_resize (GimpItem *item,
g_object_freeze_notify (G_OBJECT (item));
- item_class->resize (item, context, new_width, new_height, offset_x, offset_y);
+ item_class->resize (item, context, fill_type,
+ new_width, new_height, offset_x, offset_y);
g_object_thaw_notify (G_OBJECT (item));
diff --git a/app/core/gimpitem.h b/app/core/gimpitem.h
index 680671e..dc053f0 100644
--- a/app/core/gimpitem.h
+++ b/app/core/gimpitem.h
@@ -80,6 +80,7 @@ struct _GimpItemClass
GimpProgress *progress);
void (* resize) (GimpItem *item,
GimpContext *context,
+ GimpFillType fill_type,
gint new_width,
gint new_height,
gint offset_x,
@@ -232,6 +233,7 @@ void gimp_item_scale_by_origin (GimpItem *item,
gboolean local_origin);
void gimp_item_resize (GimpItem *item,
GimpContext *context,
+ GimpFillType fill_type,
gint new_width,
gint new_height,
gint offset_x,
diff --git a/app/core/gimplayer.c b/app/core/gimplayer.c
index 1532b17..7b8507a 100644
--- a/app/core/gimplayer.c
+++ b/app/core/gimplayer.c
@@ -130,6 +130,7 @@ static void gimp_layer_scale (GimpItem *item,
GimpProgress *progress);
static void gimp_layer_resize (GimpItem *item,
GimpContext *context,
+ GimpFillType fill_type,
gint new_width,
gint new_height,
gint offset_x,
@@ -929,20 +930,28 @@ gimp_layer_scale (GimpItem *item,
}
static void
-gimp_layer_resize (GimpItem *item,
- GimpContext *context,
- gint new_width,
- gint new_height,
- gint offset_x,
- gint offset_y)
+gimp_layer_resize (GimpItem *item,
+ GimpContext *context,
+ GimpFillType fill_type,
+ gint new_width,
+ gint new_height,
+ gint offset_x,
+ gint offset_y)
{
GimpLayer *layer = GIMP_LAYER (item);
- GIMP_ITEM_CLASS (parent_class)->resize (item, context, new_width, new_height,
+ if (fill_type == GIMP_FILL_TRANSPARENT &&
+ ! gimp_drawable_has_alpha (GIMP_DRAWABLE (layer)))
+ {
+ fill_type = GIMP_FILL_BACKGROUND;
+ }
+
+ GIMP_ITEM_CLASS (parent_class)->resize (item, context, fill_type,
+ new_width, new_height,
offset_x, offset_y);
if (layer->mask)
- gimp_item_resize (GIMP_ITEM (layer->mask), context,
+ gimp_item_resize (GIMP_ITEM (layer->mask), context, GIMP_FILL_TRANSPARENT,
new_width, new_height, offset_x, offset_y);
}
@@ -1939,8 +1948,9 @@ gimp_layer_remove_alpha (GimpLayer *layer,
}
void
-gimp_layer_resize_to_image (GimpLayer *layer,
- GimpContext *context)
+gimp_layer_resize_to_image (GimpLayer *layer,
+ GimpContext *context,
+ GimpFillType fill_type)
{
GimpImage *image;
gint offset_x;
@@ -1956,7 +1966,7 @@ gimp_layer_resize_to_image (GimpLayer *layer,
C_("undo-type", "Layer to Image Size"));
gimp_item_get_offset (GIMP_ITEM (layer), &offset_x, &offset_y);
- gimp_item_resize (GIMP_ITEM (layer), context,
+ gimp_item_resize (GIMP_ITEM (layer), context, fill_type,
gimp_image_get_width (image),
gimp_image_get_height (image),
offset_x, offset_y);
diff --git a/app/core/gimplayer.h b/app/core/gimplayer.h
index b01131f..af31a42 100644
--- a/app/core/gimplayer.h
+++ b/app/core/gimplayer.h
@@ -109,7 +109,8 @@ void gimp_layer_remove_alpha (GimpLayer *layer,
GimpContext *context);
void gimp_layer_resize_to_image (GimpLayer *layer,
- GimpContext *context);
+ GimpContext *context,
+ GimpFillType fill_type);
GimpDrawable * gimp_layer_get_floating_sel_drawable (GimpLayer *layer);
void gimp_layer_set_floating_sel_drawable (GimpLayer *layer,
diff --git a/app/core/gimpselection.c b/app/core/gimpselection.c
index 32734cb..4d59e8e 100644
--- a/app/core/gimpselection.c
+++ b/app/core/gimpselection.c
@@ -61,6 +61,7 @@ static void gimp_selection_scale (GimpItem *item,
GimpProgress *progress);
static void gimp_selection_resize (GimpItem *item,
GimpContext *context,
+ GimpFillType fill_type,
gint new_width,
gint new_height,
gint offset_x,
@@ -241,14 +242,16 @@ gimp_selection_scale (GimpItem *item,
}
static void
-gimp_selection_resize (GimpItem *item,
- GimpContext *context,
- gint new_width,
- gint new_height,
- gint offset_x,
- gint offset_y)
+gimp_selection_resize (GimpItem *item,
+ GimpContext *context,
+ GimpFillType fill_type,
+ gint new_width,
+ gint new_height,
+ gint offset_x,
+ gint offset_y)
{
- GIMP_ITEM_CLASS (parent_class)->resize (item, context, new_width, new_height,
+ GIMP_ITEM_CLASS (parent_class)->resize (item, context, GIMP_FILL_TRANSPARENT,
+ new_width, new_height,
offset_x, offset_y);
gimp_item_set_offset (item, 0, 0);
diff --git a/app/dialogs/resize-dialog.c b/app/dialogs/resize-dialog.c
index 524d521..d0ca128 100644
--- a/app/dialogs/resize-dialog.c
+++ b/app/dialogs/resize-dialog.c
@@ -47,16 +47,18 @@ typedef struct
{
GimpViewable *viewable;
GimpContext *context;
- gint old_width;
- gint old_height;
+ GimpFillType fill_type;
GimpUnit old_unit;
- GtkWidget *box;
- GtkWidget *offset;
- GtkWidget *area;
GimpItemSet layer_set;
gboolean resize_text_layers;
GimpResizeCallback callback;
gpointer user_data;
+
+ gint old_width;
+ gint old_height;
+ GtkWidget *box;
+ GtkWidget *offset;
+ GtkWidget *area;
} ResizeDialog;
@@ -91,6 +93,7 @@ resize_dialog_new (GimpViewable *viewable,
GimpResizeCallback callback,
gpointer user_data)
{
+ ResizeDialog *private;
GtkWidget *dialog;
GtkWidget *main_vbox;
GtkWidget *vbox;
@@ -99,11 +102,14 @@ resize_dialog_new (GimpViewable *viewable,
GtkWidget *button;
GtkWidget *spinbutton;
GtkWidget *entry;
+ GtkWidget *hbox;
+ GtkWidget *combo;
GtkAdjustment *adjustment;
GdkPixbuf *pixbuf;
- ResizeDialog *private;
- GimpImage *image = NULL;
- const gchar *text = NULL;
+ GtkSizeGroup *size_group = NULL;
+ GimpImage *image = NULL;
+ const gchar *size_title = NULL;
+ const gchar *layers_title = NULL;
gint width, height;
gdouble xres, yres;
@@ -118,7 +124,8 @@ resize_dialog_new (GimpViewable *viewable,
width = gimp_image_get_width (image);
height = gimp_image_get_height (image);
- text = _("Canvas Size");
+ size_title = _("Canvas Size");
+ layers_title = _("Layers");
}
else if (GIMP_IS_ITEM (viewable))
{
@@ -129,7 +136,8 @@ resize_dialog_new (GimpViewable *viewable,
width = gimp_item_get_width (item);
height = gimp_item_get_height (item);
- text = _("Layer Size");
+ size_title = _("Layer Size");
+ layers_title = _("Fill With");
}
else
{
@@ -140,13 +148,14 @@ resize_dialog_new (GimpViewable *viewable,
private->viewable = viewable;
private->context = context;
- private->old_width = width;
- private->old_height = height;
+ private->fill_type = GIMP_FILL_TRANSPARENT;
private->old_unit = unit;
private->layer_set = GIMP_ITEM_SET_NONE;
private->resize_text_layers = FALSE;
private->callback = callback;
private->user_data = user_data;
+ private->old_width = width;
+ private->old_height = height;
dialog = gimp_viewable_dialog_new (viewable, context,
title, role, GIMP_STOCK_RESIZE, title,
@@ -174,6 +183,16 @@ resize_dialog_new (GimpViewable *viewable,
G_CALLBACK (resize_dialog_response),
private);
+ main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
+ gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12);
+ gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))),
+ main_vbox, TRUE, TRUE, 0);
+ gtk_widget_show (main_vbox);
+
+ frame = gimp_frame_new (size_title);
+ gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
+ gtk_widget_show (frame);
+
gimp_image_get_resolution (image, &xres, &yres);
private->box = g_object_new (GIMP_TYPE_SIZE_BOX,
@@ -185,17 +204,6 @@ resize_dialog_new (GimpViewable *viewable,
"keep-aspect", FALSE,
"edit-resolution", FALSE,
NULL);
-
- main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
- gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12);
- gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))),
- main_vbox, TRUE, TRUE, 0);
- gtk_widget_show (main_vbox);
-
- frame = gimp_frame_new (text);
- gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
- gtk_widget_show (frame);
-
gtk_container_add (GTK_CONTAINER (frame), private->box);
gtk_widget_show (private->box);
@@ -282,28 +290,31 @@ resize_dialog_new (GimpViewable *viewable,
G_CALLBACK (size_notify),
private);
+ frame = gimp_frame_new (layers_title);
+ gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
+ gtk_widget_show (frame);
+
+ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
+ gtk_container_add (GTK_CONTAINER (frame), vbox);
+ gtk_widget_show (vbox);
+
if (GIMP_IS_IMAGE (viewable))
{
- GtkWidget *hbox;
GtkWidget *label;
- GtkWidget *combo;
-
- frame = gimp_frame_new (_("Layers"));
- gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
- gtk_widget_show (frame);
- vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
- gtk_container_add (GTK_CONTAINER (frame), vbox);
- gtk_widget_show (vbox);
+ size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
gtk_widget_show (hbox);
label = gtk_label_new_with_mnemonic (_("Resize _layers:"));
+ gtk_label_set_xalign (GTK_LABEL (label), 0.0);
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
gtk_widget_show (label);
+ gtk_size_group_add_widget (size_group, label);
+
combo = gimp_enum_combo_box_new (GIMP_TYPE_ITEM_SET);
gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 0);
gtk_widget_show (combo);
@@ -314,6 +325,33 @@ resize_dialog_new (GimpViewable *viewable,
private->layer_set,
G_CALLBACK (gimp_int_combo_box_get_active),
&private->layer_set);
+ }
+
+ hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
+ gtk_widget_show (hbox);
+
+ combo = gimp_enum_combo_box_new (GIMP_TYPE_FILL_TYPE);
+ gtk_box_pack_end (GTK_BOX (hbox), combo, TRUE, TRUE, 0);
+ gtk_widget_show (combo);
+
+ gimp_int_combo_box_connect (GIMP_INT_COMBO_BOX (combo),
+ private->fill_type,
+ G_CALLBACK (gimp_int_combo_box_get_active),
+ &private->fill_type);
+
+ if (GIMP_IS_IMAGE (viewable))
+ {
+ GtkWidget *label;
+
+ label = gtk_label_new_with_mnemonic (_("_Fill with:"));
+ gtk_label_set_xalign (GTK_LABEL (label), 0.0);
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+ gtk_widget_show (label);
+
+ gtk_label_set_mnemonic_widget (GTK_LABEL (label), combo);
+
+ gtk_size_group_add_widget (size_group, label);
button = gtk_check_button_new_with_mnemonic (_("Resize _text layers"));
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
@@ -324,6 +362,8 @@ resize_dialog_new (GimpViewable *viewable,
g_signal_connect (button, "toggled",
G_CALLBACK (gimp_toggle_button_update),
&private->resize_text_layers);
+
+ g_object_unref (size_group);
}
return dialog;
@@ -355,6 +395,7 @@ resize_dialog_response (GtkWidget *dialog,
private->callback (dialog,
private->viewable,
private->context,
+ private->fill_type,
width,
height,
unit,
diff --git a/app/dialogs/resize-dialog.h b/app/dialogs/resize-dialog.h
index cd5d3d6..1041ee8 100644
--- a/app/dialogs/resize-dialog.h
+++ b/app/dialogs/resize-dialog.h
@@ -22,6 +22,7 @@
typedef void (* GimpResizeCallback) (GtkWidget *dialog,
GimpViewable *viewable,
GimpContext *context,
+ GimpFillType fill_type,
gint width,
gint height,
GimpUnit unit,
diff --git a/app/pdb/image-transform-cmds.c b/app/pdb/image-transform-cmds.c
index 1f685d1..63081a6 100644
--- a/app/pdb/image-transform-cmds.c
+++ b/app/pdb/image-transform-cmds.c
@@ -196,7 +196,7 @@ image_crop_invoker (GimpProcedure *procedure,
offy > (gimp_image_get_height (image) - new_height))
success = FALSE;
else
- gimp_image_crop (image, context,
+ gimp_image_crop (image, context, GIMP_FILL_TRANSPARENT,
offx, offy, new_width, new_height,
TRUE);
}
diff --git a/app/pdb/layer-cmds.c b/app/pdb/layer-cmds.c
index 234f7b1..f7764ec 100644
--- a/app/pdb/layer-cmds.c
+++ b/app/pdb/layer-cmds.c
@@ -489,7 +489,7 @@ layer_resize_invoker (GimpProcedure *procedure,
if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), NULL,
GIMP_PDB_ITEM_CONTENT | GIMP_PDB_ITEM_POSITION,
error))
- gimp_item_resize (GIMP_ITEM (layer), context,
+ gimp_item_resize (GIMP_ITEM (layer), context, GIMP_FILL_TRANSPARENT,
new_width, new_height, offx, offy);
else
success = FALSE;
@@ -517,7 +517,7 @@ layer_resize_to_image_size_invoker (GimpProcedure *procedure,
if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), NULL,
GIMP_PDB_ITEM_CONTENT | GIMP_PDB_ITEM_POSITION,
error))
- gimp_layer_resize_to_image (layer, context);
+ gimp_layer_resize_to_image (layer, context, GIMP_FILL_TRANSPARENT);
else
success = FALSE;
}
diff --git a/app/pdb/plug-in-compat-cmds.c b/app/pdb/plug-in-compat-cmds.c
index 7111819..e86deb5 100644
--- a/app/pdb/plug-in-compat-cmds.c
+++ b/app/pdb/plug-in-compat-cmds.c
@@ -611,7 +611,8 @@ plug_in_autocrop_invoker (GimpProcedure *procedure,
x = y = 0;
}
- gimp_image_crop (image, context, x, y, width, height, TRUE);
+ gimp_image_crop (image, context, GIMP_FILL_TRANSPARENT,
+ x, y, width, height, TRUE);
gimp_image_undo_group_end (image);
}
@@ -658,7 +659,8 @@ plug_in_autocrop_layer_invoker (GimpProcedure *procedure,
gimp_image_undo_group_start (image, GIMP_UNDO_GROUP_ITEM_RESIZE,
_("Autocrop layer"));
- gimp_item_resize (GIMP_ITEM (layer), context,
+ gimp_item_resize (GIMP_ITEM (layer),
+ context, GIMP_FILL_TRANSPARENT,
width, height, -x, -y);
gimp_image_undo_group_end (image);
diff --git a/app/text/gimptextlayer.c b/app/text/gimptextlayer.c
index d06fa0f..4630a22 100644
--- a/app/text/gimptextlayer.c
+++ b/app/text/gimptextlayer.c
@@ -668,7 +668,9 @@ gimp_text_layer_render (GimpTextLayer *layer)
if (! unused_eek)
unused_eek = gimp_context_new (image->gimp, "eek", NULL);
- gimp_item_resize (GIMP_ITEM (mask), unused_eek, width, height, 0, 0);
+ gimp_item_resize (GIMP_ITEM (mask),
+ unused_eek, GIMP_FILL_TRANSPARENT,
+ width, height, 0, 0);
}
}
diff --git a/app/tools/gimpcroptool.c b/app/tools/gimpcroptool.c
index 4543083..d76d1ee 100644
--- a/app/tools/gimpcroptool.c
+++ b/app/tools/gimpcroptool.c
@@ -331,14 +331,15 @@ gimp_crop_tool_execute (GimpRectangleTool *rectangle,
off_x -= x;
off_y -= y;
- gimp_item_resize (GIMP_ITEM (layer), GIMP_CONTEXT (options),
+ gimp_item_resize (GIMP_ITEM (layer),
+ GIMP_CONTEXT (options), GIMP_FILL_TRANSPARENT,
w, h, off_x, off_y);
}
else
{
- gimp_image_crop (image, GIMP_CONTEXT (options),
- x, y, w, h,
- TRUE);
+ gimp_image_crop (image,
+ GIMP_CONTEXT (options), GIMP_FILL_TRANSPARENT,
+ x, y, w, h, TRUE);
}
gimp_image_flush (image);
diff --git a/app/vectors/gimpvectors.c b/app/vectors/gimpvectors.c
index b4d3911..3a332c7 100644
--- a/app/vectors/gimpvectors.c
+++ b/app/vectors/gimpvectors.c
@@ -93,6 +93,7 @@ static void gimp_vectors_scale (GimpItem *item,
GimpProgress *progress);
static void gimp_vectors_resize (GimpItem *item,
GimpContext *context,
+ GimpFillType fill_type,
gint new_width,
gint new_height,
gint offset_x,
@@ -502,12 +503,13 @@ gimp_vectors_scale (GimpItem *item,
}
static void
-gimp_vectors_resize (GimpItem *item,
- GimpContext *context,
- gint new_width,
- gint new_height,
- gint offset_x,
- gint offset_y)
+gimp_vectors_resize (GimpItem *item,
+ GimpContext *context,
+ GimpFillType fill_type,
+ gint new_width,
+ gint new_height,
+ gint offset_x,
+ gint offset_y)
{
GimpVectors *vectors = GIMP_VECTORS (item);
GimpImage *image = gimp_item_get_image (item);
@@ -525,7 +527,7 @@ gimp_vectors_resize (GimpItem *item,
gimp_stroke_translate (stroke, offset_x, offset_y);
}
- GIMP_ITEM_CLASS (parent_class)->resize (item, context,
+ GIMP_ITEM_CLASS (parent_class)->resize (item, context, fill_type,
gimp_image_get_width (image),
gimp_image_get_height (image),
0, 0);
diff --git a/tools/pdbgen/pdb/image_transform.pdb b/tools/pdbgen/pdb/image_transform.pdb
index c8983b1..51c587b 100644
--- a/tools/pdbgen/pdb/image_transform.pdb
+++ b/tools/pdbgen/pdb/image_transform.pdb
@@ -194,7 +194,7 @@ HELP
offy > (gimp_image_get_height (image) - new_height))
success = FALSE;
else
- gimp_image_crop (image, context,
+ gimp_image_crop (image, context, GIMP_FILL_TRANSPARENT,
offx, offy, new_width, new_height,
TRUE);
}
diff --git a/tools/pdbgen/pdb/layer.pdb b/tools/pdbgen/pdb/layer.pdb
index b7dd101..a9e0983 100644
--- a/tools/pdbgen/pdb/layer.pdb
+++ b/tools/pdbgen/pdb/layer.pdb
@@ -560,7 +560,7 @@ HELP
if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), NULL,
GIMP_PDB_ITEM_CONTENT | GIMP_PDB_ITEM_POSITION,
error))
- gimp_item_resize (GIMP_ITEM (layer), context,
+ gimp_item_resize (GIMP_ITEM (layer), context, GIMP_FILL_TRANSPARENT,
new_width, new_height, offx, offy);
else
success = FALSE;
@@ -590,7 +590,7 @@ HELP
if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), NULL,
GIMP_PDB_ITEM_CONTENT | GIMP_PDB_ITEM_POSITION,
error))
- gimp_layer_resize_to_image (layer, context);
+ gimp_layer_resize_to_image (layer, context, GIMP_FILL_TRANSPARENT);
else
success = FALSE;
}
diff --git a/tools/pdbgen/pdb/plug_in_compat.pdb b/tools/pdbgen/pdb/plug_in_compat.pdb
index de95815..b28deee 100644
--- a/tools/pdbgen/pdb/plug_in_compat.pdb
+++ b/tools/pdbgen/pdb/plug_in_compat.pdb
@@ -304,7 +304,8 @@ HELP
x = y = 0;
}
- gimp_image_crop (image, context, x, y, width, height, TRUE);
+ gimp_image_crop (image, context, GIMP_FILL_TRANSPARENT,
+ x, y, width, height, TRUE);
gimp_image_undo_group_end (image);
}
@@ -356,7 +357,8 @@ HELP
gimp_image_undo_group_start (image, GIMP_UNDO_GROUP_ITEM_RESIZE,
_("Autocrop layer"));
- gimp_item_resize (GIMP_ITEM (layer), context,
+ gimp_item_resize (GIMP_ITEM (layer),
+ context, GIMP_FILL_TRANSPARENT,
width, height, -x, -y);
gimp_image_undo_group_end (image);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]