From 783739a2f3599e00869f907ed1747491b35486b1 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Tue, 28 Mar 2017 10:49:19 +0200 Subject: rename spline-widget -> spline Adjust usages. --- spline/spline.hpp | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 spline/spline.hpp (limited to 'spline/spline.hpp') diff --git a/spline/spline.hpp b/spline/spline.hpp new file mode 100644 index 00000000..77b2bdf9 --- /dev/null +++ b/spline/spline.hpp @@ -0,0 +1,108 @@ +/* Copyright (c) 2012-2016, Stanislaw Halik + + * Permission to use, copy, modify, and/or distribute this + * software for any purpose with or without fee is hereby granted, + * provided that the above copyright notice and this permission + * notice appear in all copies. + */ + +#pragma once + +#include "compat/qcopyable-mutex.hpp" +#include "options/options.hpp" +#include "compat/util.hpp" +using namespace options; + +#include "export.hpp" + +#include +#include +#include + +#include +#include +#include +#include + +namespace spline_detail { + +class OPENTRACK_SPLINE_EXPORT settings final : public QObject +{ + Q_OBJECT +public: + bundle b; + value> points; + settings(bundle b); + ~settings() override; +signals: + void recomputed() const; +}; + +} + +class OPENTRACK_SPLINE_EXPORT spline final +{ + double precision(const QList& points) const; + void update_interp_data(); + float get_value_internal(int x); + void add_lone_point(); + float get_value_no_save_internal(double x); + static bool sort_fn(const QPointF& one, const QPointF& two); + + static QPointF ensure_in_bounds(const QList& points, double max_x, int i); + static int element_count(const QList& points, double max_x); + + mem s; + QMetaObject::Connection connection; + + std::vector data; + using interp_data_t = decltype(data); + + static constexpr int value_count = 4096; + + MyMutex _mutex; + QPointF last_input_value; + qreal max_x, max_y; + volatile bool activep; + bool validp; + +public: + using settings = spline_detail::settings; + + void reload(); + void save(QSettings& s); + void save(); + void set_bundle(bundle b); + + qreal max_input() const; + qreal max_output() const; + spline(); + spline(qreal maxx, qreal maxy, const QString& name); + ~spline(); + + spline& operator=(const spline&) = default; + spline(const spline&) = default; + + float get_value(double x); + float get_value_no_save(double x) const; + DEFUN_WARN_UNUSED bool get_last_value(QPointF& point); + void remove_point(int i); + void clear(); + + void add_point(QPointF pt); + void add_point(double x, double y); + void move_point(int idx, QPointF pt); + QList get_points() const; + void set_max_input(qreal MaxInput); + void set_max_output(qreal MaxOutput); + + void set_tracking_active(bool value); + bundle get_bundle(); + void recompute(); + + mem get_settings(); + mem get_settings() const; + + using points_t = decltype(s->points()); + int get_point_count() const; +}; -- cgit v1.2.3