X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fsp-conn-end-pair.cpp;h=a1c4697e55007eecbd85d90faa8ee94354303e5a;hb=bfdf250d303bf7983bcee0959fe3f5abbef8cfaf;hp=5b36f8796b2f6bc752d67e7de0782cf974166c57;hpb=0daf8c64238778aaff20dec44140ad90c81b0d5e;p=inkscape.git diff --git a/src/sp-conn-end-pair.cpp b/src/sp-conn-end-pair.cpp index 5b36f8796..a1c4697e5 100644 --- a/src/sp-conn-end-pair.cpp +++ b/src/sp-conn-end-pair.cpp @@ -17,6 +17,8 @@ #include "xml/repr.h" #include "sp-path.h" #include "libavoid/vertices.h" +#include "libavoid/router.h" +#include "document.h" SPConnEndPair::SPConnEndPair(SPPath *const owner) @@ -46,7 +48,7 @@ SPConnEndPair::~SPConnEndPair() delete _connRef; _connRef = NULL; } - + _invalid_path_connection.disconnect(); _transformed_connection.disconnect(); } @@ -73,12 +75,9 @@ sp_conn_end_pair_build(SPObject *object) } -static void +static void avoid_conn_move(NR::Matrix const *mp, SPItem *moved_item) { - // Detach from objects if attached. - sp_conn_end_detach(moved_item, 0); - sp_conn_end_detach(moved_item, 1); // Reroute connector SPPath *path = SP_PATH(moved_item); path->connEndPair.makePathInvalid(); @@ -92,9 +91,10 @@ SPConnEndPair::setAttr(unsigned const key, gchar const *const value) if (key == SP_ATTR_CONNECTOR_TYPE) { if (value && (strcmp(value, "polyline") == 0)) { _connType = SP_CONNECTOR_POLYLINE; - + + Avoid::Router *router = _path->document->router; GQuark itemID = g_quark_from_string(SP_OBJECT(_path)->id); - _connRef = new Avoid::ConnRef(itemID); + _connRef = new Avoid::ConnRef(router, itemID); _invalid_path_connection = connectInvalidPath( sigc::ptr_fun(&sp_conn_adjust_invalid_path)); _transformed_connection = _path->connectTransformed( @@ -102,7 +102,7 @@ SPConnEndPair::setAttr(unsigned const key, gchar const *const value) } else { _connType = SP_CONNECTOR_NOAVOID; - + if (_connRef) { _connRef->removeFromGraph(); delete _connRef; @@ -114,7 +114,7 @@ SPConnEndPair::setAttr(unsigned const key, gchar const *const value) return; } - + unsigned const handle_ix = key - SP_ATTR_CONNECTION_START; g_assert( handle_ix <= 1 ); this->_connEnd[handle_ix]->setAttacherHref(value); @@ -146,13 +146,13 @@ SPConnEndPair::getEndpoints(NR::Point endPts[]) const { SPCurve *curve = _path->curve; SPItem *h2attItem[2]; getAttachedItems(h2attItem); - + for (unsigned h = 0; h < 2; ++h) { if ( h2attItem[h] ) { NR::Rect const bbox = h2attItem[h]->invokeBbox(sp_item_i2doc_affine(h2attItem[h])); endPts[h] = bbox.midpoint(); } - else + else { if (h == 0) { endPts[h] = sp_curve_first_point(curve); @@ -177,7 +177,7 @@ static void emitPathInvalidationNotification(void *ptr) // then all connectors (that require it) will be rerouted. Otherwise, // one connector could get rerouted several times as a result of // dragging a couple of shapes. - + SPPath *path = SP_PATH(ptr); path->connEndPair._invalid_path_signal.emit(path); } @@ -248,7 +248,7 @@ SPConnEndPair::isAutoRoutingConn(void) } return false; } - + void SPConnEndPair::makePathInvalid(void) { @@ -270,7 +270,7 @@ SPConnEndPair::reroutePath(void) Avoid::Point src = { endPt[0][NR::X], endPt[0][NR::Y] }; Avoid::Point dst = { endPt[1][NR::X], endPt[1][NR::Y] }; - + _connRef->updateEndPoint(Avoid::VertID::src, src); _connRef->updateEndPoint(Avoid::VertID::tar, dst); @@ -278,7 +278,7 @@ SPConnEndPair::reroutePath(void) Avoid::PolyLine route = _connRef->route(); _connRef->calcRouteDist(); - + sp_curve_reset(curve); sp_curve_moveto(curve, endPt[0]);