#pragma once #include "Abs_Axis.h" #include namespace renderive { struct Axis_Render_State; struct Axis_Input_Data; struct Axis_Private; /// 普通数值轴。 class LIB_DECL 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; Axis(); PROP(int, label_precision) PROP(double, coord_start) PROP(double, coord_length) /// 设置轴坐标范围。 void set_coord_range(Range range); template struct Builder_T; struct Builder; private: Axis_Private* d(); }; template struct Axis::Builder_T : Abs_Axis::Builder_T { PROP_BT(int, label_precision) // PROP_BT(double, coord_start) // PROP_BT(double, coord_length) That& set_coord_range(Range r) { That& t = *static_cast(this); if (r.length() == 0.0) return t; t.coord_start = std::move(r.origin); t.coord_length = std::move(r.length()); return t; } That& set_use_wheel(bool use_wheel) { That& t = *static_cast(this); this->use_wheel = use_wheel; return t; } That& set_use_drag(bool use_drag) { That& t = *static_cast(this); this->use_drag = use_drag; return t; } void set(Axis* ret); int label_precision = 2; bool use_wheel = false; bool use_drag = false; }; struct LIB_DECL Axis::Builder : Builder_T { /// 创建数值轴构造器。 Builder(std::shared_ptr parent, Orientation orientation); /// 构建并返回数值轴对象。 std::shared_ptr build(); }; } // namespace renderive