diff options
| author | bulia byak <buliabyak@gmail.com> | 2007-10-12 05:40:24 +0000 |
|---|---|---|
| committer | buliabyak <buliabyak@users.sourceforge.net> | 2007-10-12 05:40:24 +0000 |
| commit | 9d6d2698e85b1b66747348c69254eba886630aff (patch) | |
| tree | 774132ab603cbcec9503a2743fe93e19f8479864 /src/gradient-drag.cpp | |
| parent | scroll desktop to selected node after Tab/Shift-Tab (diff) | |
| download | inkscape-9d6d2698e85b1b66747348c69254eba886630aff.tar.gz inkscape-9d6d2698e85b1b66747348c69254eba886630aff.zip | |
proper averaging of all selected draggers on query style; select-next/prev return the new selected dragger
(bzr r3891)
Diffstat (limited to 'src/gradient-drag.cpp')
| -rw-r--r-- | src/gradient-drag.cpp | 53 |
1 files changed, 32 insertions, 21 deletions
diff --git a/src/gradient-drag.cpp b/src/gradient-drag.cpp index 3f7195b07..9244b8fd2 100644 --- a/src/gradient-drag.cpp +++ b/src/gradient-drag.cpp @@ -128,22 +128,25 @@ gr_drag_style_query (SPStyle *style, int property, gpointer data) int count = 0; - for (GSList const* i = ((GrDragger*)drag->selected->data)->draggables; i != NULL; i = i->next) { // for all draggables of dragger - GrDraggable *draggable = (GrDraggable *) i->data; - - if (ret == QUERY_STYLE_NOTHING) { - ret = QUERY_STYLE_SINGLE; - } else if (ret == QUERY_STYLE_SINGLE) { - ret = QUERY_STYLE_MULTIPLE_AVERAGED; - } + for (GList *i = drag->selected; i != NULL; i = i->next) { // for all selected draggers + GrDragger *d = (GrDragger *) i->data; + for (GSList const* j = d->draggables; j != NULL; j = j->next) { // for all draggables of dragger + GrDraggable *draggable = (GrDraggable *) j->data; + + if (ret == QUERY_STYLE_NOTHING) { + ret = QUERY_STYLE_SINGLE; + } else if (ret == QUERY_STYLE_SINGLE) { + ret = QUERY_STYLE_MULTIPLE_AVERAGED; + } - guint32 c = sp_item_gradient_stop_query_style (draggable->item, draggable->point_type, draggable->point_i, draggable->fill_or_stroke); - cf[0] += SP_RGBA32_R_F (c); - cf[1] += SP_RGBA32_G_F (c); - cf[2] += SP_RGBA32_B_F (c); - cf[3] += SP_RGBA32_A_F (c); + guint32 c = sp_item_gradient_stop_query_style (draggable->item, draggable->point_type, draggable->point_i, draggable->fill_or_stroke); + cf[0] += SP_RGBA32_R_F (c); + cf[1] += SP_RGBA32_G_F (c); + cf[2] += SP_RGBA32_B_F (c); + cf[3] += SP_RGBA32_A_F (c); - count ++; + count ++; + } } if (count) { @@ -1679,29 +1682,37 @@ GrDrag::selected_move_screen (double x, double y) /** Select the knot next to the last selected one and deselect all other selected. */ -void +GrDragger * GrDrag::select_next () { + GrDragger *d = NULL; if (selected == NULL || g_list_find(draggers, selected->data)->next == NULL) { - if (draggers) - setSelected ((GrDragger *) draggers->data); + if (draggers) + d = (GrDragger *) draggers->data; } else { - setSelected ((GrDragger *) g_list_find(draggers, selected->data)->next->data); + d = (GrDragger *) g_list_find(draggers, selected->data)->next->data; } + if (d) + setSelected (d); + return d; } /** Select the knot previous from the last selected one and deselect all other selected. */ -void +GrDragger * GrDrag::select_prev () { + GrDragger *d = NULL; if (selected == NULL || g_list_find(draggers, selected->data)->prev == NULL) { if (draggers) - setSelected ((GrDragger *) g_list_last (draggers)->data); + d = (GrDragger *) g_list_last (draggers)->data; } else { - setSelected ((GrDragger *) g_list_find(draggers, selected->data)->prev->data); + d = (GrDragger *) g_list_find(draggers, selected->data)->prev->data; } + if (d) + setSelected (d); + return d; } |
