canonicalize hardcoded procedure names.

2005-08-06  Sven Neumann  <sven@gimp.org>

	* app/batch.c: canonicalize hardcoded procedure names.

	* app/base/siox.[ch]
	* app/core/gimpdrawable-foreground-extract.[ch]
	* app/tools/gimpforegroundselecttool.c: restrict the working area
	to the double of the bounding box of the initial selection.
This commit is contained in:
Sven Neumann 2005-08-06 00:51:22 +00:00 committed by Sven Neumann
parent e918085d7c
commit 71785ac8cd
7 changed files with 91 additions and 27 deletions

View File

@ -1,3 +1,12 @@
2005-08-06 Sven Neumann <sven@gimp.org>
* app/batch.c: canonicalize hardcoded procedure names.
* app/base/siox.[ch]
* app/core/gimpdrawable-foreground-extract.[ch]
* app/tools/gimpforegroundselecttool.c: restrict the working area
to the double of the bounding box of the initial selection.
2005-08-05 Michael Natterer <mitch@gimp.org>
* app/plug-in/plug-in-message.c (plug_in_handle_proc_install):

View File

@ -44,7 +44,7 @@
#include "paint-funcs/paint-funcs.h"
#include "core/gimp-utils.h" /* FIXME */
#include "core/gimp-utils.h" /* FIXME (gimp_rectangle_intersect) */
#include "cpercep.h"
#include "pixel-region.h"
@ -781,6 +781,10 @@ siox_progress_update (SioxProgressFunc progress_callback,
* @mask: a mask indicating sure foreground (255), sure background (0)
* and undecided regions ([1..254]).
* @x: horizontal offset into the mask
* @y: vertical offset into the mask
* @width: width of working area on mask
* @height: height of working area on mask
* @limits: a three dimensional float array specifing the accuracy,
* a good value is: { 0.66, 1.25, 2.5 }
* @smoothness: boundary smoothness (a good value is 3)
@ -793,6 +797,10 @@ siox_foreground_extract (TileManager *pixels,
gint offset_x,
gint offset_y,
TileManager *mask,
gint x,
gint y,
gint width,
gint height,
const gfloat limits[SIOX_DIMS],
gint smoothness,
SioxProgressFunc progress_callback,
@ -802,8 +810,6 @@ siox_foreground_extract (TileManager *pixels,
PixelRegion mapPR;
gpointer pr;
gboolean intersect;
gint x, y;
gint width, height;
gint bpp;
gint row, col;
const gfloat clustersize = get_clustersize (limits);
@ -818,16 +824,16 @@ siox_foreground_extract (TileManager *pixels,
g_return_if_fail (pixels != NULL);
g_return_if_fail (mask != NULL && tile_manager_bpp (mask) == 1);
g_return_if_fail (x >= 0);
g_return_if_fail (y >= 0);
g_return_if_fail (x + width <= tile_manager_width (mask));
g_return_if_fail (y + height <= tile_manager_height (mask));
g_return_if_fail (progress_data == NULL || progress_callback != NULL);
cpercep_init ();
intersect = gimp_rectangle_intersect (offset_x, offset_y,
tile_manager_width (pixels),
tile_manager_height (pixels),
0, 0,
tile_manager_width (mask),
tile_manager_height (mask),
x, y, width, height,
&x, &y, &width, &height);
/* FIXME:
@ -837,6 +843,8 @@ siox_foreground_extract (TileManager *pixels,
if (! intersect)
return;
cpercep_init ();
siox_progress_update (progress_callback, progress_data, 0.0);
/* count given foreground and background pixels */
@ -874,7 +882,7 @@ siox_foreground_extract (TileManager *pixels,
bpp = tile_manager_bpp (pixels);
/* create inputs for colorsignatures */
/* create inputs for color signatures */
pixel_region_init (&srcPR, pixels,
x - offset_x, y - offset_y, width, height, FALSE);
pixel_region_init (&mapPR, mask, x, y, width, height, FALSE);

View File

@ -50,6 +50,10 @@ void siox_foreground_extract (TileManager *pixels,
gint offset_x,
gint offset_y,
TileManager *map,
gint x,
gint y,
gint width,
gint height,
const gfloat limits[SIOX_DIMS],
gint smoothness,
SioxProgressFunc progress_callback,

View File

@ -36,7 +36,7 @@
#include "gimp-intl.h"
#define BATCH_DEFAULT_EVAL_PROC "plug_in_script_fu_eval"
#define BATCH_DEFAULT_EVAL_PROC "plug-in-script-fu-eval"
static gboolean batch_exit_after_callback (Gimp *gimp,
@ -72,10 +72,10 @@ batch_run (Gimp *gimp,
/* script-fu text console, hardcoded for backward compatibility */
if (strcmp (batch_interpreter, "plug_in_script_fu_eval") == 0 &&
if (strcmp (batch_interpreter, "plug-in-script-fu-eval") == 0 &&
strcmp (batch_commands[0], "-") == 0)
{
const gchar *proc_name = "plug_in_script_fu_text_console";
const gchar *proc_name = "plug-in-script-fu-text-console";
ProcRecord *proc = procedural_db_lookup (gimp, proc_name);
if (proc)

View File

@ -43,10 +43,30 @@ gimp_drawable_foreground_extract (GimpDrawable *drawable,
GimpForegroundExtractMode mode,
GimpDrawable *mask,
GimpProgress *progress)
{
g_return_if_fail (GIMP_IS_DRAWABLE (mask));
gimp_drawable_foreground_extract_rect (drawable, mode, mask,
0, 0,
gimp_item_width (GIMP_ITEM (mask)),
gimp_item_height (GIMP_ITEM (mask)),
progress);
}
void
gimp_drawable_foreground_extract_rect (GimpDrawable *drawable,
GimpForegroundExtractMode mode,
GimpDrawable *mask,
gint x,
gint y,
gint width,
gint height,
GimpProgress *progress)
{
GimpImage *gimage;
const guchar *colormap = NULL;
gint x, y;
const guchar *colormap = NULL;
gint offset_x;
gint offset_y;
g_return_if_fail (GIMP_IS_DRAWABLE (drawable));
g_return_if_fail (gimp_item_is_attached (GIMP_ITEM (drawable)));
@ -61,7 +81,7 @@ gimp_drawable_foreground_extract (GimpDrawable *drawable,
if (gimp_image_base_type (gimage) == GIMP_INDEXED)
colormap = gimp_image_get_colormap (gimage);
gimp_item_offsets (GIMP_ITEM (drawable), &x, &y);
gimp_item_offsets (GIMP_ITEM (drawable), &offset_x, &offset_y);
if (progress)
gimp_progress_start (progress, _("Foreground Extraction..."), FALSE);
@ -70,10 +90,11 @@ gimp_drawable_foreground_extract (GimpDrawable *drawable,
{
case GIMP_FOREGROUND_EXTRACT_SIOX:
{
const gfloat limits[SIOX_DIMS] = { 0.66, 1.25, 2.5 };
const gfloat limits[SIOX_DIMS] = { 0.66, 1.25, 2.5 };
siox_foreground_extract (gimp_drawable_data (drawable), colormap, x, y,
gimp_drawable_data (mask),
siox_foreground_extract (gimp_drawable_data (drawable), colormap,
offset_x, offset_y,
gimp_drawable_data (mask), x, y, width, height,
limits, 3,
(SioxProgressFunc) gimp_progress_set_value,
progress);

View File

@ -20,10 +20,17 @@
#define __GIMP_DRAWABLE_FOREGROUND_EXTRACT_H__
void gimp_drawable_foreground_extract (GimpDrawable *drawable,
GimpForegroundExtractMode mode,
GimpDrawable *mask,
GimpProgress *progress);
void gimp_drawable_foreground_extract (GimpDrawable *drawable,
GimpForegroundExtractMode mode,
GimpDrawable *mask,
GimpProgress *progress);
void gimp_drawable_foreground_extract_rect (GimpDrawable *drawable,
GimpForegroundExtractMode mode,
GimpDrawable *mask,
gint x,
gint y,
gint width,
gint height,
GimpProgress *progress);
#endif /* __GIMP_DRAWABLE_FOREGROUND_EXTRACT_H__ */

View File

@ -489,6 +489,9 @@ gimp_foreground_select_tool_select (GimpFreeSelectTool *free_sel,
GimpScanConvert *scan_convert;
GimpChannel *mask;
GList *list;
gint x, y;
gint x2, y2;
gint width, height;
if (! drawable)
return;
@ -509,13 +512,25 @@ gimp_foreground_select_tool_select (GimpFreeSelectTool *free_sel,
0, 0, 127);
gimp_scan_convert_free (scan_convert);
gimp_channel_bounds (mask, &x, &y, &x2, &y2);
width = x2 - x;
height = y2 - y;
/* restrict working area to double the size of the bounding box */
x = MAX (0, x - width / 2);
y = MAX (0, y - height / 2);
width = MIN (width * 2, gimp_item_width (GIMP_ITEM (mask)) - x);
height = MIN (height * 2, gimp_item_height (GIMP_ITEM (mask)) - y);
/* apply foreground and background markers */
for (list = fg_select->strokes; list; list = list->next)
gimp_foreground_select_tool_stroke (mask, list->data);
gimp_drawable_foreground_extract (drawable,
GIMP_FOREGROUND_EXTRACT_SIOX,
GIMP_DRAWABLE (mask),
GIMP_PROGRESS (gdisp));
gimp_drawable_foreground_extract_rect (drawable,
GIMP_FOREGROUND_EXTRACT_SIOX,
GIMP_DRAWABLE (mask),
x, y, width, height,
GIMP_PROGRESS (gdisp));
gimp_foreground_select_tool_set_mask (GIMP_FOREGROUND_SELECT_TOOL (free_sel),
gdisp, mask);