Files
Renderive/Core/plottable/Selection_Rectangle_Overlay.h
T
2026-08-02 03:43:39 +08:00

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