62 lines
1.8 KiB
C++
62 lines
1.8 KiB
C++
#pragma once
|
|
#include "Abs_Axis.h"
|
|
#include <memory>
|
|
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 <typename That>
|
|
struct Builder_T;
|
|
struct Builder;
|
|
private:
|
|
Axis_Private* d();
|
|
};
|
|
template <typename That>
|
|
struct Axis::Builder_T : Abs_Axis::Builder_T<That> {
|
|
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<That*>(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<That*>(this);
|
|
this->use_wheel = use_wheel;
|
|
return t;
|
|
}
|
|
That& set_use_drag(bool use_drag) {
|
|
That& t = *static_cast<That*>(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> {
|
|
/// 创建数值轴构造器。
|
|
Builder(std::shared_ptr<Renderable> parent, Orientation orientation);
|
|
/// 构建并返回数值轴对象。
|
|
std::shared_ptr<Axis> build();
|
|
};
|
|
} // namespace renderive
|