48 lines
1.7 KiB
C++
48 lines
1.7 KiB
C++
#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>, time_axis)
|
|
/// @brief 绑定数值轴。
|
|
PROP(std::shared_ptr<Axis>, 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> time_axis;
|
|
std::weak_ptr<Axis> 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>, time_axis)
|
|
PROP_B(std::shared_ptr<Axis>, value_axis)
|
|
PROP_B(Color, color)
|
|
/// 创建音频频率构造器。
|
|
Builder(std::shared_ptr<Renderable> parent, std::shared_ptr<Time_Axis> time_axis, std::shared_ptr<Axis> value_axis);
|
|
/// 构建并返回音频频率对象。
|
|
std::shared_ptr<Frequency_Trace> build();
|
|
std::shared_ptr<Renderable> parent{};
|
|
Color color = Color::yellow();
|
|
};
|
|
} // namespace renderive
|