Hello,
On Tue, Jul 15, 2008 at 10:01 AM, David Gowers <[EMAIL PROTECTED]> wrote:
> On Tue, Jul 15, 2008 at 1:06 AM, Bill Skaggs <[EMAIL PROTECTED]> 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.
.. I am puzzled by how this message got double posted.
I left a file out of the diff and some formatting was incorrect. Here
is the revised diff.
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/actions.h
===================================================================
--- app/actions/actions.h (revision 26193)
+++ app/actions/actions.h (working copy)
@@ -51,7 +51,8 @@
gboolean wrap);
GimpObject * action_select_object (GimpActionSelectType select_type,
GimpContainer *container,
- GimpObject *current);
+ GimpObject *current,
+ gboolean wrap);
#define return_if_no_gimp(gimp,data) \
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
[email protected]
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gimp-developer