diff options
| author | bulia byak <buliabyak@gmail.com> | 2007-10-12 05:41:16 +0000 |
|---|---|---|
| committer | buliabyak <buliabyak@users.sourceforge.net> | 2007-10-12 05:41:16 +0000 |
| commit | 986563aa82a630c2bf6e7e3c3ac4404e635727c0 (patch) | |
| tree | 876b7a183b2947d6d36027afd97bb4ab4a0e8068 /src/gradient-context.cpp | |
| parent | proper averaging of all selected draggers on query style; select-next/prev re... (diff) | |
| download | inkscape-986563aa82a630c2bf6e7e3c3ac4404e635727c0.tar.gz inkscape-986563aa82a630c2bf6e7e3c3ac4404e635727c0.zip | |
scroll desktop to selected handle after Tab/Shift-Tab; allow Ins to work even if a single dragger is selected
(bzr r3892)
Diffstat (limited to 'src/gradient-context.cpp')
| -rw-r--r-- | src/gradient-context.cpp | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/src/gradient-context.cpp b/src/gradient-context.cpp index 93cf79214..e8a280c40 100644 --- a/src/gradient-context.cpp +++ b/src/gradient-context.cpp @@ -206,7 +206,9 @@ sp_gradient_context_select_next (SPEventContext *event_context) GrDrag *drag = event_context->_grdrag; g_assert (drag); - drag->select_next(); + GrDragger *d = drag->select_next(); + + event_context->desktop->scroll_to_point(&(d->point), 1.0); } void @@ -215,7 +217,9 @@ sp_gradient_context_select_prev (SPEventContext *event_context) GrDrag *drag = event_context->_grdrag; g_assert (drag); - drag->select_prev(); + GrDragger *d = drag->select_prev(); + + event_context->desktop->scroll_to_point(&(d->point), 1.0); } // FIXME: make global function in libnr or somewhere. @@ -355,6 +359,22 @@ sp_gradient_context_add_stops_between_selected_stops (SPGradientContext *rc) std::vector<NR::Point> coords = sp_gradient_context_get_stop_intervals (drag, &these_stops, &next_stops); + if (g_slist_length(these_stops) == 0 && drag->numSelected() == 1) { + // if a single stop is selected, add between that stop and the next one + GrDragger *dragger = (GrDragger *) drag->selected->data; + for (GSList const* j = dragger->draggables; j != NULL; j = j->next) { + GrDraggable *d = (GrDraggable *) j->data; + SPGradient *gradient = sp_item_gradient (d->item, d->fill_or_stroke); + SPGradient *vector = sp_gradient_get_forked_vector_if_necessary (gradient, false); + SPStop *this_stop = sp_get_stop_i (vector, d->point_i); + SPStop *next_stop = sp_next_stop (this_stop); + if (this_stop && next_stop) { + these_stops = g_slist_prepend (these_stops, this_stop); + next_stops = g_slist_prepend (next_stops, next_stop); + } + } + } + // now actually create the new stops GSList *i = these_stops; GSList *j = next_stops; |
