X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fcanvas%2Fcanvas%2Fcurve.h;h=fad1119b39b6479118d7641b5f5b841fa9b2fbec;hb=d92686afb4105b84b014372b6feb0ccc454a5171;hp=93c14386dc9794f31e165a844559156cfc7765d2;hpb=658bb3ccd43658de18fbd43cd91a8e66650e27a7;p=ardour.git diff --git a/libs/canvas/canvas/curve.h b/libs/canvas/canvas/curve.h index 93c14386dc..fad1119b39 100644 --- a/libs/canvas/canvas/curve.h +++ b/libs/canvas/canvas/curve.h @@ -21,35 +21,44 @@ #include "canvas/visibility.h" +#include "canvas/interpolated_curve.h" #include "canvas/poly_item.h" +#include "canvas/fill.h" namespace ArdourCanvas { -class LIBCANVAS_API Curve : public PolyItem +class XFadeCurve; + +class LIBCANVAS_API Curve : public PolyItem, public InterpolatedCurve { -public: - Curve (Group *); - + public: + Curve (Canvas*); + Curve (Item*); + + enum CurveFill { + None, + Inside, + Outside, + }; + void compute_bounding_box () const; void render (Rect const & area, Cairo::RefPtr) const; void set (Points const &); + void set_points_per_segment (uint32_t n); + bool covers (Duple const &) const; + void set_fill_mode (CurveFill cf) { curve_fill = cf; } - protected: - void render_path (Rect const &, Cairo::RefPtr) const; - void render_curve (Rect const &, Cairo::RefPtr) const; - private: - Points first_control_points; - Points second_control_points; + Points samples; + Points::size_type n_samples; + uint32_t points_per_segment; + CurveFill curve_fill; - - static void compute_control_points (Points const &, - Points&, Points&); - static double* solve (std::vector const&); + void interpolate (); }; - + } #endif