2#include <ossia/detail/config.hpp>
4#include <ossia/dataflow/control_inlets.hpp>
5#include <ossia/dataflow/graph_node.hpp>
6#include <ossia/dataflow/node_process.hpp>
7#include <ossia/dataflow/port.hpp>
8#include <ossia/editor/automation/curve_value_visitor.hpp>
39class automation final :
public ossia::nonowning_graph_node
42 automation() { m_outlets.push_back(&value_out); }
46 [[nodiscard]] std::string label()
const noexcept override {
return "automation"; }
48 void set_behavior(
const ossia::behavior& b) { m_drive = b; }
52 void swap_behavior(ossia::behavior& b)
noexcept { std::swap(m_drive, b); }
54 const ossia::behavior& behavior() const noexcept {
return m_drive; }
56 void reset_drive() { m_drive.reset(); }
59 void run(
const ossia::token_request& t, ossia::exec_state_facade e)
noexcept override
63 const auto [tick_start, d] = e.timings(t);
65 ossia::value_port& vp = *value_out;
68 ossia::detail::compute_value_visitor{t.position(), ossia::val_type::FLOAT},
73 ossia::behavior m_drive;
74 ossia::value_outlet value_out;
77class float_automation final :
public ossia::nonowning_graph_node
80 float_automation() { m_outlets.push_back(&value_out); }
82 ~float_automation()
override =
default;
84 std::string label() const noexcept
override {
return "automation (float)"; }
88 void reset_drive() { m_drive.reset(); }
91 void run(
const ossia::token_request& t, ossia::exec_state_facade e)
noexcept override
93 const auto [tick_start, d] = e.timings(t);
95 ossia::value_port& vp = *value_out;
96 vp.write_value(m_drive.value_at(t.position()), tick_start);
100 ossia::minmax_float_outlet value_out;
103#if defined(OSSIA_SCENARIO_DATAFLOW)
104class automation_process final :
public ossia::node_process
107 using ossia::node_process::node_process;
108 void start()
override
The curve class.
Definition curve.hpp:59
The ossia::nodes::automation class.
Definition automation.hpp:40
void swap_behavior(ossia::behavior &b) noexcept
Definition automation.hpp:52