From: Krzysztof KosiƄski Date: Sun, 7 Feb 2010 01:22:44 +0000 (+0100) Subject: Fix path transformation (LP bug #515237) X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=dfd5d09acde2c72c8a612c4d105af9db20381d3a;p=inkscape.git Fix path transformation (LP bug #515237) --- diff --git a/src/2geom/hvlinesegment.h b/src/2geom/hvlinesegment.h index ac91ec80a..6c42b06aa 100644 --- a/src/2geom/hvlinesegment.h +++ b/src/2geom/hvlinesegment.h @@ -216,7 +216,7 @@ class HLineSegment : public Curve { Point ip = initialPoint() * m; Point ep = finalPoint() * m; - if (m.onlyScaleAndTranslation()) { + if (ip[Y] == ep[Y]) { return new HLineSegment(ip[X], ep[X], ip[Y]); } else { return new LineSegment(ip, ep); @@ -457,7 +457,7 @@ class VLineSegment : public Curve { Point ip = initialPoint() * m; Point ep = finalPoint() * m; - if (m.onlyScaleAndTranslation()) { + if (ip[X] == ep[X]) { return new VLineSegment(ip[X], ip[Y], ep[Y]); } else { return new LineSegment(ip, ep); diff --git a/src/2geom/path.cpp b/src/2geom/path.cpp index 88c7a99b9..05a69d616 100644 --- a/src/2geom/path.cpp +++ b/src/2geom/path.cpp @@ -89,8 +89,17 @@ Path &Path::operator*=(Matrix const &m) { } prev = (*it)->finalPoint(); } - for ( int i = 0 ; i < 2 ; ++i ) { - final_->setPoint(i, (*final_)[i] * m); + if (closed_) { + Geom::Point pt = front().initialPoint(); + if (size_open() > 0) { + Curve *l = const_cast((get_curves().end() - 2)->get()); + l->setFinal(pt); + } + final_->setInitial(pt); + final_->setFinal(pt); + } else { + final_->setInitial(back().finalPoint()); + final_->setFinal(front().initialPoint()); } if (get_curves().size() > 1) { if ( front().initialPoint() != initialPoint() || back().finalPoint() != finalPoint() ) { diff --git a/src/gradient-drag.cpp b/src/gradient-drag.cpp index 5facfefd0..5be435a64 100644 --- a/src/gradient-drag.cpp +++ b/src/gradient-drag.cpp @@ -1154,7 +1154,10 @@ Moves this dragger to the point of the given draggable, acting upon all other dr void GrDragger::moveThisToDraggable (SPItem *item, gint point_type, gint point_i, bool fill_or_stroke, bool write_repr) { - this->point = sp_item_gradient_get_coords (item, point_type, point_i, fill_or_stroke); + GrDraggable *dr_first = (GrDraggable *) this->draggables->data; + if (!dr_first) return; + + this->point = sp_item_gradient_get_coords (dr_first->item, dr_first->point_type, dr_first->point_i, dr_first->fill_or_stroke); this->point_original = this->point; sp_knot_moveto (this->knot, this->point);