1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 12:17:44 +00:00

PixelPaint: Reference-count filters

For multi-threading filter application, shared ownership is much easier
to work with.
This commit is contained in:
kleines Filmröllchen 2022-08-13 13:02:22 +02:00 committed by Sam Atkins
parent 5f76ab9836
commit 056b081e2d
3 changed files with 4 additions and 4 deletions

View file

@ -32,7 +32,7 @@ ErrorOr<NonnullRefPtr<GUI::TreeViewModel>> create_filter_tree_model(ImageEditor*
auto filter_tree_model = GUI::TreeViewModel::create(); auto filter_tree_model = GUI::TreeViewModel::create();
auto add_filter_node = [&]<typename FilterType>(GUI::TreeViewModel::Node& node) { auto add_filter_node = [&]<typename FilterType>(GUI::TreeViewModel::Node& node) {
auto filter = adopt_own(*new FilterType(editor)); auto filter = make_ref_counted<FilterType>(editor);
(void)node.add_node<FilterNode>(filter->filter_name(), filter_icon, move(filter)); (void)node.add_node<FilterNode>(filter->filter_name(), filter_icon, move(filter));
}; };

View file

@ -16,7 +16,7 @@ namespace PixelPaint {
class FilterNode final : public GUI::TreeViewModel::Node { class FilterNode final : public GUI::TreeViewModel::Node {
public: public:
FilterNode(String text, Optional<GUI::Icon> icon, Node* parent_node, NonnullOwnPtr<Filter> filter) FilterNode(String text, Optional<GUI::Icon> icon, Node* parent_node, NonnullRefPtr<Filter> filter)
: Node(move(text), move(icon), parent_node) : Node(move(text), move(icon), parent_node)
, m_filter(move(filter)) , m_filter(move(filter))
{ {
@ -26,7 +26,7 @@ public:
Filter& filter() { return *m_filter; } Filter& filter() { return *m_filter; }
private: private:
NonnullOwnPtr<Filter> m_filter; NonnullRefPtr<Filter> m_filter;
}; };
ErrorOr<NonnullRefPtr<GUI::TreeViewModel>> create_filter_tree_model(ImageEditor*); ErrorOr<NonnullRefPtr<GUI::TreeViewModel>> create_filter_tree_model(ImageEditor*);

View file

@ -13,7 +13,7 @@
namespace PixelPaint { namespace PixelPaint {
class Filter { class Filter : public RefCounted<Filter> {
public: public:
virtual void apply() const; virtual void apply() const;
virtual void apply(Gfx::Bitmap& target_bitmap, Gfx::Bitmap const& source_bitmap) const = 0; virtual void apply(Gfx::Bitmap& target_bitmap, Gfx::Bitmap const& source_bitmap) const = 0;