65 lines
2.5 KiB
C++
65 lines
2.5 KiB
C++
#pragma once
|
|
#include <vector>
|
|
#include "../base/Color.h"
|
|
#include "../base/Geometry.h"
|
|
#include "../base/Style.h"
|
|
#include "../base/Text.h"
|
|
#include "global.h"
|
|
namespace renderive {
|
|
struct Selection_Rectangle_Overlay_Private;
|
|
inline Brush default_selection_rectangle_overlay_brush() {
|
|
return Brush{Color{0, 0, 255, 50}, Brush_Style::Solid};
|
|
}
|
|
inline Pen default_selection_rectangle_overlay_pen() {
|
|
return Pen{Color::white(), 1.0, Line_Style::Dash};
|
|
}
|
|
/// @brief 多区域框选图元。
|
|
class LIB_DECL Selection_Rectangle_Overlay : public Renderable {
|
|
public:
|
|
/// @brief 创建多区域框选图元。
|
|
Selection_Rectangle_Overlay();
|
|
/// @brief 设置水平坐标轴。
|
|
void set_horizontal_axis(std::shared_ptr<Abs_Axis> axis);
|
|
/// @brief 设置垂直坐标轴。
|
|
void set_vertical_axis(std::shared_ptr<Abs_Axis> axis);
|
|
/// @brief 返回标注字体。
|
|
Font label_font();
|
|
/// @brief 返回标注画笔。
|
|
Pen label_pen();
|
|
/// @brief 返回矩形填充刷。
|
|
Brush selection_brush();
|
|
/// @brief 返回矩形边框画笔。
|
|
Pen selection_border_pen();
|
|
/// @brief 设置标注字体。
|
|
void set_label_font(const Font& font);
|
|
/// @brief 设置标注画笔。
|
|
void set_label_pen(const Pen& pen);
|
|
/// @brief 设置矩形填充刷。
|
|
void set_selection_brush(const Brush& brush);
|
|
/// @brief 设置矩形边框画笔。
|
|
void set_selection_border_pen(const Pen& pen);
|
|
std::vector<RectF> selected_regions();
|
|
void clear_selected_regions();
|
|
struct Builder;
|
|
private:
|
|
Selection_Rectangle_Overlay_Private* d();
|
|
Render_Object_Owner create_render_data() override;
|
|
Render_Object_Owner create_render_state() override;
|
|
Render_Object_Owner create_input_data() override;
|
|
};
|
|
/// @brief 多区域框选构造器。
|
|
struct LIB_DECL Selection_Rectangle_Overlay::Builder {
|
|
SETTER(Font, font, Font())
|
|
SETTER(Pen, font_pen, Pen{.color = Color::white()})
|
|
SETTER(Brush, rect_brush, default_selection_rectangle_overlay_brush())
|
|
SETTER(Pen, border_pen, default_selection_rectangle_overlay_pen())
|
|
/// @brief 创建多区域框选构造器。
|
|
Builder(std::shared_ptr<Renderable> parent, std::shared_ptr<Abs_Axis> key_axis, std::shared_ptr<Abs_Axis> value_axis);
|
|
/// @brief 构建并返回多区域框选对象。
|
|
std::shared_ptr<Selection_Rectangle_Overlay> build();
|
|
std::weak_ptr<Abs_Axis> domain_axis;
|
|
std::weak_ptr<Abs_Axis> value_axis{};
|
|
std::shared_ptr<Renderable> parent{};
|
|
};
|
|
} // namespace renderive
|