From 53933f5fea9d07d1ba6304b88439fba257ee8c34 Mon Sep 17 00:00:00 2001 From: "Johan B. C. Engelen" Date: Wed, 2 Feb 2011 22:24:36 +0100 Subject: update to latest 2geom ! (bzr r10025) --- src/sp-offset.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/sp-offset.cpp') diff --git a/src/sp-offset.cpp b/src/sp-offset.cpp index 51bb1e1cc..6f825ab1d 100644 --- a/src/sp-offset.cpp +++ b/src/sp-offset.cpp @@ -90,7 +90,7 @@ static void refresh_offset_source(SPOffset* offset); static void sp_offset_start_listening(SPOffset *offset,SPObject* to); static void sp_offset_quit_listening(SPOffset *offset); static void sp_offset_href_changed(SPObject *old_ref, SPObject *ref, SPOffset *offset); -static void sp_offset_move_compensate(Geom::Matrix const *mp, SPItem *original, SPOffset *self); +static void sp_offset_move_compensate(Geom::Affine const *mp, SPItem *original, SPOffset *self); static void sp_offset_delete_self(SPObject *deleted, SPOffset *self); static void sp_offset_source_modified (SPObject *iSource, guint flags, SPItem *item); @@ -1024,20 +1024,20 @@ sp_offset_href_changed(SPObject */*old_ref*/, SPObject */*ref*/, SPOffset *offse } static void -sp_offset_move_compensate(Geom::Matrix const *mp, SPItem */*original*/, SPOffset *self) +sp_offset_move_compensate(Geom::Affine const *mp, SPItem */*original*/, SPOffset *self) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); guint mode = prefs->getInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_PARALLEL); if (mode == SP_CLONE_COMPENSATION_NONE) return; - Geom::Matrix m(*mp); + Geom::Affine m(*mp); if (!(m.isTranslation())) return; // calculate the compensation matrix and the advertized movement matrix SPItem *item = SP_ITEM(self); - Geom::Matrix compensate; - Geom::Matrix advertized_move; + Geom::Affine compensate; + Geom::Affine advertized_move; if (mode == SP_CLONE_COMPENSATION_UNMOVED) { compensate = Geom::identity(); -- cgit v1.2.3 From 0e0ce7571944e0a9d60294b6efdc855e6df52db8 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Tue, 22 Feb 2011 01:17:44 -0800 Subject: Finished cleanup of outdated SP_OBJECT_REPR C macro. (bzr r10067) --- src/sp-offset.cpp | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) (limited to 'src/sp-offset.cpp') diff --git a/src/sp-offset.cpp b/src/sp-offset.cpp index 6f825ab1d..5cad7540d 100644 --- a/src/sp-offset.cpp +++ b/src/sp-offset.cpp @@ -183,7 +183,7 @@ sp_offset_init(SPOffset *offset) new (&offset->_changed_connection) sigc::connection(); new (&offset->_transformed_connection) sigc::connection(); // set up the uri reference - offset->sourceRef = new SPUseReference(SP_OBJECT(offset)); + offset->sourceRef = new SPUseReference(offset); offset->_changed_connection = offset->sourceRef->changedSignal().connect(sigc::bind(sigc::ptr_fun(sp_offset_href_changed), offset)); } @@ -457,7 +457,7 @@ sp_offset_set_shape(SPShape *shape) // it's also useless to compute the offset with a 0 radius //XML Tree being used directly here while it shouldn't be. - const char *res_d = SP_OBJECT(shape)->getRepr()->attribute("inkscape:original"); + const char *res_d = shape->getRepr()->attribute("inkscape:original"); if ( res_d ) { Geom::PathVector pv = sp_svg_read_pathv(res_d); SPCurve *c = new SPCurve(pv); @@ -987,15 +987,16 @@ sp_offset_top_point (SPOffset * offset, Geom::Point *px) // the listening functions static void sp_offset_start_listening(SPOffset *offset,SPObject* to) { - if ( to == NULL ) + if ( to == NULL ) { return; + } offset->sourceObject = to; - offset->sourceRepr = SP_OBJECT_REPR(to); + offset->sourceRepr = to->getRepr(); - offset->_delete_connection = SP_OBJECT(to)->connectDelete(sigc::bind(sigc::ptr_fun(&sp_offset_delete_self), offset)); + offset->_delete_connection = to->connectDelete(sigc::bind(sigc::ptr_fun(&sp_offset_delete_self), offset)); offset->_transformed_connection = SP_ITEM(to)->connectTransformed(sigc::bind(sigc::ptr_fun(&sp_offset_move_compensate), offset)); - offset->_modified_connection = SP_OBJECT(to)->connectModified(sigc::bind<2>(sigc::ptr_fun(&sp_offset_source_modified), offset)); + offset->_modified_connection = to->connectModified(sigc::bind<2>(sigc::ptr_fun(&sp_offset_source_modified), offset)); } static void sp_offset_quit_listening(SPOffset *offset) @@ -1019,7 +1020,7 @@ sp_offset_href_changed(SPObject */*old_ref*/, SPObject */*ref*/, SPOffset *offse SPItem *refobj = offset->sourceRef->getObject(); if (refobj) sp_offset_start_listening(offset,refobj); offset->sourceDirty=true; - SP_OBJECT(offset)->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); + offset->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); } } @@ -1052,8 +1053,8 @@ sp_offset_move_compensate(Geom::Affine const *mp, SPItem */*original*/, SPOffset item->transform *= compensate; // commit the compensation - item->doWriteTransform(SP_OBJECT_REPR(item), item->transform, &advertized_move); - SP_OBJECT(item)->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); + item->doWriteTransform(item->getRepr(), item->transform, &advertized_move); + item->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); } static void @@ -1069,7 +1070,7 @@ sp_offset_delete_self(SPObject */*deleted*/, SPOffset *offset) offset->sourceHref = NULL; offset->sourceRef->detach(); } else if (mode == SP_CLONE_ORPHANS_DELETE) { - SP_OBJECT(offset)->deleteObject(); + offset->deleteObject(); } } @@ -1148,8 +1149,9 @@ refresh_offset_source(SPOffset* offset) delete res; delete orig; + // TODO fix: //XML Tree being used diectly here while it shouldn't be. - SP_OBJECT (offset)->getRepr()->setAttribute("inkscape:original", res_d); + offset->getRepr()->setAttribute("inkscape:original", res_d); free (res_d); } -- cgit v1.2.3 From ab5c39d6151762215e0fa7e1bbd159e40bc751ab Mon Sep 17 00:00:00 2001 From: Nicolas Dufour Date: Thu, 17 Mar 2011 20:13:06 +0100 Subject: Linked Offset. Merge branch lp:~ado-papas/inkscape/bug_167419 (Bug #167419, Bug #184341, Bug #239430). (bzr r10109) --- src/sp-offset.cpp | 45 +++++++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 14 deletions(-) (limited to 'src/sp-offset.cpp') diff --git a/src/sp-offset.cpp b/src/sp-offset.cpp index 5cad7540d..57c04f31f 100644 --- a/src/sp-offset.cpp +++ b/src/sp-offset.cpp @@ -1029,30 +1029,37 @@ sp_offset_move_compensate(Geom::Affine const *mp, SPItem */*original*/, SPOffset { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); guint mode = prefs->getInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_PARALLEL); - if (mode == SP_CLONE_COMPENSATION_NONE) return; + + SPItem *item = SP_ITEM(self); Geom::Affine m(*mp); - if (!(m.isTranslation())) return; + if (!(m.isTranslation()) || mode == SP_CLONE_COMPENSATION_NONE) { + self->sourceDirty=true; + item->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); + return; + } // calculate the compensation matrix and the advertized movement matrix - SPItem *item = SP_ITEM(self); + item->readAttr("transform"); - Geom::Affine compensate; - Geom::Affine advertized_move; + Geom::Affine t = self->transform; + Geom::Affine offset_move = t.inverse() * m * t; - if (mode == SP_CLONE_COMPENSATION_UNMOVED) { - compensate = Geom::identity(); - advertized_move.setIdentity(); - } else if (mode == SP_CLONE_COMPENSATION_PARALLEL) { - compensate = m; + Geom::Affine advertized_move; + if (mode == SP_CLONE_COMPENSATION_PARALLEL) { + offset_move = offset_move.inverse() * m; advertized_move = m; + } else if (mode == SP_CLONE_COMPENSATION_UNMOVED) { + offset_move = offset_move.inverse(); + advertized_move.setIdentity(); } else { g_assert_not_reached(); } - item->transform *= compensate; + self->sourceDirty=true; // commit the compensation + item->transform *= offset_move; item->doWriteTransform(item->getRepr(), item->transform, &advertized_move); item->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); } @@ -1075,12 +1082,13 @@ sp_offset_delete_self(SPObject */*deleted*/, SPOffset *offset) } static void -sp_offset_source_modified (SPObject */*iSource*/, guint /*flags*/, SPItem *item) +sp_offset_source_modified (SPObject */*iSource*/, guint flags, SPItem *item) { SPOffset *offset = SP_OFFSET(item); offset->sourceDirty=true; - refresh_offset_source(offset); - ((SPShape *) offset)->setShape (); + if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG)) { + offset->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); + } } static void @@ -1111,6 +1119,15 @@ refresh_offset_source(SPOffset* offset) orig->LoadPathVector(curve->get_pathvector()); curve->unref(); + if (!item->transform.isIdentity()) { + gchar const *t_attr = item->getRepr()->attribute("transform"); + if (t_attr) { + Geom::Affine t; + if (sp_svg_transform_read(t_attr, &t)) { + orig->Transform(t); + } + } + } // Finish up. { -- cgit v1.2.3 From d6978fcea4a2ccd2d9cccefabc6558a74f332a6d Mon Sep 17 00:00:00 2001 From: "Johan B. C. Engelen" Date: Sat, 2 Apr 2011 00:59:01 +0200 Subject: add curve before LPE to SPShape. this is useful for helperpath display. It was inspired from fixing bug 407008 Fixed bugs: - https://launchpad.net/bugs/407008 (bzr r10142) --- src/sp-offset.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/sp-offset.cpp') diff --git a/src/sp-offset.cpp b/src/sp-offset.cpp index 57c04f31f..3fb9441a3 100644 --- a/src/sp-offset.cpp +++ b/src/sp-offset.cpp @@ -463,6 +463,7 @@ sp_offset_set_shape(SPShape *shape) SPCurve *c = new SPCurve(pv); g_assert(c != NULL); ((SPShape *) offset)->setCurveInsync (c, TRUE); + ((SPShape *) offset)->setCurveBeforeLPE(c); c->unref(); } return; @@ -712,6 +713,7 @@ sp_offset_set_shape(SPShape *shape) SPCurve *c = new SPCurve(pv); g_assert(c != NULL); ((SPShape *) offset)->setCurveInsync (c, TRUE); + ((SPShape *) offset)->setCurveBeforeLPE(c); c->unref(); free (res_d); -- cgit v1.2.3