summaryrefslogtreecommitdiffstats
path: root/src/selection-chemistry.cpp
diff options
context:
space:
mode:
authorAaron Spike <aaron@ekips.org>2006-04-19 03:51:07 +0000
committeracspike <acspike@users.sourceforge.net>2006-04-19 03:51:07 +0000
commitf68dc06235a7c91fc2e78925cc1b886de8f5e826 (patch)
tree0b6d86ae76e30447d52f98d96bd311cb51c83a39 /src/selection-chemistry.cpp
parentCrash fix (occured if creating layer in layerless document) (diff)
downloadinkscape-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.cpp45
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++