diff --git a/src/conn-avoid-ref.cpp b/src/conn-avoid-ref.cpp
index b2aa0ce6bc1e9877242de5f3697a7a90048c410f..21ef2deab53c14bd87502c68c47648ea9c14d249 100644 (file)
--- a/src/conn-avoid-ref.cpp
+++ b/src/conn-avoid-ref.cpp
*
* Authors:
* Michael Wybrow <mjwybrow@users.sourceforge.net>
+ * Abhishek Sharma
*
* Copyright (C) 2005 Michael Wybrow
*
#include "libavoid/router.h"
#include "libavoid/connector.h"
#include "libavoid/geomtypes.h"
+#include "libavoid/shape.h"
#include "xml/node.h"
#include "document.h"
#include "desktop.h"
#include "inkscape.h"
#include <glibmm/i18n.h>
-
+using Inkscape::DocumentUndo;
using Avoid::Router;
const bool routerInstanceExists = (item->document->router != NULL);
if (shapeRef && routerInstanceExists) {
- Router *router = shapeRef->router();
- router->removeShape(shapeRef);
+ // Deleting the shapeRef will remove it completely from
+ // an existing Router instance.
delete shapeRef;
}
shapeRef = NULL;
@@ -194,10 +196,10 @@ void SPAvoidRef::setConnectionPointsAttrUndoable(const gchar* value, const gchar
{
SPDocument* doc = SP_OBJECT_DOCUMENT(item);
- sp_object_setAttribute( SP_OBJECT(item), "inkscape:connection-points", value, 0 );
+ item->setAttribute( "inkscape:connection-points", value, 0 );
item->updateRepr();
- sp_document_ensure_up_to_date(doc);
- sp_document_done(doc, SP_VERB_CONTEXT_CONNECTOR, action);
+ doc->ensureUpToDate();
+ DocumentUndo::done(doc, SP_VERB_CONTEXT_CONNECTOR, action);
}
void SPAvoidRef::addConnectionPoint(ConnectionPoint &cp)
// isn't the same as the document that this item is part of. This
// case can happen if a new document is loaded from the file chooser
// or via the recent file menu. In this case, we can end up here
- // as a rersult of a sp_document_ensure_up_to_date performed on a
+ // as a rersult of a ensureUpToDate performed on a
// document not yet attached to the active desktop.
return;
}
_transformed_connection = item->connectTransformed(
sigc::ptr_fun(&avoid_item_move));
- const char *id = SP_OBJECT_REPR(item)->attribute("id");
+ char const *id = item->getAttribute("id");
g_assert(id != NULL);
// Get a unique ID for the item.
{
g_assert(shapeRef);
- router->removeShape(shapeRef);
+ // Deleting the shapeRef will remove it completely from
+ // an existing Router instance.
delete shapeRef;
shapeRef = NULL;
}
GSList *list = NULL;
Avoid::IntList shapes;
- GQuark shapeId = g_quark_from_string(item->id);
+ GQuark shapeId = g_quark_from_string(item->getId());
item->document->router->attachedShapes(shapes, shapeId, type);
Avoid::IntList::iterator finish = shapes.end();
GSList *list = NULL;
Avoid::IntList conns;
- GQuark shapeId = g_quark_from_string(item->id);
+ GQuark shapeId = g_quark_from_string(item->getId());
item->document->router->attachedConns(conns, shapeId, type);
Avoid::IntList::iterator finish = conns.end();
{
g_assert(item);
Geom::Point pos;
- const Geom::Matrix& transform = sp_item_i2doc_affine(item);
- // TODO investigate why this was asking for the active desktop:
- SPDesktop *desktop = inkscape_active_desktop();
+ const Geom::Matrix& transform = item->i2doc_affine();
if ( type == ConnPointDefault )
{
// For now, just default to the centre of the item
- Geom::OptRect bbox = item->getBounds(sp_item_i2doc_affine(item));
+ Geom::OptRect bbox = item->getBounds(item->i2doc_affine());
pos = (bbox) ? bbox->midpoint() : Geom::Point(0, 0);
}
else
{
Geom::Path::const_iterator cit = pit->begin();
while (cit != pit->end())
+ {
+ if (cit == pit->begin())
+ {
+ poly_points.push_back(cit->initialPoint());
+ }
+
if (dynamic_cast<Geom::CubicBezier const*>(&*cit))
{
at += seg_size;
poly_points.push_back(cit->finalPoint());
++cit;
}
+ }
++pit;
}
return poly_points;
@@ -484,7 +492,7 @@ static std::vector<Geom::Point> approxItemWithPoints(SPItem const *item, const G
}
else if (SP_IS_SHAPE(item))
{
- SPCurve* item_curve = sp_shape_get_curve(SP_SHAPE(item));
+ SPCurve* item_curve = SP_SHAPE(item)->getCurve();
// make sure it has an associated curve
if (item_curve)
{
g_assert(desktop != NULL);
double spacing = desktop->namedview->connector_spacing;
- Geom::Matrix itd_mat = sp_item_i2doc_affine(item);
+ Geom::Matrix itd_mat = item->i2doc_affine();
std::vector<Geom::Point> hull_points;
hull_points = approxItemWithPoints(item, itd_mat);
prev_parallel_hull_edge.origin(hull_edge.origin()+hull_edge.versor().ccw()*spacing);
prev_parallel_hull_edge.versor(hull_edge.versor());
int hull_size = hull.boundary.size();
- for (int i = 0; i <= hull_size; ++i)
+ for (int i = 0; i < hull_size; ++i)
{
hull_edge.setBy2Points(hull[i], hull[i+1]);
Geom::Line parallel_hull_edge;
GSList *get_avoided_items(GSList *list, SPObject *from, SPDesktop *desktop,
bool initialised)
{
- for (SPObject *child = sp_object_first_child(SP_OBJECT(from)) ;
- child != NULL; child = SP_OBJECT_NEXT(child) ) {
+ for (SPObject *child = from->firstChild() ; child != NULL; child = child->next ) {
if (SP_IS_ITEM(child) &&
!desktop->isLayer(SP_ITEM(child)) &&
!SP_ITEM(child)->isLocked() &&
// Don't count this as changes to the document,
// it is basically just late initialisation.
SPDocument *document = sp_desktop_document(desktop);
- bool saved = sp_document_get_undo_sensitive(document);
- sp_document_set_undo_sensitive(document, false);
+ bool saved = DocumentUndo::getUndoSensitive(document);
+ DocumentUndo::setUndoSensitive(document, false);
bool initialised = false;
GSList *items = get_avoided_items(NULL, desktop->currentRoot(), desktop,
if (items) {
g_slist_free(items);
}
- sp_document_set_undo_sensitive(document, saved);
+ DocumentUndo::setUndoSensitive(document, saved);
}