- if (view_index >= cpsize) {
-
- /* make sure we have enough control points */
-
- ControlPoint* ncp = new ControlPoint (*this);
-
- ncp->set_size (box_size);
-
- control_points.push_back (ncp);
- ++cpsize;
- }
-
- ControlPoint::ShapeType shape;
-
- if (!terminal_points_can_slide) {
- if (pi == 0) {
- control_points[view_index]->set_can_slide(false);
- if (tx == 0) {
- shape = ControlPoint::Start;
- } else {
- shape = ControlPoint::Full;
- }
- } else if (pi == npoints - 1) {
- control_points[view_index]->set_can_slide(false);
- shape = ControlPoint::End;
- } else {
- control_points[view_index]->set_can_slide(true);
- shape = ControlPoint::Full;
- }
- } else {
- control_points[view_index]->set_can_slide(true);
- shape = ControlPoint::Full;
- }
-
- last_control_point_x = tx;
- last_control_point_y = ty;
-
- control_points[view_index]->reset (tx, ty, model, view_index, shape);
-
- prev_rx = this_rx;
- prev_ry = this_ry;
-
- /* finally, control visibility */
-
- if (_visible && points_visible) {
- control_points[view_index]->show ();
- control_points[view_index]->set_visible (true);
- } else {
- if (!points_visible) {
- control_points[view_index]->set_visible (false);
- }
- }
-
- view_index++;
- }
-
- /* discard extra CP's to avoid confusing ourselves */
-
- while (control_points.size() > view_index) {
- ControlPoint* cp = control_points.back();
- control_points.pop_back ();
- delete cp;
- }
-
- if (!terminal_points_can_slide) {
- control_points.back()->set_can_slide(false);
- }
-
- delete [] slope;
-
- if (view_index > 1) {
-
- npoints = view_index;