X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Frubberband.cpp;h=76743cf8b6017f578148c507fe3406ab9f4fa516;hb=99f8079bc0a32aef279e4af06de4cbf4bd853563;hp=a1621237980e38c64807f7856c919bdd936472ea;hpb=641ff38fd1641391fdda1b92fb2ce2e5ec3d3e0c;p=inkscape.git diff --git a/src/rubberband.cpp b/src/rubberband.cpp index a16212379..76743cf8b 100644 --- a/src/rubberband.cpp +++ b/src/rubberband.cpp @@ -14,21 +14,19 @@ #include "display/sodipodi-ctrlrect.h" #include "desktop.h" -#include "inkscape.h" #include "desktop-handles.h" #include "rubberband.h" #include "display/canvas-bpath.h" #include "display/curve.h" -#include "libnr/nr-point.h" Inkscape::Rubberband *Inkscape::Rubberband::_instance = NULL; -Inkscape::Rubberband::Rubberband() - : _desktop(SP_ACTIVE_DESKTOP), _rect(NULL), _touchpath(NULL), _started(false) +Inkscape::Rubberband::Rubberband(SPDesktop *dt) + : _desktop(dt), _rect(NULL), _touchpath(NULL), _started(false) { _points.clear(); _mode = RUBBERBAND_MODE_RECT; - _touchpath_curve = sp_curve_new_sized(2000); + _touchpath_curve = new SPCurve(); } void Inkscape::Rubberband::delete_canvas_items() @@ -46,16 +44,16 @@ void Inkscape::Rubberband::delete_canvas_items() } -void Inkscape::Rubberband::start(SPDesktop *d, NR::Point const &p) +void Inkscape::Rubberband::start(SPDesktop *d, Geom::Point const &p) { _points.clear(); - sp_curve_reset(_touchpath_curve); + _touchpath_curve->reset(); delete_canvas_items(); _desktop = d; _start = p; _started = true; _points.push_back(_desktop->d2w(p)); - sp_curve_moveto(_touchpath_curve, p); + _touchpath_curve->moveto(p); sp_canvas_force_full_redraw_after_interruptions(_desktop->canvas, 5); } @@ -66,29 +64,30 @@ void Inkscape::Rubberband::stop() _mode = RUBBERBAND_MODE_RECT; // restore the default _points.clear(); - sp_curve_reset(_touchpath_curve); + _touchpath_curve->reset(); delete_canvas_items(); - sp_canvas_end_forced_full_redraws(_desktop->canvas); + if (_desktop) + sp_canvas_end_forced_full_redraws(_desktop->canvas); } -void Inkscape::Rubberband::move(NR::Point const &p) +void Inkscape::Rubberband::move(Geom::Point const &p) { if (!_started) return; _end = p; - _desktop->scroll_to_point(&p); - sp_curve_lineto (_touchpath_curve, p); + _desktop->scroll_to_point(p); + _touchpath_curve->lineto(p); - NR::Point next = _desktop->d2w(p); + Geom::Point next = _desktop->d2w(p); // we want the points to be at most 0.5 screen pixels apart, // so that we don't lose anything small; // if they are farther apart, we interpolate more points - if (_points.size() > 0 && NR::L2(next-_points.back()) > 0.5) { - NR::Point prev = _points.back(); - int subdiv = 2 * (int) round(NR::L2(next-prev) + 0.5); + if (_points.size() > 0 && Geom::L2(next-_points.back()) > 0.5) { + Geom::Point prev = _points.back(); + int subdiv = 2 * (int) round(Geom::L2(next-prev) + 0.5); for (int i = 1; i <= subdiv; i ++) { _points.push_back(prev + ((double)i/subdiv) * (next - prev)); } @@ -100,7 +99,7 @@ void Inkscape::Rubberband::move(NR::Point const &p) if (_rect == NULL) { _rect = static_cast(sp_canvas_item_new(sp_desktop_controls(_desktop), SP_TYPE_CTRLRECT, NULL)); } - _rect->setRectangle(NR::Rect(_start, _end)); + _rect->setRectangle(Geom::Rect(_start, _end)); sp_canvas_item_show(_rect); if (_touchpath) @@ -125,19 +124,19 @@ void Inkscape::Rubberband::setMode(int mode) _mode = mode; } -NR::Maybe Inkscape::Rubberband::getRectangle() const +Geom::OptRect Inkscape::Rubberband::getRectangle() const { if (!_started) { - return NR::Nothing(); + return Geom::OptRect(); } - return NR::Rect(_start, _end); + return Geom::Rect(_start, _end); } -Inkscape::Rubberband *Inkscape::Rubberband::get() +Inkscape::Rubberband *Inkscape::Rubberband::get(SPDesktop *desktop) { if (_instance == NULL) { - _instance = new Inkscape::Rubberband; + _instance = new Inkscape::Rubberband(desktop); } return _instance;