28 G_DEFINE_TYPE(FlPointerManager, fl_pointer_manager, G_TYPE_OBJECT);
33 FlutterPointerDeviceKind device_kind,
36 if (self->pointer_inside) {
39 self->pointer_inside =
TRUE;
41 g_autoptr(FlEngine) engine = FL_ENGINE(g_weak_ref_get(&self->engine));
42 if (engine ==
nullptr) {
48 y, device_kind, 0, 0, self->button_state);
52 FlPointerManager*
self = FL_POINTER_MANAGER(
object);
54 g_weak_ref_clear(&self->engine);
56 G_OBJECT_CLASS(fl_pointer_manager_parent_class)->dispose(
object);
67 FlPointerManager*
self =
68 FL_POINTER_MANAGER(g_object_new(fl_pointer_manager_get_type(),
nullptr));
70 self->view_id = view_id;
71 g_weak_ref_init(&self->engine, engine);
77 FlPointerManager*
self,
79 FlutterPointerDeviceKind device_kind,
83 g_return_val_if_fail(FL_IS_POINTER_MANAGER(
self), FALSE);
88 if ((self->button_state & button) != 0) {
92 int old_button_state =
self->button_state;
93 FlutterPointerPhase phase = kMove;
94 self->button_state ^= button;
95 phase = old_button_state == 0 ? kDown : kMove;
97 g_autoptr(FlEngine) engine = FL_ENGINE(g_weak_ref_get(&self->engine));
98 if (engine ==
nullptr) {
104 y, device_kind, 0, 0, self->button_state);
110 FlPointerManager*
self,
112 FlutterPointerDeviceKind device_kind,
116 g_return_val_if_fail(FL_IS_POINTER_MANAGER(
self), FALSE);
119 if ((self->button_state & button) == 0) {
123 FlutterPointerPhase phase = kMove;
124 self->button_state ^= button;
126 phase =
self->button_state == 0 ? kUp : kMove;
128 g_autoptr(FlEngine) engine = FL_ENGINE(g_weak_ref_get(&self->engine));
129 if (engine ==
nullptr) {
135 y, device_kind, 0, 0, self->button_state);
142 FlutterPointerDeviceKind device_kind,
145 g_return_val_if_fail(FL_IS_POINTER_MANAGER(
self), FALSE);
147 g_autoptr(FlEngine) engine = FL_ENGINE(g_weak_ref_get(&self->engine));
148 if (engine ==
nullptr) {
155 engine, self->view_id, self->button_state != 0 ? kMove : kHover,
164 FlutterPointerDeviceKind device_kind,
167 g_return_val_if_fail(FL_IS_POINTER_MANAGER(
self), FALSE);
169 g_autoptr(FlEngine) engine = FL_ENGINE(g_weak_ref_get(&self->engine));
170 if (engine ==
nullptr) {
181 FlutterPointerDeviceKind device_kind,
184 g_return_val_if_fail(FL_IS_POINTER_MANAGER(
self), FALSE);
186 g_autoptr(FlEngine) engine = FL_ENGINE(g_weak_ref_get(&self->engine));
187 if (engine ==
nullptr) {
194 if (self->pointer_inside && self->button_state == 0) {
197 x, y, device_kind, 0, 0,
199 self->pointer_inside = FALSE;