#pragma once #include "../Axis/Axis.h" #include "../base/Color.h" #include "../base/Style.h" #include "../base/Time_Of_Day.h" #include "global.h" namespace renderive { class Time_Axis; struct Frequency_Trace_Private; /// @brief 音频频率随时间变化的折线图元。 class LIB_DECL Frequency_Trace : public Renderable { public: /// @brief 创建音频频率图元。 Frequency_Trace(); /// @brief 写入指定 tick 对应的音频频率值。 void append_sample(int tick, double data); /// @brief 写入指定时间对应的音频频率值。 void append_sample(Time_Of_Day time, double data); /// @brief 绑定时间轴。 PROP(std::shared_ptr, time_axis) /// @brief 绑定数值轴。 PROP(std::shared_ptr, value_axis) /// @brief 曲线颜色。 struct Builder; private: Frequency_Trace_Private* d(); Render_Object_Owner create_render_data() override; Render_Object_Owner create_render_state() override; Render_Object_Owner create_input_data() override; }; struct Frequency_Trace_Prop { std::weak_ptr time_axis; std::weak_ptr value_axis{}; Pen pen{.color = Color::yellow(), .width = 1.0}; }; struct LIB_DECL Frequency_Trace::Builder : Frequency_Trace_Prop { PROP_B(std::shared_ptr, time_axis) PROP_B(std::shared_ptr, value_axis) PROP_B(Color, color) /// 创建音频频率构造器。 Builder(std::shared_ptr parent, std::shared_ptr time_axis, std::shared_ptr value_axis); /// 构建并返回音频频率对象。 std::shared_ptr build(); std::shared_ptr parent{}; Color color = Color::yellow(); }; } // namespace renderive