summaryrefslogtreecommitdiffstats
path: root/src/gradient-drag.cpp
diff options
context:
space:
mode:
authorbulia byak <buliabyak@gmail.com>2007-10-12 05:40:24 +0000
committerbuliabyak <buliabyak@users.sourceforge.net>2007-10-12 05:40:24 +0000
commit9d6d2698e85b1b66747348c69254eba886630aff (patch)
tree774132ab603cbcec9503a2743fe93e19f8479864 /src/gradient-drag.cpp
parentscroll desktop to selected node after Tab/Shift-Tab (diff)
downloadinkscape-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.cpp53
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;
}