On Tue, Jul 15, 2008 at 1:06 AM, Bill Skaggs <weskaggs@xxxxxxxxx> wrote: > Here is to me the most important question. Suppose the user wants > to switch back and forth among a few brushes that don't have any > natural relationship. Suppose for example that the user wants to draw > with a pencil brush, and then erase parts of the drawing with a round > parametric brush, and repeat the cycle. Is this sort of thing going to > be supported in a way that is easy for the user? > > -- Bill Cycling between the brushes in the filtered view could do this (so, tag both with 'quickdraw' then use the action -- notice their ordering is not user-controllable in this scenario). I think 'next brush' and 'previous brush' actions that already exist should handle this. However, they appear not to cycle currently -- ie going back from the first brush leaves you at the first brush rather than the last, and vice versa. This should really be fixed -- cycling makes more sense for GimpData's (brush, pattern, palette) than the current, clipping, behaviour. Looking at the code in app/actions/actions.c, it seems that all we need is to change action_select_object() to support wrapping, and then use that parameter (in context-commands.c and layers-commands.c). A diff is attached that implements the suggested changes.
Index: app/actions/actions.c =================================================================== --- app/actions/actions.c (revision 26193) +++ app/actions/actions.c (working copy) @@ -511,7 +511,8 @@ GimpObject * action_select_object (GimpActionSelectType select_type, GimpContainer *container, - GimpObject *current) + GimpObject *current, + gboolean wrap) { gint select_index; gint n_children; @@ -561,7 +562,14 @@ break; } - select_index = CLAMP (select_index, 0, n_children - 1); + if (wrap) + { + while (select_index < 0) + select_index = (n_children) - (0 - select_index); + + while (select_index > (n_children - 1)) + select_index = (n_children - select_index); + } return gimp_container_get_child_by_index (container, select_index); } Index: app/actions/layers-commands.c =================================================================== --- app/actions/layers-commands.c (revision 26193) +++ app/actions/layers-commands.c (working copy) @@ -348,7 +348,8 @@ new_layer = (GimpLayer *) action_select_object ((GimpActionSelectType) value, image->layers, - (GimpObject *) layer); + (GimpObject *) layer, + FALSE); if (new_layer && new_layer != layer) { Index: app/actions/context-commands.c =================================================================== --- app/actions/context-commands.c (revision 26193) +++ app/actions/context-commands.c (working copy) @@ -680,7 +680,7 @@ current = gimp_context_get_by_type (context, container->children_type); - current = action_select_object (select_type, container, current); + current = action_select_object (select_type, container, current, TRUE); if (current) gimp_context_set_by_type (context, container->children_type, current);
_______________________________________________ Gimp-developer mailing list Gimp-developer@xxxxxxxxxxxxxxxxxxxxxx https://lists.XCF.Berkeley.EDU/mailman/listinfo/gimp-developer