implement file-[un]archive progress report
[ardour.git] / libs / canvas / curve.cc
index 827dee206d052f643a15f793fae34eae3d6a8985..280a3e3aaaf7688a04d41f0339ddf848bb3caca3 100644 (file)
@@ -27,13 +27,18 @@ using namespace ArdourCanvas;
 using std::min;
 using std::max;
 
-Curve::Curve (Group* parent)
-       : Item (parent)
-       , PolyItem (parent)
-       , Fill (parent)
+Curve::Curve (Canvas* c)
+       : PolyItem (c)
+       , n_samples (0)
+       , points_per_segment (16)
+       , curve_fill (None)
+{
+}
+
+Curve::Curve (Item* parent)
+       : PolyItem (parent)
        , n_samples (0)
        , points_per_segment (16)
-       , curve_type (CatmullRomCentripetal)
        , curve_fill (None)
 {
 }
@@ -96,7 +101,7 @@ Curve::render (Rect const & area, Cairo::RefPtr<Cairo::Context> context) const
         * section of the curve. For now we rely on cairo clipping to help
         * with this.
         */
-       
+
 
        setup_outline_context (context);
 
@@ -160,7 +165,7 @@ Curve::render (Rect const & area, Cairo::RefPtr<Cairo::Context> context) const
                draw = draw.expand (4.0);
 
                /* now clip it to the actual points in the curve */
-               
+
                if (draw.x0 < w1.x) {
                        draw.x0 = w1.x;
                }
@@ -188,18 +193,9 @@ Curve::render (Rect const & area, Cairo::RefPtr<Cairo::Context> context) const
                /* draw line between samples */
                window_space = item_to_window (Duple (samples[left].x, samples[left].y));
                context->move_to (window_space.x, window_space.y);
-               Coord last_x = round(window_space.x);
-               Coord last_y = round(window_space.y);
                for (uint32_t idx = left + 1; idx < right; ++idx) {
                        window_space = item_to_window (Duple (samples[idx].x, samples[idx].y));
-                       if (last_x == round(window_space.x)) continue;
-                       if (last_y == round(window_space.y)) continue;
-                       last_x = round(window_space.x);
-                       last_y = round(window_space.y);
-                       context->line_to (last_x - .5 , last_y + .5);
-               }
-               if (last_x != round(window_space.x) || last_y != round(window_space.y)) {
-                       context->line_to (window_space.x - .5 , window_space.y + .5);
+                       context->line_to (window_space.x, window_space.y);
                }
 
                switch (curve_fill) {
@@ -244,7 +240,7 @@ Curve::render (Rect const & area, Cairo::RefPtr<Cairo::Context> context) const
 bool
 Curve::covers (Duple const & pc) const
 {
-       Duple point = canvas_to_item (pc);
+       Duple point = window_to_item (pc);
 
        /* O(N) N = number of points, and not accurate */