diff options
| author | Johan B. C. Engelen <jbc.engelen@swissonline.ch> | 2008-08-13 18:49:22 +0000 |
|---|---|---|
| committer | johanengelen <johanengelen@users.sourceforge.net> | 2008-08-13 18:49:22 +0000 |
| commit | d70f7cc1bada9cd825ee742246f817ca4fdb14cd (patch) | |
| tree | e2f0373f664e81c3f0df1dcffb689e140323d764 /src/display/curve.cpp | |
| parent | Get rid of sp_nodepath_current() and a few instances of SP_ACTIVE_DESKTOP by ... (diff) | |
| download | inkscape-d70f7cc1bada9cd825ee742246f817ca4fdb14cd.tar.gz inkscape-d70f7cc1bada9cd825ee742246f817ca4fdb14cd.zip | |
return boost::optional for second and penultimate points of SPCurve
(bzr r6616)
Diffstat (limited to 'src/display/curve.cpp')
| -rw-r--r-- | src/display/curve.cpp | 45 |
1 files changed, 26 insertions, 19 deletions
diff --git a/src/display/curve.cpp b/src/display/curve.cpp index d142b6eac..9f6c34981 100644 --- a/src/display/curve.cpp +++ b/src/display/curve.cpp @@ -373,48 +373,55 @@ SPCurve::first_point() const /** * Return the second point of first subpath or _movePos if curve too short. - * If the pathvector is empty, this returns (0,0). If the first path is only a moveto, this method + * If the pathvector is empty, this returns nothing. If the first path is only a moveto, this method * returns the first point of the second path, if it exists. If there is no 2nd path, it returns the * first point of the first path. - * - * FIXME: for empty paths shouldn't this return (NR_HUGE,NR_HUGE) */ -Geom::Point +boost::optional<Geom::Point> SPCurve::second_point() const { - if (is_empty()) { - return Geom::Point(0,0); - } - else if (_pathv.front().empty()) { - // first path is only a moveto - // check if there is second path - if (_pathv.size() > 1) { - return _pathv[1].initialPoint(); + boost::optional<Geom::Point> retval; + if (!is_empty()) { + if (_pathv.front().empty()) { + // first path is only a moveto + // check if there is second path + if (_pathv.size() > 1) { + retval = _pathv[1].initialPoint(); + } else { + retval = _pathv[0].initialPoint(); + } } else { - return _pathv[0].initialPoint(); + retval = _pathv.front()[0].finalPoint(); } } - else - return _pathv.front()[0].finalPoint(); + + return retval; } /** * TODO: fix comment: Return the second-last point of last subpath or _movePos if curve too short. */ -Geom::Point +boost::optional<Geom::Point> SPCurve::penultimate_point() const { - Geom::Curve const& back = _pathv.back().back_default(); - return back.initialPoint(); + boost::optional<Geom::Point> retval; + if (!is_empty()) { + Geom::Curve const& back = _pathv.back().back_default(); + retval = back.initialPoint(); + } + + return retval; } /** * Return last point of last subpath or (0,0). TODO: shouldn't this be (NR_HUGE, NR_HUGE) to be able to tell it apart from normal (0,0) ? * If the last path is only a moveto, then return that point. */ -Geom::Point +boost::optional<Geom::Point> SPCurve::last_point() const { + boost::optional<Geom::Point> retval; + if (is_empty()) return Geom::Point(0, 0); |
