diff options
| author | Aaron Spike <aaron@ekips.org> | 2006-04-19 03:51:07 +0000 |
|---|---|---|
| committer | acspike <acspike@users.sourceforge.net> | 2006-04-19 03:51:07 +0000 |
| commit | f68dc06235a7c91fc2e78925cc1b886de8f5e826 (patch) | |
| tree | 0b6d86ae76e30447d52f98d96bd311cb51c83a39 /src/selection-chemistry.cpp | |
| parent | Crash fix (occured if creating layer in layerless document) (diff) | |
| download | inkscape-f68dc06235a7c91fc2e78925cc1b886de8f5e826.tar.gz inkscape-f68dc06235a7c91fc2e78925cc1b886de8f5e826.zip | |
Adding fit canvas verbs
a few fixes in verbs.cpp
and a new button
(bzr r539)
Diffstat (limited to 'src/selection-chemistry.cpp')
| -rw-r--r-- | src/selection-chemistry.cpp | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp index 0e208f216..c87817a40 100644 --- a/src/selection-chemistry.cpp +++ b/src/selection-chemistry.cpp @@ -65,6 +65,8 @@ #include "layer-fns.h" #include "context-fns.h" #include <map> +#include "helper/units.h" +#include "sp-item.h" using NR::X; using NR::Y; @@ -2542,6 +2544,49 @@ void sp_selection_unset_mask(bool apply_clip_path) { sp_document_done (document); } +void fit_canvas_to_selection(SPDesktop *desktop) { + g_return_if_fail(desktop != NULL); + SPDocument *doc = sp_desktop_document(desktop); + + g_return_if_fail(doc != NULL); + g_return_if_fail(desktop->selection != NULL); + g_return_if_fail(!desktop->selection->isEmpty()); + NRRect bbox = {0,0,0,0}; + + desktop->selection->bounds(&bbox); + g_return_if_fail(!empty(bbox)); + + doc->fitToRect(bbox); +}; + +void fit_canvas_to_drawing(SPDocument *doc) { + g_return_if_fail(doc != NULL); + NRRect bbox = {0,0,0,0}; + + sp_document_ensure_up_to_date (doc); + sp_item_invoke_bbox(SP_ITEM(doc->root), &bbox, sp_item_i2r_affine(SP_ITEM(doc->root)), TRUE); + + g_return_if_fail(!empty(bbox)); + + doc->fitToRect(bbox); +}; + +void fit_canvas_to_selection_or_drawing(SPDesktop *desktop) { + g_return_if_fail(desktop != NULL); + SPDocument *doc = sp_desktop_document(desktop); + + g_return_if_fail(doc != NULL); + g_return_if_fail(desktop->selection != NULL); + + if (desktop->selection->isEmpty()) { + fit_canvas_to_drawing(doc); + } else { + fit_canvas_to_selection(desktop); + } + + sp_document_done(doc); +}; + /* Local Variables: mode:c++ |
