1 #include <cppurses/system/events/move_event.hpp>
2 
3 #include <cppurses/painter/detail/screen_descriptor.hpp>
4 #include <cppurses/painter/detail/screen_mask.hpp>
5 #include <cppurses/painter/detail/screen_state.hpp>
6 #include <cppurses/system/event.hpp>
7 #include <cppurses/widget/point.hpp>
8 #include <cppurses/widget/widget.hpp>
9 
10 namespace cppurses {
11 
send() const12 bool Move_event::send() const {
13     if (receiver_.x() != new_position_.x || receiver_.y() != new_position_.y) {
14         receiver_.screen_state().optimize.moved = true;
15         // Create and set move_mask in receiver_.screen_state()
16         receiver_.screen_state().optimize.move_mask =
17             detail::Screen_mask(receiver_, detail::Screen_mask::Outer);
18         receiver_.screen_state()
19             .tiles.clear();  // TODO remove this once opt impl.
20         const Point old_position{receiver_.x(), receiver_.y()};
21         receiver_.set_x(new_position_.x);
22         receiver_.set_y(new_position_.y);
23         return receiver_.move_event(new_position_, old_position);
24     }
25     return true;
26 }
27 
filter_send(Widget & filter) const28 bool Move_event::filter_send(Widget& filter) const {
29     if (receiver_.x() != new_position_.x || receiver_.y() != new_position_.y) {
30         const Point old_position{receiver_.x(), receiver_.y()};
31         return filter.move_event_filter(receiver_, new_position_, old_position);
32     }
33     return true;
34 }
35 
36 }  // namespace cppurses
37