allow the parent progress to be NULL. Documented the API.

2007-02-27  Sven Neumann  <sven@gimp.org>

	* app/core/gimpsubprogress.[ch]: allow the parent progress to be NULL.
	Documented the API.

	* app/core/gimpimage-scale.c: use the sub-progress unconditionally.


svn path=/trunk/; revision=22010
This commit is contained in:
Sven Neumann 2007-02-27 11:03:18 +00:00 committed by Sven Neumann
parent 5b5082a433
commit 6852fc8068
4 changed files with 67 additions and 39 deletions

View File

@ -1,3 +1,10 @@
2007-02-27 Sven Neumann <sven@gimp.org>
* app/core/gimpsubprogress.[ch]: allow the parent progress to be NULL.
Documented the API.
* app/core/gimpimage-scale.c: use the sub-progress unconditionally.
2007-02-27 Sven Neumann <sven@gimp.org>
* app/core/Makefile.am

View File

@ -49,15 +49,15 @@ gimp_image_scale (GimpImage *image,
GimpProgress *progress)
{
GimpItem *item;
GimpProgress *sub_progress = NULL;
GimpProgress *sub_progress;
GList *list;
GList *remove = NULL;
GList *remove = NULL;
gint old_width;
gint old_height;
gdouble img_scale_w = 1.0;
gdouble img_scale_h = 1.0;
gint progress_steps = 1;
gint progress_current = 0;
gdouble img_scale_w = 1.0;
gdouble img_scale_h = 1.0;
gint progress_steps;
gint progress_current;
g_return_if_fail (GIMP_IS_IMAGE (image));
g_return_if_fail (new_width > 0 && new_height > 0);
@ -65,15 +65,12 @@ gimp_image_scale (GimpImage *image,
gimp_set_busy (image->gimp);
if (progress)
{
sub_progress = gimp_sub_progress_new (progress);
sub_progress = gimp_sub_progress_new (progress);
progress_steps = (image->channels->num_children +
image->layers->num_children +
image->vectors->num_children +
1 /* selection */);
}
progress_steps = (image->channels->num_children +
image->layers->num_children +
image->vectors->num_children +
1 /* selection */);
g_object_freeze_notify (G_OBJECT (image));
@ -101,9 +98,8 @@ gimp_image_scale (GimpImage *image,
{
item = list->data;
if (sub_progress)
gimp_sub_progress_set_steps (GIMP_SUB_PROGRESS (sub_progress),
progress_current++, progress_steps);
gimp_sub_progress_set_steps (GIMP_SUB_PROGRESS (sub_progress),
progress_current++, progress_steps);
gimp_item_scale (item,
new_width, new_height, 0, 0,
@ -117,18 +113,17 @@ gimp_image_scale (GimpImage *image,
{
item = list->data;
if (sub_progress)
gimp_sub_progress_set_steps (GIMP_SUB_PROGRESS (sub_progress),
progress_current++, progress_steps);
gimp_sub_progress_set_steps (GIMP_SUB_PROGRESS (sub_progress),
progress_current++, progress_steps);
gimp_item_scale (item,
new_width, new_height, 0, 0,
interpolation_type, sub_progress);
}
/* Don't forget the selection mask! */
if (sub_progress)
gimp_sub_progress_set_steps (GIMP_SUB_PROGRESS (sub_progress),
progress_current++, progress_steps);
gimp_sub_progress_set_steps (GIMP_SUB_PROGRESS (sub_progress),
progress_current++, progress_steps);
gimp_item_scale (GIMP_ITEM (gimp_image_get_mask (image)),
new_width, new_height, 0, 0,
@ -141,9 +136,8 @@ gimp_image_scale (GimpImage *image,
{
item = list->data;
if (sub_progress)
gimp_sub_progress_set_steps (GIMP_SUB_PROGRESS (sub_progress),
progress_current++, progress_steps);
gimp_sub_progress_set_steps (GIMP_SUB_PROGRESS (sub_progress),
progress_current++, progress_steps);
if (! gimp_item_scale_by_factors (item,
img_scale_w, img_scale_h,
@ -207,8 +201,7 @@ gimp_image_scale (GimpImage *image,
gimp_image_undo_group_end (image);
if (sub_progress)
g_object_unref (sub_progress);
g_object_unref (sub_progress);
gimp_viewable_size_changed (GIMP_VIEWABLE (image));
g_object_thaw_notify (G_OBJECT (image));

View File

@ -190,20 +190,41 @@ gimp_sub_progress_message (GimpProgress *progress,
return FALSE;
}
/**
* gimp_sub_progress_new:
* @progress: parent progress or %NULL
*
* GimpSubProgress implements the GimpProgress interface and can be
* used whereever a GimpProgress is needed. It maps progress
* information to a sub-range of its parent @progress. This is useful
* when an action breaks down into multiple sub-actions that itself
* need a #GimpProgress pointer. See gimp_image_scale() for an example.
*
* Return value: a new #GimpProgress object
*/
GimpProgress *
gimp_sub_progress_new (GimpProgress *progress)
{
GimpSubProgress *sub;
g_return_val_if_fail (GIMP_IS_PROGRESS (progress), NULL);
g_return_val_if_fail (progress == NULL || GIMP_IS_PROGRESS (progress), NULL);
sub = g_object_new (GIMP_TYPE_SUB_PROGRESS, NULL);
sub->progress = g_object_ref (progress);
if (progress)
sub->progress = g_object_ref (progress);
return GIMP_PROGRESS (sub);
}
/**
* gimp_sub_progress_set_range:
* @start: start value of range on the parent process
* @end: end value of range on the parent process
*
* Sets a range on the parent progress that this @progress should be
* mapped to.
*/
void
gimp_sub_progress_set_range (GimpSubProgress *progress,
gdouble start,
@ -216,14 +237,21 @@ gimp_sub_progress_set_range (GimpSubProgress *progress,
progress->end = end;
}
/**
* gimp_sub_progress_set_step:
* @index: step index
* @num_steps: number of steps
*
* A more convenient form of gimp_sub_progress_set_range().
*/
void
gimp_sub_progress_set_steps (GimpSubProgress *progress,
gint num,
gint steps)
gimp_sub_progress_set_step (GimpSubProgress *progress,
gint index,
gint num_steps)
{
g_return_if_fail (GIMP_IS_SUB_PROGRESS (progress));
g_return_if_fail (num < steps && steps > 0);
g_return_if_fail (index < num_steps && num_steps > 0);
progress->start = (gdouble) num / steps;
progress->end = (gdouble) (num + 1) / steps;
progress->start = (gdouble) index / num_steps;
progress->end = (gdouble) (index + 1) / num_steps;
}

View File

@ -51,9 +51,9 @@ GimpProgress * gimp_sub_progress_new (GimpProgress *progress);
void gimp_sub_progress_set_range (GimpSubProgress *progress,
gdouble start,
gdouble end);
void gimp_sub_progress_set_steps (GimpSubProgress *progress,
gint num,
gint steps);
void gimp_sub_progress_set_step (GimpSubProgress *progress,
gint index,
gint num_steps);