UI: rich_image_view use loop instead of calling reshape & region_changed directly

This commit is contained in:
Nikita Lisitsa 2021-03-05 12:29:31 +03:00
parent 3c4e1f99df
commit 49b58f76c5
2 changed files with 15 additions and 4 deletions

View file

@ -53,6 +53,8 @@ namespace psemek::ui
bool mouseover_ = false;
std::optional<geom::point<int, 2>> mouse_;
std::optional<geom::point<int, 2>> drag_;
void post_region_changed();
};
}

View file

@ -8,8 +8,7 @@ namespace psemek::ui
void rich_image_view::set_image(std::shared_ptr<gfx::texture_2d> image)
{
image_ = std::move(image);
element::reshape();
on_region_changed();
post_reshape();
}
void rich_image_view::set_zoom_range(geom::interval<float> range)
@ -35,7 +34,7 @@ namespace psemek::ui
center_ = geom::clamp(center_, b);
}
on_region_changed();
post_region_changed();
}
void rich_image_view::set_zoom(float zoom)
@ -135,7 +134,7 @@ namespace psemek::ui
void rich_image_view::reshape(geom::box<float, 2> const & bbox)
{
shape_.box = bbox;
on_region_changed();
post_region_changed();
}
void rich_image_view::draw(painter & p) const
@ -171,4 +170,14 @@ namespace psemek::ui
}
}
void rich_image_view::post_region_changed()
{
auto weak_self = std::weak_ptr{std::dynamic_pointer_cast<rich_image_view>(shared_from_this())};
post([weak_self]{
auto self = weak_self.lock();
if (!self) return;
self->on_region_changed();
});
}
}