From 57a6fee4d17b6049b95ccf2ef445ed18c8a2a841 Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Wed, 4 Aug 2010 23:08:41 +0200 Subject: Wholesale cruft removal part 2 (bzr r9508.1.45) --- src/sp-offset.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/sp-offset.cpp') diff --git a/src/sp-offset.cpp b/src/sp-offset.cpp index 556778676..2b6f535a4 100644 --- a/src/sp-offset.cpp +++ b/src/sp-offset.cpp @@ -37,7 +37,7 @@ #include "sp-use-reference.h" #include "uri.h" -#include +#include <2geom/matrix.h> #include <2geom/pathvector.h> #include "xml/repr.h" -- 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 From ab143333746e25648b253f13c0539adff089b1b6 Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Fri, 24 Jun 2011 00:22:07 +0200 Subject: Remove more of libnr (bzr r10347.1.2) --- src/sp-offset.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/sp-offset.cpp') diff --git a/src/sp-offset.cpp b/src/sp-offset.cpp index 460421492..0dd65c7b9 100644 --- a/src/sp-offset.cpp +++ b/src/sp-offset.cpp @@ -844,7 +844,7 @@ sp_offset_distance_to_original (SPOffset * offset, Geom::Point px) { // we have a new minimum distance // now we need to wheck if px is inside or outside (for the sign) - nx = px - to_2geom(theRes->getPoint(i).x); + nx = px - theRes->getPoint(i).x; double nlen = sqrt (dot(nx , nx)); nx /= nlen; int pb, cb, fb; -- cgit v1.2.3 From 2be2cf32db0668dc64512a98f6c2394152bd10cc Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Sat, 16 Jul 2011 00:42:39 -0700 Subject: Cleanup of oudated/redundant SP_ITEM() macro use. (bzr r10461) --- src/sp-offset.cpp | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) (limited to 'src/sp-offset.cpp') diff --git a/src/sp-offset.cpp b/src/sp-offset.cpp index 0dd65c7b9..5187ff027 100644 --- a/src/sp-offset.cpp +++ b/src/sp-offset.cpp @@ -1026,23 +1026,20 @@ sp_offset_href_changed(SPObject */*old_ref*/, SPObject */*ref*/, SPOffset *offse } } -static void -sp_offset_move_compensate(Geom::Affine const *mp, SPItem */*original*/, SPOffset *self) +static void 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); - SPItem *item = SP_ITEM(self); - Geom::Affine m(*mp); if (!(m.isTranslation()) || mode == SP_CLONE_COMPENSATION_NONE) { self->sourceDirty=true; - item->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); + self->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); return; } // calculate the compensation matrix and the advertized movement matrix - item->readAttr("transform"); + self->readAttr("transform"); Geom::Affine t = self->transform; Geom::Affine offset_move = t.inverse() * m * t; @@ -1061,9 +1058,9 @@ sp_offset_move_compensate(Geom::Affine const *mp, SPItem */*original*/, SPOffset self->sourceDirty=true; // commit the compensation - item->transform *= offset_move; - item->doWriteTransform(item->getRepr(), item->transform, &advertized_move); - item->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); + self->transform *= offset_move; + self->doWriteTransform(self->getRepr(), self->transform, &advertized_move); + self->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); } static void -- cgit v1.2.3 From 72cc39b9f0b340548f395c7f61ca9662b34aea09 Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Sat, 27 Aug 2011 11:04:37 +0200 Subject: Refactor SPItem bounding box methods: remove NRRect usage and make code using them more obvious. Fix filter region computation. (bzr r10582.1.1) --- src/sp-offset.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/sp-offset.cpp') diff --git a/src/sp-offset.cpp b/src/sp-offset.cpp index 5187ff027..8617c096a 100644 --- a/src/sp-offset.cpp +++ b/src/sp-offset.cpp @@ -514,7 +514,7 @@ sp_offset_set_shape(SPShape *shape) theRes->ConvertToForme (orig, 1, originaux); SPItem *item = shape; - Geom::OptRect bbox = item->getBboxDesktop (); + Geom::OptRect bbox = item->desktopVisualBounds(); if ( bbox ) { gdouble size = L2(bbox->dimensions()); gdouble const exp = item->transform.descrim(); -- cgit v1.2.3