Files
Renderive/Core/Axis/Time_Axis.h
T
2026-08-02 12:15:48 +08:00

56 lines
1.9 KiB
C++

#pragma once
#include "Abs_Axis.h"
#include "../base/Time_Of_Day.h"
#include <memory>
#include <string>
namespace renderive {
struct Time_Axis_Private;
struct Time_Axis_Render_Access;
class Timeline_Stream;
/// 时间轴,输入 tick 后按格式显示时间标签。
class LIB_DECL Time_Axis : public Abs_Axis {
public:
/// 返回私有渲染数据。
Render_Object_Owner create_render_data() override;
Render_Object_Owner create_render_state() override;
Render_Object_Owner create_input_data() override;
Time_Axis();
PROP(int, visible_time_point_count)
PROP(int, tick_label_spacing_px)
PROP(std::string, time_format)
PROP(Font, font)
PROP(std::shared_ptr<Timeline_Stream>, timeline_stream)
PROP(bool, newest_at_axis_start)
/// 推入一个新的时间点并返回对应 tick。
int append_time(Time_Of_Day time);
/// 将 tick 转换成时间。
Time_Of_Day tick_to_time(int tick);
struct Builder;
private:
friend struct Time_Axis_Render_Access;
Time_Axis_Private* d();
};
struct Time_Axis_Prop {
int visible_time_point_count = 100;
int tick_label_spacing_px = 8;
std::string time_format = "mm:ss.zzz";
Font font;
std::shared_ptr<Timeline_Stream> timeline_stream;
bool newest_at_axis_start = false;
};
struct LIB_DECL Time_Axis::Builder : Abs_Axis::Builder_T<Time_Axis::Builder>,
public
Time_Axis_Prop {
PROP_B(int, visible_time_point_count)
PROP_B(int, tick_label_spacing_px)
PROP_B(std::string, time_format)
PROP_B(Font, font)
PROP_B(std::shared_ptr<Timeline_Stream>, timeline_stream)
PROP_B(bool, newest_at_axis_start)
/// 创建时间轴构造器。
Builder(std::shared_ptr<Renderable> parent, Orientation orientation);
/// 构建并返回时间轴对象。
std::shared_ptr<Time_Axis> build();
};
} // namespace renderive