X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fcanvas%2Fcanvas%2Fcurve.h;h=fad1119b39b6479118d7641b5f5b841fa9b2fbec;hb=d92686afb4105b84b014372b6feb0ccc454a5171;hp=4cf69e19e3984ee0d8207454a08440285d60572c;hpb=680c64246e4ee9f3eb53da079dea6a7ecf996e92;p=ardour.git diff --git a/libs/canvas/canvas/curve.h b/libs/canvas/canvas/curve.h index 4cf69e19e3..fad1119b39 100644 --- a/libs/canvas/canvas/curve.h +++ b/libs/canvas/canvas/curve.h @@ -19,33 +19,46 @@ #ifndef __CANVAS_CURVE_H__ #define __CANVAS_CURVE_H__ +#include "canvas/visibility.h" + +#include "canvas/interpolated_curve.h" #include "canvas/poly_item.h" +#include "canvas/fill.h" namespace ArdourCanvas { -class 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 &); - protected: - void render_path (Rect const &, Cairo::RefPtr) const; - void render_curve (Rect const &, Cairo::RefPtr) const; - + void set_points_per_segment (uint32_t n); + + bool covers (Duple const &) const; + void set_fill_mode (CurveFill cf) { curve_fill = cf; } + 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