diff options
| author | Thomas Holder <thomas@thomas-holder.de> | 2019-08-18 15:29:16 +0000 |
|---|---|---|
| committer | Thomas Holder <thomas@thomas-holder.de> | 2019-08-18 15:29:16 +0000 |
| commit | 3ffefe1e05e3858ce6584dc644817c411232dc77 (patch) | |
| tree | e992648f9c1598efe6c810009213dbf9b7b31ff4 /src/ui | |
| parent | Formatting last commit (diff) | |
| download | inkscape-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.cpp | 3 | ||||
| -rw-r--r-- | src/ui/dialog/export.cpp | 6 | ||||
| -rw-r--r-- | src/ui/dialog/spellcheck.cpp | 7 | ||||
| -rw-r--r-- | src/ui/tools/eraser-tool.cpp | 9 | ||||
| -rw-r--r-- | src/ui/tools/measure-tool.cpp | 8 | ||||
| -rw-r--r-- | src/ui/tools/node-tool.cpp | 6 | ||||
| -rw-r--r-- | src/ui/tools/select-tool.cpp | 2 | ||||
| -rw-r--r-- | src/ui/tools/spray-tool.cpp | 3 |
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; |
