summaryrefslogtreecommitdiffstats
path: root/src/ui
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
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')
-rw-r--r--src/ui/contextmenu.cpp3
-rw-r--r--src/ui/dialog/export.cpp6
-rw-r--r--src/ui/dialog/spellcheck.cpp7
-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
8 files changed, 26 insertions, 18 deletions
diff --git a/src/ui/contextmenu.cpp b/src/ui/contextmenu.cpp
index b33653bfd..2b281a096 100644
--- a/src/ui/contextmenu.cpp
+++ b/src/ui/contextmenu.cpp
@@ -88,7 +88,8 @@ ContextMenu::ContextMenu(SPDesktop *desktop, SPItem *item) :
}
AddSeparator();
/* Lock/Unock Hide/Unhide*/
- Geom::Rect b(_desktop->point(),_desktop->point() + Geom::Point(1,1));
+ auto point_doc = _desktop->point() * _desktop->dt2doc();
+ Geom::Rect b(point_doc, point_doc + Geom::Point(1, 1));
std::vector< SPItem * > down_items = _desktop->getDocument()->getItemsPartiallyInBox( _desktop->dkey, b, true, true, true, true);
bool has_down_hidden = false;
bool has_down_locked = false;
diff --git a/src/ui/dialog/export.cpp b/src/ui/dialog/export.cpp
index 160f83965..2c1ebb45d 100644
--- a/src/ui/dialog/export.cpp
+++ b/src/ui/dialog/export.cpp
@@ -1050,7 +1050,7 @@ void Export::onExport ()
}
pHYs = (pHYs_adj->get_value() > 0.01) ? pHYs_adj->get_value() : dpi;
- Geom::OptRect area = item->desktopVisualBounds();
+ Geom::OptRect area = item->documentVisualBounds();
if (area) {
gint width = (gint) (area->width() * dpi / DPI_BASE + 0.5);
gint height = (gint) (area->height() * dpi / DPI_BASE + 0.5);
@@ -1154,11 +1154,13 @@ void Export::onExport ()
prog_dlg->set_data("current", GINT_TO_POINTER(0));
prog_dlg->set_data("total", GINT_TO_POINTER(0));
+ auto area = Geom::Rect(Geom::Point(x0, y0), Geom::Point(x1, y1)) * desktop->dt2doc();
+
/* Do export */
std::vector<SPItem*> x;
std::vector<SPItem*> selected(desktop->getSelection()->items().begin(), desktop->getSelection()->items().end());
ExportResult status = sp_export_png_file(desktop->getDocument(), path.c_str(),
- Geom::Rect(Geom::Point(x0, y0), Geom::Point(x1, y1)), width, height, pHYs, pHYs, //previously xdpi, ydpi.
+ area, width, height, pHYs, pHYs, //previously xdpi, ydpi.
nv->pagecolor,
onProgressCallback, (void*)prog_dlg,
FALSE,
diff --git a/src/ui/dialog/spellcheck.cpp b/src/ui/dialog/spellcheck.cpp
index ab0282298..eb32d2245 100644
--- a/src/ui/dialog/spellcheck.cpp
+++ b/src/ui/dialog/spellcheck.cpp
@@ -252,15 +252,14 @@ bool SpellCheck::compareTextBboxes (gconstpointer a, gconstpointer b)//returns a
SPItem *i1 = SP_ITEM(a);
SPItem *i2 = SP_ITEM(b);
- Geom::OptRect bbox1 = i1->desktopVisualBounds();
- Geom::OptRect bbox2 = i2->desktopVisualBounds();
+ Geom::OptRect bbox1 = i1->documentVisualBounds();
+ Geom::OptRect bbox2 = i2->documentVisualBounds();
if (!bbox1 || !bbox2) {
return false;
}
// vector between top left corners
- Geom::Point diff = Geom::Point(bbox2->min()[Geom::X], bbox2->max()[Geom::Y]) -
- Geom::Point(bbox1->min()[Geom::X], bbox1->max()[Geom::Y]);
+ Geom::Point diff = bbox1->min() - bbox2->min();
return diff[Geom::Y] == 0 ? (diff[Geom::X] < 0) : (diff[Geom::Y] < 0);
}
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;