top_level_drawable: Implement copy and move constructors

This commit is contained in:
Tommy 2022-07-21 01:46:27 +12:00
parent afd6baa7cf
commit f6763be08b
3 changed files with 31 additions and 1 deletions

View file

@ -290,9 +290,10 @@ void raise_drawable(top_level_drawable* tld)
static void tidy_drawables()
{
// Remove all invalidated TLDs from the list.
DBG_DM << "tidying drawables";
DBG_DM << "tidying " << top_level_drawables_.size() << " drawables";
auto& vec = top_level_drawables_;
vec.erase(std::remove(vec.begin(), vec.end(), nullptr), vec.end());
DBG_DM << top_level_drawables_.size() << " after tidying";
}
} // namespace draw_manager

View file

@ -29,4 +29,26 @@ top_level_drawable::~top_level_drawable()
draw_manager::deregister_drawable(this);
}
top_level_drawable::top_level_drawable(const top_level_drawable&)
{
draw_manager::register_drawable(this);
}
top_level_drawable& top_level_drawable::operator=(const top_level_drawable&)
{
draw_manager::register_drawable(this);
return *this;
}
top_level_drawable::top_level_drawable(top_level_drawable&&)
{
draw_manager::register_drawable(this);
}
top_level_drawable& top_level_drawable::operator=(top_level_drawable&&)
{
draw_manager::register_drawable(this);
return *this;
}
} // namespace gui2

View file

@ -53,6 +53,13 @@ class top_level_drawable
protected:
top_level_drawable();
virtual ~top_level_drawable();
// These make sure the TLD is registered.
top_level_drawable(const top_level_drawable&);
top_level_drawable& operator=(const top_level_drawable&);
top_level_drawable(top_level_drawable&&);
top_level_drawable& operator=(top_level_drawable&&);
public:
/**
* Update state and any parameters that may effect layout, or any of