#pragma once #include #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 axis); /// @brief 设置垂直坐标轴。 void set_vertical_axis(std::shared_ptr 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 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 parent, std::shared_ptr key_axis, std::shared_ptr value_axis); /// @brief 构建并返回多区域框选对象。 std::shared_ptr build(); std::weak_ptr domain_axis; std::weak_ptr value_axis{}; std::shared_ptr parent{}; }; } // namespace renderive