summaryrefslogtreecommitdiffstats
path: root/src/ui/tools
diff options
context:
space:
mode:
authorThomas Holder <thomas@thomas-holder.de>2019-08-18 15:29:16 +0000
committerThomas Holder <thomas@thomas-holder.de>2019-08-18 15:29:16 +0000
commit3ffefe1e05e3858ce6584dc644817c411232dc77 (patch)
treee992648f9c1598efe6c810009213dbf9b7b31ff4 /src/ui/tools
parentFormatting last commit (diff)
downloadinkscape-3ffefe1e05e3858ce6584dc644817c411232dc77.tar.gz
inkscape-3ffefe1e05e3858ce6584dc644817c411232dc77.zip
reduce usage of desktop coordinates (#341)
- avoid unnecessary internal usage of desktop coordinates, e.g. in SpellCheck::compareTextBboxes - document whether a function argument is in document or desktop coordinates, e.g. for SPDocument::getItemsInBox
Diffstat (limited to 'src/ui/tools')
-rw-r--r--src/ui/tools/eraser-tool.cpp9
-rw-r--r--src/ui/tools/measure-tool.cpp8
-rw-r--r--src/ui/tools/node-tool.cpp6
-rw-r--r--src/ui/tools/select-tool.cpp2
-rw-r--r--src/ui/tools/spray-tool.cpp3
5 files changed, 17 insertions, 11 deletions
diff --git a/src/ui/tools/eraser-tool.cpp b/src/ui/tools/eraser-tool.cpp
index 3ea8a960e..ed307acc5 100644
--- a/src/ui/tools/eraser-tool.cpp
+++ b/src/ui/tools/eraser-tool.cpp
@@ -670,7 +670,7 @@ void EraserTool::set_to_accumulated() {
Inkscape::XML::Document *xml_doc = this->desktop->doc()->getReprDoc();
SPItem* acid = SP_ITEM(this->desktop->doc()->getObjectByRepr(this->repr));
- eraserBbox = acid->desktopVisualBounds();
+ eraserBbox = acid->documentVisualBounds();
std::vector<SPItem*> remainingItems;
std::vector<SPItem*> toWorkOn;
if (selection->isEmpty()) {
@@ -709,7 +709,7 @@ void EraserTool::set_to_accumulated() {
} else if (SP_IS_GROUP(item) || use ) {
/*Do nothing*/
} else {
- Geom::OptRect bbox = item->desktopVisualBounds();
+ Geom::OptRect bbox = item->documentVisualBounds();
if (bbox && bbox->intersects(*eraserBbox)) {
Inkscape::XML::Node* dup = this->repr->duplicate(xml_doc);
this->repr->parent()->appendChild(dup);
@@ -758,7 +758,7 @@ void EraserTool::set_to_accumulated() {
for (std::vector<SPItem*>::const_iterator i = toWorkOn.begin(); i != toWorkOn.end(); ++i){
selection->clear();
SPItem *item = *i;
- Geom::OptRect bbox = item->desktopVisualBounds();
+ Geom::OptRect bbox = item->documentVisualBounds();
Inkscape::XML::Document *xml_doc = this->desktop->doc()->getReprDoc();
Inkscape::XML::Node* dup = this->repr->duplicate(xml_doc);
this->repr->parent()->appendChild(dup);
@@ -800,7 +800,8 @@ void EraserTool::set_to_accumulated() {
SPRect * rect = SP_RECT(item_repr->parent->appendChildRepr(rect_repr));
Inkscape::GC::release(rect_repr);
rect->setPosition (bbox->left(), bbox->top(), bbox->width(), bbox->height());
- rect->transform = SP_ITEM(rect->parent)->i2dt_affine().inverse();
+ rect->transform = SP_ITEM(rect->parent)->i2doc_affine().inverse();
+
rect->updateRepr();
rect->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
selection->raiseToTop(true);
diff --git a/src/ui/tools/measure-tool.cpp b/src/ui/tools/measure-tool.cpp
index 6633cdd64..568d8c542 100644
--- a/src/ui/tools/measure-tool.cpp
+++ b/src/ui/tools/measure-tool.cpp
@@ -1260,8 +1260,10 @@ void MeasureTool::showCanvasItems(bool to_guides, bool to_item, bool to_phantom,
dimension_offset = 70;
Geom::PathVector lineseg;
Geom::Path p;
- p.start(desktop->dt2doc(start_p));
- p.appendNew<Geom::LineSegment>(desktop->dt2doc(end_p));
+ Geom::Point start_p_doc = start_p * desktop->dt2doc();
+ Geom::Point end_p_doc = end_p * desktop->dt2doc();
+ p.start(start_p_doc);
+ p.appendNew<Geom::LineSegment>(end_p_doc);
lineseg.push_back(p);
double angle = atan2(end_p - start_p);
@@ -1274,7 +1276,7 @@ void MeasureTool::showCanvasItems(bool to_guides, bool to_item, bool to_phantom,
std::vector<SPItem*> items;
SPDocument *doc = desktop->getDocument();
- Geom::Rect rect(start_p, end_p);
+ Geom::Rect rect(start_p_doc, end_p_doc);
items = doc->getItemsPartiallyInBox(desktop->dkey, rect, false, true, false, true);
Inkscape::LayerModel *layer_model = nullptr;
SPObject *current_layer = nullptr;
diff --git a/src/ui/tools/node-tool.cpp b/src/ui/tools/node-tool.cpp
index a14114cb7..63161b3cd 100644
--- a/src/ui/tools/node-tool.cpp
+++ b/src/ui/tools/node-tool.cpp
@@ -723,13 +723,17 @@ void NodeTool::update_tip(GdkEvent *event) {
}
}
+/**
+ * @param sel Area in desktop coordinates
+ */
void NodeTool::select_area(Geom::Rect const &sel, GdkEventButton *event) {
using namespace Inkscape::UI;
if (this->_multipath->empty()) {
// if multipath is empty, select rubberbanded items rather than nodes
Inkscape::Selection *selection = this->desktop->selection;
- std::vector<SPItem*> items = this->desktop->getDocument()->getItemsInBox(this->desktop->dkey, sel);
+ auto sel_doc = desktop->dt2doc() * sel;
+ std::vector<SPItem*> items = this->desktop->getDocument()->getItemsInBox(this->desktop->dkey, sel_doc);
selection->setList(items);
} else {
if (!held_shift(*event)) {
diff --git a/src/ui/tools/select-tool.cpp b/src/ui/tools/select-tool.cpp
index 88b432004..9bd97fabc 100644
--- a/src/ui/tools/select-tool.cpp
+++ b/src/ui/tools/select-tool.cpp
@@ -721,7 +721,7 @@ bool SelectTool::root_handler(GdkEvent* event) {
if (r->getMode() == RUBBERBAND_MODE_RECT) {
Geom::OptRect const b = r->getRectangle();
- items = desktop->getDocument()->getItemsInBox(desktop->dkey, *b);
+ items = desktop->getDocument()->getItemsInBox(desktop->dkey, (*b) * desktop->dt2doc());
} else if (r->getMode() == RUBBERBAND_MODE_TOUCHPATH) {
items = desktop->getDocument()->getItemsAtPoints(desktop->dkey, r->getPoints());
}
diff --git a/src/ui/tools/spray-tool.cpp b/src/ui/tools/spray-tool.cpp
index c910607a9..c8dce3986 100644
--- a/src/ui/tools/spray-tool.cpp
+++ b/src/ui/tools/spray-tool.cpp
@@ -527,7 +527,6 @@ static bool fit_item(SPDesktop *desktop,
sp_spray_transform_path(item, path, Geom::Scale(scale), center);
sp_spray_transform_path(item, path, Geom::Rotate(angle), center);
path *= Geom::Translate(move);
- path *= desktop->doc2dt();
bbox_procesed = path.boundsFast();
double bbox_left_main = bbox_procesed->left();
double bbox_right_main = bbox_procesed->right();
@@ -535,7 +534,7 @@ static bool fit_item(SPDesktop *desktop,
double bbox_bottom_main = bbox_procesed->bottom();
double width_transformed = bbox_procesed->width();
double height_transformed = bbox_procesed->height();
- Geom::Point mid_point = desktop->d2w(bbox_procesed->midpoint());
+ Geom::Point mid_point = desktop->d2w(bbox_procesed->midpoint() * desktop->doc2dt());
Geom::IntRect area = Geom::IntRect::from_xywh(floor(mid_point[Geom::X]), floor(mid_point[Geom::Y]), 1, 1);
guint32 rgba = getPickerData(area);
guint32 rgba2 = 0xffffff00;