use shared_ptr for widgets
This commit is contained in:
parent
de607fdeb2
commit
72dd10ef06
|
@ -12,7 +12,7 @@ template<typename T>
|
|||
concept WidgetType = std::derived_from<T, bwidgets::Widget>;
|
||||
|
||||
template<WidgetType W>
|
||||
void run_example(std::function<std::unique_ptr<W>()> factory,
|
||||
void run_example(std::function<std::shared_ptr<W>()> factory,
|
||||
std::function<void(W*, const std::shared_ptr<bwidgets::Font>&, int, int,
|
||||
const std::shared_ptr<bwidgets::Renderer>)>
|
||||
setup,
|
||||
|
|
|
@ -22,7 +22,7 @@ namespace bwidgets
|
|||
public:
|
||||
using LayoutImpl::LayoutImpl;
|
||||
|
||||
void add_widget(std::unique_ptr<Widget> widget_ptr) override
|
||||
void add_widget(std::shared_ptr<Widget> widget_ptr) override
|
||||
{
|
||||
if (renderer()) widget_ptr->renderer(renderer());
|
||||
_widgets.emplace_back(std::move(widget_ptr));
|
||||
|
@ -68,7 +68,7 @@ namespace bwidgets
|
|||
}
|
||||
|
||||
private:
|
||||
std::vector<std::unique_ptr<Widget>> _widgets;
|
||||
std::vector<std::shared_ptr<Widget>> _widgets;
|
||||
|
||||
void _handle_geometry_change(const SDL_Rect& vp) override
|
||||
{
|
||||
|
|
|
@ -116,7 +116,7 @@ namespace bwidgets
|
|||
}
|
||||
|
||||
protected:
|
||||
std::unique_ptr<Caption> _input_caption;
|
||||
std::shared_ptr<Caption> _input_caption;
|
||||
SDL_Rect _text_area {};
|
||||
|
||||
InputImpl(Widget* parent = nullptr)
|
||||
|
@ -203,8 +203,9 @@ namespace bwidgets
|
|||
|
||||
void _handle_rendering() override
|
||||
{
|
||||
const auto& color_end =
|
||||
focus() || hovered() ? theme()->color_input_bg_active() : theme()->color_input_bg();
|
||||
const auto& color_end = focus() || hovered()
|
||||
? theme()->color_input_bg_active()
|
||||
: theme()->color_input_bg();
|
||||
|
||||
fill_rect_gradient(*renderer(), _text_area, theme()->color_widget_border(),
|
||||
color_end, theme()->size_widget_border());
|
||||
|
|
|
@ -10,7 +10,7 @@ namespace bwidgets
|
|||
{
|
||||
public:
|
||||
// Add widget to the layout
|
||||
virtual void add_widget(std::unique_ptr<Widget>) = 0;
|
||||
virtual void add_widget(std::shared_ptr<Widget>) = 0;
|
||||
// Apply a function to every layout widget.
|
||||
virtual void for_widgets(const std::function<void(Widget*)>&) = 0;
|
||||
virtual void for_widgets(const std::function<void(const Widget*)>&) const = 0;
|
||||
|
|
|
@ -23,7 +23,7 @@ namespace bwidgets
|
|||
void text(std::string) override;
|
||||
|
||||
protected:
|
||||
std::unique_ptr<Caption> _caption;
|
||||
std::shared_ptr<Caption> _caption;
|
||||
SDL_Rect _caption_area {};
|
||||
SDL_Rect _mouse_area;
|
||||
|
||||
|
|
|
@ -125,9 +125,9 @@ namespace bwidgets
|
|||
}
|
||||
|
||||
protected:
|
||||
std::unique_ptr<Button> _increment_button;
|
||||
std::shared_ptr<Button> _increment_button;
|
||||
SDL_Rect _increment_button_area {};
|
||||
std::unique_ptr<Button> _decrement_button;
|
||||
std::shared_ptr<Button> _decrement_button;
|
||||
SDL_Rect _decrement_button_area {};
|
||||
std::pair<T, T> _value_range {std::numeric_limits<T>::lowest(),
|
||||
std::numeric_limits<T>::max()};
|
||||
|
|
|
@ -28,8 +28,8 @@ namespace bwidgets
|
|||
|
||||
private:
|
||||
Alignment _alignment;
|
||||
std::unique_ptr<ScrollBar> _scrollbar_h;
|
||||
std::unique_ptr<ScrollBar> _scrollbar_v;
|
||||
std::shared_ptr<ScrollBar> _scrollbar_h;
|
||||
std::shared_ptr<ScrollBar> _scrollbar_v;
|
||||
std::shared_ptr<Texture> _texture;
|
||||
SDL_Rect _texture_area;
|
||||
};
|
||||
|
|
|
@ -18,7 +18,7 @@ namespace bwidgets
|
|||
public:
|
||||
ScrollBarImpl(Widget* parent = nullptr);
|
||||
|
||||
auto cursor_area() const -> SDL_Rect;
|
||||
[[nodiscard]] auto cursor_area() const -> SDL_Rect;
|
||||
void handle_event(const SDL_Event&) override;
|
||||
void on_scroll(std::function<void(float)>) override;
|
||||
[[nodiscard]] auto orientation() const -> Orientation override;
|
||||
|
@ -31,8 +31,8 @@ namespace bwidgets
|
|||
|
||||
protected:
|
||||
SDL_Rect _bar_area;
|
||||
std::unique_ptr<Button> _button_minus;
|
||||
std::unique_ptr<Button> _button_plus;
|
||||
std::shared_ptr<Button> _button_minus;
|
||||
std::shared_ptr<Button> _button_plus;
|
||||
const Size _cursor_size {16, 16};
|
||||
// TODO: cursor_area
|
||||
std::function<void(float)> _on_scroll;
|
||||
|
|
|
@ -10,14 +10,14 @@
|
|||
|
||||
namespace bwidgets
|
||||
{
|
||||
auto create_button(Widget* p = nullptr) -> std::unique_ptr<Button>;
|
||||
auto create_caption(Widget* p = nullptr) -> std::unique_ptr<Caption>;
|
||||
auto create_horizontal_layout(Widget* p = nullptr) -> std::unique_ptr<AlignedLayout>;
|
||||
auto create_input_float(Widget* p = nullptr) -> std::unique_ptr<NumericInput<float>>;
|
||||
auto create_input_int(Widget* p = nullptr) -> std::unique_ptr<NumericInput<int>>;
|
||||
auto create_scrollable_area(Widget* p = nullptr) -> std::unique_ptr<ScrollableArea>;
|
||||
auto create_scrollbar(Widget* p = nullptr) -> std::unique_ptr<ScrollBar>;
|
||||
auto create_vertical_layout(Widget* p = nullptr) -> std::unique_ptr<AlignedLayout>;
|
||||
auto create_button(Widget* p = nullptr) -> std::shared_ptr<Button>;
|
||||
auto create_caption(Widget* p = nullptr) -> std::shared_ptr<Caption>;
|
||||
auto create_horizontal_layout(Widget* p = nullptr) -> std::shared_ptr<AlignedLayout>;
|
||||
auto create_input_float(Widget* p = nullptr) -> std::shared_ptr<NumericInput<float>>;
|
||||
auto create_input_int(Widget* p = nullptr) -> std::shared_ptr<NumericInput<int>>;
|
||||
auto create_scrollable_area(Widget* p = nullptr) -> std::shared_ptr<ScrollableArea>;
|
||||
auto create_scrollbar(Widget* p = nullptr) -> std::shared_ptr<ScrollBar>;
|
||||
auto create_vertical_layout(Widget* p = nullptr) -> std::shared_ptr<AlignedLayout>;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -10,43 +10,43 @@ using namespace std;
|
|||
|
||||
namespace bwidgets
|
||||
{
|
||||
auto create_horizontal_layout(Widget* parent) -> unique_ptr<AlignedLayout>
|
||||
auto create_horizontal_layout(Widget* parent) -> shared_ptr<AlignedLayout>
|
||||
{
|
||||
return make_unique<AlignedLayoutImpl<LayoutAlignment::HORIZONTAL>>(parent);
|
||||
return make_shared<AlignedLayoutImpl<LayoutAlignment::HORIZONTAL>>(parent);
|
||||
}
|
||||
|
||||
auto create_vertical_layout(Widget* parent) -> unique_ptr<AlignedLayout>
|
||||
auto create_vertical_layout(Widget* parent) -> shared_ptr<AlignedLayout>
|
||||
{
|
||||
return make_unique<AlignedLayoutImpl<LayoutAlignment::VERTICAL>>(parent);
|
||||
return make_shared<AlignedLayoutImpl<LayoutAlignment::VERTICAL>>(parent);
|
||||
}
|
||||
|
||||
auto create_button(Widget* parent) -> unique_ptr<Button>
|
||||
auto create_button(Widget* parent) -> shared_ptr<Button>
|
||||
{
|
||||
return make_unique<ButtonImpl>(parent);
|
||||
return make_shared<ButtonImpl>(parent);
|
||||
}
|
||||
|
||||
auto create_caption(Widget* parent) -> unique_ptr<Caption>
|
||||
auto create_caption(Widget* parent) -> shared_ptr<Caption>
|
||||
{
|
||||
return make_unique<CaptionImpl>(parent);
|
||||
return make_shared<CaptionImpl>(parent);
|
||||
}
|
||||
|
||||
auto create_input_float(Widget* parent) -> unique_ptr<NumericInput<float>>
|
||||
auto create_input_float(Widget* parent) -> shared_ptr<NumericInput<float>>
|
||||
{
|
||||
return make_unique<NumericInputImpl<float>>(parent);
|
||||
return make_shared<NumericInputImpl<float>>(parent);
|
||||
}
|
||||
|
||||
auto create_scrollable_area(Widget* parent) -> unique_ptr<ScrollableArea>
|
||||
auto create_scrollable_area(Widget* parent) -> shared_ptr<ScrollableArea>
|
||||
{
|
||||
return make_unique<ScrollableAreaImpl>(parent);
|
||||
return make_shared<ScrollableAreaImpl>(parent);
|
||||
}
|
||||
|
||||
auto create_scrollbar(Widget* parent) -> unique_ptr<ScrollBar>
|
||||
auto create_scrollbar(Widget* parent) -> shared_ptr<ScrollBar>
|
||||
{
|
||||
return make_unique<ScrollBarImpl>(parent);
|
||||
return make_shared<ScrollBarImpl>(parent);
|
||||
}
|
||||
|
||||
auto create_input_int(Widget* parent) -> unique_ptr<NumericInput<int>>
|
||||
auto create_input_int(Widget* parent) -> shared_ptr<NumericInput<int>>
|
||||
{
|
||||
return make_unique<NumericInputImpl<int>>(parent);
|
||||
return make_shared<NumericInputImpl<int>>(parent);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue