Merge lp:~inkscape+alexander/inkscape/move-boolops into lp:~inkscape.dev/inkscape/trunk
- move-boolops
- Merge into trunk
Proposed by
Alexander Brock
Status: | Merged |
---|---|
Approved by: | Mc |
Approved revision: | no longer in the source branch. |
Merged at revision: | 15232 |
Proposed branch: | lp:~inkscape+alexander/inkscape/move-boolops |
Merge into: | lp:~inkscape.dev/inkscape/trunk |
Diff against target: |
545 lines (+128/-171) 11 files modified
src/livarot/LivarotDefs.h (+0/-12) src/livarot/Shape.h (+1/-0) src/livarot/int-line.h (+1/-0) src/object-set.h (+36/-1) src/splivarot.cpp (+72/-121) src/splivarot.h (+1/-20) src/ui/tools/calligraphic-tool.cpp (+2/-2) src/ui/tools/eraser-tool.cpp (+6/-6) src/ui/tools/flood-tool.cpp (+1/-1) src/ui/tools/spray-tool.cpp (+2/-2) src/verbs.cpp (+6/-6) |
To merge this branch: | bzr merge lp:~inkscape+alexander/inkscape/move-boolops |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Mc | Pending | ||
Review via email: mp+310388@code.launchpad.net |
Commit message
Description of the change
Move boolop functions from sp_selected_
To post a comment you must log in.
- 15230. By Tavmjong Bah
-
Enable swapping of fill and stroke when one is a mesh.
- 15231. By Tavmjong Bah
-
Click-drag selects nodes rather than creates new mesh if mesh already exists.
- 15232. By Mc
-
merge boolop branch: Move boolop functions from sp_selected_
path_<op> to ObjectSet::path<op>
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'src/livarot/LivarotDefs.h' |
2 | --- src/livarot/LivarotDefs.h 2016-04-11 12:56:03 +0000 |
3 | +++ src/livarot/LivarotDefs.h 2016-11-09 00:34:30 +0000 |
4 | @@ -40,18 +40,6 @@ |
5 | found_between = 4 |
6 | }; |
7 | |
8 | -// boolean operation |
9 | -enum bool_op |
10 | -{ |
11 | - bool_op_union, // A OR B |
12 | - bool_op_inters, // A AND B |
13 | - bool_op_diff, // A \ B |
14 | - bool_op_symdiff, // A XOR B |
15 | - bool_op_cut, // coupure (pleines) |
16 | - bool_op_slice // coupure (contour) |
17 | -}; |
18 | -typedef enum bool_op BooleanOp; |
19 | - |
20 | // types of cap for stroking polylines |
21 | enum butt_typ |
22 | { |
23 | |
24 | === modified file 'src/livarot/Shape.h' |
25 | --- src/livarot/Shape.h 2014-03-30 22:08:13 +0000 |
26 | +++ src/livarot/Shape.h 2016-11-09 00:34:30 +0000 |
27 | @@ -17,6 +17,7 @@ |
28 | #include <2geom/point.h> |
29 | |
30 | #include "livarot/LivarotDefs.h" |
31 | +#include "object-set.h" |
32 | |
33 | class Path; |
34 | class FloatLigne; |
35 | |
36 | === modified file 'src/livarot/int-line.h' |
37 | --- src/livarot/int-line.h 2011-10-04 05:43:09 +0000 |
38 | +++ src/livarot/int-line.h 2016-11-09 00:34:30 +0000 |
39 | @@ -2,6 +2,7 @@ |
40 | #define INKSCAPE_LIVAROT_INT_LINE_H |
41 | |
42 | #include "livarot/LivarotDefs.h" |
43 | +#include "object-set.h" |
44 | |
45 | /** \file |
46 | * Coverage with integer boundaries. |
47 | |
48 | === modified file 'src/object-set.h' |
49 | --- src/object-set.h 2016-11-06 22:07:52 +0000 |
50 | +++ src/object-set.h 2016-11-09 00:34:30 +0000 |
51 | @@ -33,6 +33,29 @@ |
52 | #include "sp-item-group.h" |
53 | #include "desktop.h" |
54 | #include "document.h" |
55 | +#include "verbs.h" |
56 | + |
57 | +enum BoolOpErrors { |
58 | + DONE, |
59 | + DONE_NO_PATH, |
60 | + DONE_NO_ACTION, |
61 | + ERR_TOO_LESS_PATHS_1, |
62 | + ERR_TOO_LESS_PATHS_2, |
63 | + ERR_NO_PATHS, |
64 | + ERR_Z_ORDER |
65 | +}; |
66 | + |
67 | +// boolean operation |
68 | +enum bool_op |
69 | +{ |
70 | + bool_op_union, // A OR B |
71 | + bool_op_inters, // A AND B |
72 | + bool_op_diff, // A \ B |
73 | + bool_op_symdiff, // A XOR B |
74 | + bool_op_cut, // coupure (pleines) |
75 | + bool_op_slice // coupure (contour) |
76 | +}; |
77 | +typedef enum bool_op BooleanOp; |
78 | |
79 | class SPBox3D; |
80 | class Persp3D; |
81 | @@ -376,7 +399,16 @@ |
82 | void toCurves(bool skip_undo = false); |
83 | void toLPEItems(); |
84 | void pathReverse(); |
85 | - |
86 | + |
87 | + // Boolean operations |
88 | + // in splivarot.cpp |
89 | + bool pathUnion(const bool skip_undo = false); |
90 | + bool pathIntersect(const bool skip_undo = false); |
91 | + bool pathDiff(const bool skip_undo = false); |
92 | + bool pathSymDiff(const bool skip_undo = false); |
93 | + bool pathCut(const bool skip_undo = false); |
94 | + bool pathSlice(const bool skip_undo = false); |
95 | + |
96 | //Other path operations |
97 | //in selection-chemistry.cpp |
98 | void toMarker(bool apply = true); |
99 | @@ -438,6 +470,9 @@ |
100 | std::list<SPBox3D *> _3dboxes; |
101 | std::unordered_map<SPObject*, sigc::connection> _releaseConnections; |
102 | |
103 | +private: |
104 | + BoolOpErrors pathBoolOp(bool_op bop, const bool skip_undo, const unsigned int verb = SP_VERB_NONE, const Glib::ustring description = ""); |
105 | + |
106 | }; |
107 | |
108 | typedef ObjectSet::SPItemRange SPItemRange; |
109 | |
110 | === modified file 'src/splivarot.cpp' |
111 | --- src/splivarot.cpp 2016-09-02 19:32:55 +0000 |
112 | +++ src/splivarot.cpp 2016-11-09 00:34:30 +0000 |
113 | @@ -47,96 +47,51 @@ |
114 | #include "verbs.h" |
115 | #include "2geom/svg-path-parser.h" // to get from SVG on boolean to Geom::Path |
116 | |
117 | -enum BoolOpErrors { |
118 | - DONE, |
119 | - DONE_NO_PATH, |
120 | - DONE_NO_ACTION, |
121 | - ERR_TOO_LESS_PATHS_1, |
122 | - ERR_TOO_LESS_PATHS_2, |
123 | - ERR_NO_PATHS, |
124 | - ERR_Z_ORDER |
125 | -}; |
126 | - |
127 | using Inkscape::DocumentUndo; |
128 | |
129 | bool Ancetre(Inkscape::XML::Node *a, Inkscape::XML::Node *who); |
130 | |
131 | -void sp_selected_path_boolop_ui(Inkscape::Selection *selection, SPDesktop *desktop, bool_op bop, |
132 | - const unsigned int verb = SP_VERB_NONE, const Glib::ustring description = ""); |
133 | -BoolOpErrors sp_selected_path_boolop(Inkscape::ObjectSet *set, bool_op bop); |
134 | void sp_selected_path_do_offset(SPDesktop *desktop, bool expand, double prefOffset); |
135 | void sp_selected_path_create_offset_object(SPDesktop *desktop, int expand, bool updating); |
136 | |
137 | -void |
138 | -sp_selected_path_union(Inkscape::Selection *selection, SPDesktop *desktop) |
139 | -{ |
140 | - sp_selected_path_boolop_ui(selection, desktop, bool_op_union, SP_VERB_SELECTION_UNION, _("Union")); |
141 | -} |
142 | - |
143 | -void |
144 | -sp_selected_path_union_skip_undo(Inkscape::ObjectSet *set) |
145 | -{ |
146 | - sp_selected_path_boolop(set, bool_op_union); |
147 | -} |
148 | - |
149 | -void |
150 | -sp_selected_path_intersect(Inkscape::Selection *selection, SPDesktop *desktop) |
151 | -{ |
152 | - sp_selected_path_boolop_ui(selection, desktop, bool_op_inters, SP_VERB_SELECTION_INTERSECT, _("Intersection")); |
153 | -} |
154 | - |
155 | -void |
156 | -sp_selected_path_intersect_skip_undo(Inkscape::ObjectSet *set) |
157 | -{ |
158 | - sp_selected_path_boolop(set, bool_op_inters); |
159 | -} |
160 | - |
161 | -void |
162 | -sp_selected_path_diff(Inkscape::Selection *selection, SPDesktop *desktop) |
163 | -{ |
164 | - sp_selected_path_boolop_ui(selection, desktop, bool_op_diff, SP_VERB_SELECTION_DIFF, _("Difference")); |
165 | -} |
166 | - |
167 | -void |
168 | -sp_selected_path_diff_skip_undo(Inkscape::ObjectSet *set) |
169 | -{ |
170 | - sp_selected_path_boolop(set, bool_op_diff); |
171 | -} |
172 | - |
173 | -void |
174 | -sp_selected_path_symdiff(Inkscape::Selection *selection, SPDesktop *desktop) |
175 | -{ |
176 | - sp_selected_path_boolop_ui(selection, desktop, bool_op_symdiff, SP_VERB_SELECTION_SYMDIFF, _("Exclusion")); |
177 | -} |
178 | - |
179 | -void |
180 | -sp_selected_path_symdiff_skip_undo(Inkscape::ObjectSet *set) |
181 | -{ |
182 | - sp_selected_path_boolop(set, bool_op_symdiff); |
183 | -} |
184 | - |
185 | -void |
186 | -sp_selected_path_cut(Inkscape::Selection *selection, SPDesktop *desktop) |
187 | -{ |
188 | - sp_selected_path_boolop_ui(selection, desktop, bool_op_cut, SP_VERB_SELECTION_CUT, _("Division")); |
189 | -} |
190 | - |
191 | -void |
192 | -sp_selected_path_cut_skip_undo(Inkscape::ObjectSet *set) |
193 | -{ |
194 | - sp_selected_path_boolop(set, bool_op_cut); |
195 | -} |
196 | - |
197 | -void |
198 | -sp_selected_path_slice(Inkscape::Selection *selection, SPDesktop *desktop) |
199 | -{ |
200 | - sp_selected_path_boolop_ui(selection, desktop, bool_op_slice, SP_VERB_SELECTION_SLICE, _("Cut path")); |
201 | -} |
202 | - |
203 | -void |
204 | -sp_selected_path_slice_skip_undo(Inkscape::ObjectSet *set) |
205 | -{ |
206 | - sp_selected_path_boolop(set, bool_op_slice); |
207 | +bool Inkscape::ObjectSet::pathUnion(const bool skip_undo) { |
208 | + BoolOpErrors result = pathBoolOp(bool_op_union, skip_undo, SP_VERB_SELECTION_UNION, _("Union")); |
209 | + return DONE == result; |
210 | +} |
211 | + |
212 | +bool |
213 | +Inkscape::ObjectSet::pathIntersect(const bool skip_undo) |
214 | +{ |
215 | + BoolOpErrors result = pathBoolOp(bool_op_inters, skip_undo, SP_VERB_SELECTION_INTERSECT, _("Intersection")); |
216 | + return DONE == result; |
217 | +} |
218 | + |
219 | +bool |
220 | +Inkscape::ObjectSet::pathDiff(const bool skip_undo) |
221 | +{ |
222 | + BoolOpErrors result = pathBoolOp(bool_op_diff, skip_undo, SP_VERB_SELECTION_DIFF, _("Difference")); |
223 | + return DONE == result; |
224 | +} |
225 | + |
226 | +bool |
227 | +Inkscape::ObjectSet::pathSymDiff(const bool skip_undo) |
228 | +{ |
229 | + BoolOpErrors result = pathBoolOp(bool_op_symdiff, skip_undo, SP_VERB_SELECTION_SYMDIFF, _("Exclusion")); |
230 | + return DONE == result; |
231 | +} |
232 | + |
233 | +bool |
234 | +Inkscape::ObjectSet::pathCut(const bool skip_undo) |
235 | +{ |
236 | + BoolOpErrors result = pathBoolOp(bool_op_cut, skip_undo, SP_VERB_SELECTION_CUT, _("Division")); |
237 | + return DONE == result; |
238 | +} |
239 | + |
240 | +bool |
241 | +Inkscape::ObjectSet::pathSlice(const bool skip_undo) |
242 | +{ |
243 | + BoolOpErrors result = pathBoolOp(bool_op_slice, skip_undo, SP_VERB_SELECTION_SLICE, _("Cut path")); |
244 | + return DONE == result; |
245 | } |
246 | |
247 | // helper for printing error messages, regardless of whether we have a GUI or not |
248 | @@ -352,10 +307,36 @@ |
249 | |
250 | // boolean operations on the desktop |
251 | // take the source paths from the file, do the operation, delete the originals and add the results |
252 | -BoolOpErrors sp_selected_path_boolop(Inkscape::ObjectSet * set, bool_op bop) |
253 | +BoolOpErrors Inkscape::ObjectSet::pathBoolOp(bool_op bop, const bool skip_undo, const unsigned int verb, const Glib::ustring description) |
254 | { |
255 | - SPDocument *doc = set->desktop()->getDocument(); |
256 | - std::vector<SPItem*> il(set->items().begin(), set->items().end()); |
257 | + if (nullptr != desktop() && !skip_undo) { |
258 | + SPDocument *doc = desktop()->getDocument(); |
259 | + BoolOpErrors returnCode = ObjectSet::pathBoolOp(bop, true); |
260 | + switch(returnCode) { |
261 | + case ERR_TOO_LESS_PATHS_1: |
262 | + boolop_display_error_message(desktop(), _("Select <b>at least 1 path</b> to perform a boolean union.")); |
263 | + break; |
264 | + case ERR_TOO_LESS_PATHS_2: |
265 | + boolop_display_error_message(desktop(), _("Select <b>at least 2 paths</b> to perform a boolean operation.")); |
266 | + break; |
267 | + case ERR_NO_PATHS: |
268 | + boolop_display_error_message(desktop(), _("One of the objects is <b>not a path</b>, cannot perform boolean operation.")); |
269 | + break; |
270 | + case ERR_Z_ORDER: |
271 | + boolop_display_error_message(desktop(), _("Unable to determine the <b>z-order</b> of the objects selected for difference, XOR, division, or path cut.")); |
272 | + break; |
273 | + case DONE_NO_PATH: |
274 | + DocumentUndo::done(doc, SP_VERB_NONE, description); |
275 | + break; |
276 | + case DONE: |
277 | + DocumentUndo::done(doc, verb, description); |
278 | + break; |
279 | + } |
280 | + return returnCode; |
281 | + } |
282 | + |
283 | + SPDocument *doc = document(); |
284 | + std::vector<SPItem*> il(items().begin(), items().end()); |
285 | |
286 | // allow union on a single object for the purpose of removing self overlapse (svn log, revision 13334) |
287 | if (il.size() < 2 && bop != bool_op_union) { |
288 | @@ -687,7 +668,7 @@ |
289 | for (std::vector<SPItem*>::const_iterator l = il.begin(); l != il.end(); l++){ |
290 | (*l)->deleteObject(); |
291 | } |
292 | - set->clear(); |
293 | + clear(); |
294 | |
295 | delete res; |
296 | return DONE_NO_PATH; |
297 | @@ -703,7 +684,7 @@ |
298 | } |
299 | } else { |
300 | // find out the bottom object |
301 | - std::vector<Inkscape::XML::Node*> sorted(set->xmlNodes().begin(), set->xmlNodes().end()); |
302 | + std::vector<Inkscape::XML::Node*> sorted(xmlNodes().begin(), xmlNodes().end()); |
303 | |
304 | sort(sorted.begin(),sorted.end(),sp_repr_compare_position_bool); |
305 | |
306 | @@ -731,7 +712,7 @@ |
307 | gchar *title = source->title(); |
308 | gchar *desc = source->desc(); |
309 | // remove source paths |
310 | - set->clear(); |
311 | + clear(); |
312 | for (std::vector<SPItem*>::const_iterator l = il.begin(); l != il.end(); l++){ |
313 | // if this is the bottommost object, |
314 | if (!strcmp(reinterpret_cast<SPObject *>(*l)->getRepr()->attribute("id"), id)) { |
315 | @@ -810,7 +791,7 @@ |
316 | // move to the saved position |
317 | repr->setPosition(pos > 0 ? pos : 0); |
318 | |
319 | - set->add(doc->getObjectByRepr(repr)); |
320 | + add(doc->getObjectByRepr(repr)); |
321 | Inkscape::GC::release(repr); |
322 | |
323 | delete resPath[i]; |
324 | @@ -845,7 +826,7 @@ |
325 | } |
326 | repr->setPosition(pos > 0 ? pos : 0); |
327 | |
328 | - set->add(doc->getObjectByRepr(repr)); |
329 | + add(doc->getObjectByRepr(repr)); |
330 | Inkscape::GC::release(repr); |
331 | } |
332 | |
333 | @@ -858,36 +839,6 @@ |
334 | return DONE; |
335 | } |
336 | |
337 | -void sp_selected_path_boolop_ui(Inkscape::Selection *selection, SPDesktop *desktop, bool_op bop, const unsigned int verb, |
338 | - const Glib::ustring description) |
339 | -{ |
340 | - SPDocument *doc = selection->desktop()->getDocument(); |
341 | - BoolOpErrors returnCode = sp_selected_path_boolop(selection, bop); |
342 | - switch(returnCode) { |
343 | - case ERR_TOO_LESS_PATHS_1: |
344 | - boolop_display_error_message(desktop, _("Select <b>at least 1 path</b> to perform a boolean union.")); |
345 | - return; |
346 | - case ERR_TOO_LESS_PATHS_2: |
347 | - boolop_display_error_message(desktop, _("Select <b>at least 2 paths</b> to perform a boolean operation.")); |
348 | - return; |
349 | - case ERR_NO_PATHS: |
350 | - boolop_display_error_message(desktop, _("One of the objects is <b>not a path</b>, cannot perform boolean operation.")); |
351 | - return; |
352 | - case ERR_Z_ORDER: |
353 | - boolop_display_error_message(desktop, _("Unable to determine the <b>z-order</b> of the objects selected for difference, XOR, division, or path cut.")); |
354 | - return; |
355 | - case DONE_NO_PATH: |
356 | - DocumentUndo::done(doc, SP_VERB_NONE, description); |
357 | - return; |
358 | - case DONE: |
359 | - DocumentUndo::done(doc, verb, description); |
360 | - return; |
361 | - case DONE_NO_ACTION: |
362 | - default: |
363 | - return; |
364 | - } |
365 | -} |
366 | - |
367 | static |
368 | void sp_selected_path_outline_add_marker( SPObject *marker_object, Geom::Affine marker_transform, |
369 | Geom::Scale stroke_scale, Geom::Affine transform, |
370 | |
371 | === modified file 'src/splivarot.h' |
372 | --- src/splivarot.h 2016-08-09 09:33:34 +0000 |
373 | +++ src/splivarot.h 2016-11-09 00:34:30 +0000 |
374 | @@ -10,6 +10,7 @@ |
375 | #include <2geom/forward.h> |
376 | #include <2geom/path.h> |
377 | #include "livarot/Path.h" |
378 | +#include "object-set.h" |
379 | |
380 | class SPCurve; |
381 | class SPDesktop; |
382 | @@ -20,26 +21,6 @@ |
383 | class ObjectSet; |
384 | } |
385 | |
386 | -// boolean operations |
387 | -// work on the current selection |
388 | -// selection has 2 contain exactly 2 items |
389 | - |
390 | -// UPDATE: these signatures have been modified so they may work in |
391 | -// command-line mode, i.e. without a desktop. If a desktop is not |
392 | -// provided (desktop == NULL), error messages will be shown on stderr. |
393 | -void sp_selected_path_union (Inkscape::Selection *selection, SPDesktop *desktop); |
394 | -void sp_selected_path_union_skip_undo (Inkscape::ObjectSet *set); |
395 | -void sp_selected_path_intersect (Inkscape::Selection *selection, SPDesktop *desktop); |
396 | -void sp_selected_path_intersect_skip_undo (Inkscape::ObjectSet *set); |
397 | -void sp_selected_path_diff (Inkscape::Selection *selection, SPDesktop *desktop); |
398 | -void sp_selected_path_diff_skip_undo (Inkscape::ObjectSet *set); |
399 | -void sp_selected_path_symdiff (Inkscape::Selection *selection, SPDesktop *desktop); |
400 | -void sp_selected_path_symdiff_skip_undo (Inkscape::ObjectSet *set); |
401 | -void sp_selected_path_cut (Inkscape::Selection *selection, SPDesktop *desktop); |
402 | -void sp_selected_path_cut_skip_undo (Inkscape::ObjectSet *set); |
403 | -void sp_selected_path_slice (Inkscape::Selection *selection, SPDesktop *desktop); |
404 | -void sp_selected_path_slice_skip_undo (Inkscape::ObjectSet *set); |
405 | - |
406 | // offset/inset of a curve |
407 | // takes the fill-rule in consideration |
408 | // offset amount is the stroke-width of the curve |
409 | |
410 | === modified file 'src/ui/tools/calligraphic-tool.cpp' |
411 | --- src/ui/tools/calligraphic-tool.cpp 2016-08-29 20:39:07 +0000 |
412 | +++ src/ui/tools/calligraphic-tool.cpp 2016-11-09 00:34:30 +0000 |
413 | @@ -921,10 +921,10 @@ |
414 | |
415 | if (unionize) { |
416 | desktop->getSelection()->add(this->repr); |
417 | - sp_selected_path_union_skip_undo(desktop->getSelection()); |
418 | + desktop->getSelection()->pathUnion(true); |
419 | } else if (subtract) { |
420 | desktop->getSelection()->add(this->repr); |
421 | - sp_selected_path_diff_skip_undo(desktop->getSelection()); |
422 | + desktop->getSelection()->pathDiff(true); |
423 | } else { |
424 | if (this->keep_selected) { |
425 | desktop->getSelection()->set(this->repr); |
426 | |
427 | === modified file 'src/ui/tools/eraser-tool.cpp' |
428 | --- src/ui/tools/eraser-tool.cpp 2016-10-24 22:58:43 +0000 |
429 | +++ src/ui/tools/eraser-tool.cpp 2016-11-09 00:34:30 +0000 |
430 | @@ -714,7 +714,7 @@ |
431 | Inkscape::GC::release(dup); // parent takes over |
432 | selection->set(dup); |
433 | if (!this->nowidth) { |
434 | - sp_selected_path_union_skip_undo(selection); |
435 | + selection->pathUnion(true); |
436 | } |
437 | selection->add(item); |
438 | if(item->style->fill_rule.value == SP_WIND_RULE_EVENODD){ |
439 | @@ -725,9 +725,9 @@ |
440 | css = 0; |
441 | } |
442 | if (this->nowidth) { |
443 | - sp_selected_path_cut_skip_undo(selection); |
444 | + selection->pathCut(true); |
445 | } else { |
446 | - sp_selected_path_diff_skip_undo(selection); |
447 | + selection->pathDiff(true); |
448 | } |
449 | workDone = true; // TODO set this only if something was cut. |
450 | bool break_apart = prefs->getBool("/tools/eraser/break_apart", false); |
451 | @@ -762,7 +762,7 @@ |
452 | this->repr->parent()->appendChild(dup); |
453 | Inkscape::GC::release(dup); // parent takes over |
454 | selection->set(dup); |
455 | - sp_selected_path_union_skip_undo(selection); |
456 | + selection->pathUnion(true); |
457 | if (bbox && bbox->intersects(*eraserBbox)) { |
458 | SPClipPath *clip_path = item->clip_ref->getObject(); |
459 | if (clip_path) { |
460 | @@ -786,7 +786,7 @@ |
461 | sp_object_unref(clip_path); |
462 | selection->raiseToTop(true); |
463 | selection->add(dup_clip); |
464 | - sp_selected_path_diff_skip_undo(selection); |
465 | + selection->pathDiff(true); |
466 | SPItem * clip = SP_ITEM(*(selection->items().begin())); |
467 | } |
468 | } |
469 | @@ -802,7 +802,7 @@ |
470 | rect->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); |
471 | selection->raiseToTop(true); |
472 | selection->add(rect); |
473 | - sp_selected_path_diff_skip_undo(selection); |
474 | + selection->pathDiff(true); |
475 | } |
476 | selection->raiseToTop(true); |
477 | selection->add(item); |
478 | |
479 | === modified file 'src/ui/tools/flood-tool.cpp' |
480 | --- src/ui/tools/flood-tool.cpp 2016-08-03 14:56:48 +0000 |
481 | +++ src/ui/tools/flood-tool.cpp 2016-11-09 00:34:30 +0000 |
482 | @@ -446,7 +446,7 @@ |
483 | ngettext("Area filled, path with <b>%d</b> node created and unioned with selection.","Area filled, path with <b>%d</b> nodes created and unioned with selection.", |
484 | SP_PATH(reprobj)->nodesInPath()), SP_PATH(reprobj)->nodesInPath() ); |
485 | selection->add(reprobj); |
486 | - sp_selected_path_union_skip_undo(desktop->getSelection()); |
487 | + selection->pathUnion(true); |
488 | } else { |
489 | desktop->messageStack()->flashF( Inkscape::WARNING_MESSAGE, |
490 | ngettext("Area filled, path with <b>%d</b> node created.","Area filled, path with <b>%d</b> nodes created.", |
491 | |
492 | === modified file 'src/ui/tools/spray-tool.cpp' |
493 | --- src/ui/tools/spray-tool.cpp 2016-08-03 14:56:48 +0000 |
494 | +++ src/ui/tools/spray-tool.cpp 2016-11-09 00:34:30 +0000 |
495 | @@ -1026,7 +1026,7 @@ |
496 | if (unionResult) { // No need to add the very first item (initialized with NULL). |
497 | set->add(unionResult); |
498 | } |
499 | - sp_selected_path_union_skip_undo(set); |
500 | + set->pathUnion(true); |
501 | set->add(parent_item); |
502 | Inkscape::GC::release(copy); |
503 | did = true; |
504 | @@ -1364,7 +1364,7 @@ |
505 | SP_VERB_CONTEXT_SPRAY, _("Spray with clones")); |
506 | break; |
507 | case SPRAY_MODE_SINGLE_PATH: |
508 | - sp_selected_path_union_skip_undo(objectSet()); |
509 | + objectSet()->pathUnion(true); |
510 | desktop->getSelection()->add(object_set.objects().begin(), object_set.objects().end()); |
511 | DocumentUndo::done(this->desktop->getDocument(), |
512 | SP_VERB_CONTEXT_SPRAY, _("Spray in single path")); |
513 | |
514 | === modified file 'src/verbs.cpp' |
515 | --- src/verbs.cpp 2016-11-06 22:07:52 +0000 |
516 | +++ src/verbs.cpp 2016-11-09 00:34:30 +0000 |
517 | @@ -1115,22 +1115,22 @@ |
518 | bool handled = true; |
519 | switch (reinterpret_cast<std::size_t>(data)) { |
520 | case SP_VERB_SELECTION_UNION: |
521 | - sp_selected_path_union(selection, dt); |
522 | + selection->pathUnion(); |
523 | break; |
524 | case SP_VERB_SELECTION_INTERSECT: |
525 | - sp_selected_path_intersect(selection, dt); |
526 | + selection->pathIntersect(); |
527 | break; |
528 | case SP_VERB_SELECTION_DIFF: |
529 | - sp_selected_path_diff(selection, dt); |
530 | + selection->pathDiff(); |
531 | break; |
532 | case SP_VERB_SELECTION_SYMDIFF: |
533 | - sp_selected_path_symdiff(selection, dt); |
534 | + selection->pathSymDiff(); |
535 | break; |
536 | case SP_VERB_SELECTION_CUT: |
537 | - sp_selected_path_cut(selection, dt); |
538 | + selection->pathCut(); |
539 | break; |
540 | case SP_VERB_SELECTION_SLICE: |
541 | - sp_selected_path_slice(selection, dt); |
542 | + selection->pathSlice(); |
543 | break; |
544 | case SP_VERB_SELECTION_GROW: |
545 | { |