Flutter Engine
 
Loading...
Searching...
No Matches
fl_engine_private.h File Reference

Go to the source code of this file.

Typedefs

typedef gboolean(* FlEnginePlatformMessageHandler) (FlEngine *engine, const gchar *channel, GBytes *message, const FlutterPlatformMessageResponseHandle *response_handle, gpointer user_data)
 

Enumerations

enum  FlEngineError { FL_ENGINE_ERROR_FAILED }
 

Functions

GQuark fl_engine_error_quark (void) G_GNUC_CONST
 
FlEngine * fl_engine_new_with_binary_messenger (FlBinaryMessenger *binary_messenger)
 
FlutterRendererType fl_engine_get_renderer_type (FlEngine *engine)
 
FlOpenGLManager * fl_engine_get_opengl_manager (FlEngine *engine)
 
FlDisplayMonitor * fl_engine_get_display_monitor (FlEngine *engine)
 
gboolean fl_engine_start (FlEngine *engine, GError **error)
 
FlutterEngineProcTablefl_engine_get_embedder_api (FlEngine *engine)
 
void fl_engine_notify_display_update (FlEngine *engine, const FlutterEngineDisplay *displays, size_t displays_length)
 
void fl_engine_set_implicit_view (FlEngine *engine, FlRenderable *renderable)
 
FlutterViewId fl_engine_add_view (FlEngine *engine, FlRenderable *renderable, size_t width, size_t height, double pixel_ratio, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data)
 
gboolean fl_engine_add_view_finish (FlEngine *engine, GAsyncResult *result, GError **error)
 
FlRenderable * fl_engine_get_renderable (FlEngine *engine, FlutterViewId view_id)
 
void fl_engine_remove_view (FlEngine *engine, FlutterViewId view_id, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data)
 
gboolean fl_engine_remove_view_finish (FlEngine *engine, GAsyncResult *result, GError **error)
 
void fl_engine_set_platform_message_handler (FlEngine *engine, FlEnginePlatformMessageHandler handler, gpointer user_data, GDestroyNotify destroy_notify)
 
void fl_engine_send_window_metrics_event (FlEngine *engine, FlutterEngineDisplayId display_id, FlutterViewId view_id, size_t width, size_t height, double pixel_ratio)
 
void fl_engine_send_mouse_pointer_event (FlEngine *engine, FlutterViewId view_id, FlutterPointerPhase phase, size_t timestamp, double x, double y, FlutterPointerDeviceKind device_kind, double scroll_delta_x, double scroll_delta_y, int64_t buttons)
 
void fl_engine_send_touch_up_event (FlEngine *engine, FlutterViewId view_id, size_t timestamp, double x, double y, int32_t device)
 
void fl_engine_send_touch_down_event (FlEngine *engine, FlutterViewId view_id, size_t timestamp, double x, double y, int32_t device)
 
void fl_engine_send_touch_move_event (FlEngine *engine, FlutterViewId view_id, size_t timestamp, double x, double y, int32_t device)
 
void fl_engine_send_touch_add_event (FlEngine *engine, FlutterViewId view_id, size_t timestamp, double x, double y, int32_t device)
 
void fl_engine_send_touch_remove_event (FlEngine *engine, FlutterViewId view_id, size_t timestamp, double x, double y, int32_t device)
 
void fl_engine_send_pointer_pan_zoom_event (FlEngine *engine, FlutterViewId view_id, size_t timestamp, double x, double y, FlutterPointerPhase phase, double pan_x, double pan_y, double scale, double rotation)
 
void fl_engine_send_key_event (FlEngine *engine, const FlutterKeyEvent *event, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data)
 
gboolean fl_engine_send_key_event_finish (FlEngine *engine, GAsyncResult *result, gboolean *handled, GError **error)
 
void fl_engine_dispatch_semantics_action (FlEngine *engine, FlutterViewId view_id, uint64_t node_id, FlutterSemanticsAction action, GBytes *data)
 
gboolean fl_engine_send_platform_message_response (FlEngine *engine, const FlutterPlatformMessageResponseHandle *handle, GBytes *response, GError **error)
 
void fl_engine_send_platform_message (FlEngine *engine, const gchar *channel, GBytes *message, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data)
 
GBytes * fl_engine_send_platform_message_finish (FlEngine *engine, GAsyncResult *result, GError **error)
 
FlTaskRunner * fl_engine_get_task_runner (FlEngine *engine)
 
void fl_engine_execute_task (FlEngine *engine, FlutterTask *task)
 
gboolean fl_engine_mark_texture_frame_available (FlEngine *engine, int64_t texture_id)
 
gboolean fl_engine_register_external_texture (FlEngine *engine, int64_t texture_id)
 
gboolean fl_engine_unregister_external_texture (FlEngine *engine, int64_t texture_id)
 
void fl_engine_update_accessibility_features (FlEngine *engine, int32_t flags)
 
void fl_engine_request_app_exit (FlEngine *engine)
 
FlWindowingHandler * fl_engine_get_windowing_handler (FlEngine *engine)
 
FlKeyboardManager * fl_engine_get_keyboard_manager (FlEngine *engine)
 
FlTextInputHandler * fl_engine_get_text_input_handler (FlEngine *engine)
 
FlMouseCursorHandler * fl_engine_get_mouse_cursor_handler (FlEngine *engine)
 
FlEngine * fl_engine_for_id (int64_t handle)
 

Typedef Documentation

◆ FlEnginePlatformMessageHandler

typedef gboolean(* FlEnginePlatformMessageHandler) (FlEngine *engine, const gchar *channel, GBytes *message, const FlutterPlatformMessageResponseHandle *response_handle, gpointer user_data)

FlEnginePlatformMessageHandler: @engine: an #FlEngine. @channel: channel message received on. @message: message content received from Dart. @response_handle: a handle to respond to the message with. @user_data: (closure): data provided when registering this handler.

Function called when platform messages are received.

Returns: TRUE if message has been accepted.

Definition at line 47 of file fl_engine_private.h.

Enumeration Type Documentation

◆ FlEngineError

FlEngineError: Errors for #FlEngine objects to set on failures.

Enumerator
FL_ENGINE_ERROR_FAILED 

Definition at line 29 of file fl_engine_private.h.

29 {
FlEngineError
@ FL_ENGINE_ERROR_FAILED

Function Documentation

◆ fl_engine_add_view()

FlutterViewId fl_engine_add_view ( FlEngine *  engine,
FlRenderable *  renderable,
size_t  width,
size_t  height,
double  pixel_ratio,
GCancellable *  cancellable,
GAsyncReadyCallback  callback,
gpointer  user_data 
)

fl_engine_add_view: @engine: an #FlEngine. @renderable: the object that will render this view. @width: width of view in pixels. @height: height of view in pixels. @pixel_ratio: scale factor for view. @cancellable: (allow-none): a #GCancellable or NULL. @callback: (scope async): a #GAsyncReadyCallback to call when the view is added. @user_data: (closure): user data to pass to @callback.

Asynchronously add a new view. The returned view ID should not be used until this function completes.

Returns: the ID for the view.

Definition at line 892 of file fl_engine.cc.

899 {
900 g_return_val_if_fail(FL_IS_ENGINE(self), -1);
901
902 g_autoptr(GTask) task = g_task_new(self, cancellable, callback, user_data);
903
904 FlutterViewId view_id = self->next_view_id;
905 self->next_view_id++;
906
907 GWeakRef* ref = g_new(GWeakRef, 1);
908 g_weak_ref_init(ref, G_OBJECT(renderable));
909 g_hash_table_insert(self->renderables_by_view_id, GINT_TO_POINTER(view_id),
910 ref);
911
912 // We don't know which display this view will open on, so set to zero and this
913 // will be updated in a following FlutterWindowMetricsEvent
914 FlutterEngineDisplayId display_id = 0;
915
916 FlutterWindowMetricsEvent metrics = {};
917 metrics.struct_size = sizeof(FlutterWindowMetricsEvent);
918 metrics.width = width;
919 metrics.height = height;
920 metrics.pixel_ratio = pixel_ratio;
921 metrics.display_id = display_id;
922 metrics.view_id = view_id;
924 info.struct_size = sizeof(FlutterAddViewInfo);
925 info.view_id = view_id;
926 info.view_metrics = &metrics;
927 info.user_data = g_object_ref(task);
929 FlutterEngineResult result = self->embedder_api.AddView(self->engine, &info);
930 if (result != kSuccess) {
931 g_task_return_new_error(task, fl_engine_error_quark(),
932 FL_ENGINE_ERROR_FAILED, "AddView returned %d",
933 result);
934 // This would have been done in the callback, but that won't occur now.
935 g_object_unref(task);
936 }
937
938 return view_id;
939}
uint64_t FlutterEngineDisplayId
Definition embedder.h:1043
FlutterEngineResult
Definition embedder.h:72
@ kSuccess
Definition embedder.h:73
int64_t FlutterViewId
Definition embedder.h:386
g_autoptr(GMutexLocker) locker
static void view_added_cb(const FlutterAddViewResult *result)
Definition fl_engine.cc:171
GQuark fl_engine_error_quark(void) G_GNUC_CONST
g_hash_table_insert(self->handlers, g_strdup(channel), handler_new(handler, user_data, destroy_notify))
G_BEGIN_DECLS FlutterViewId view_id
FlutterDesktopBinaryReply callback
int32_t height
int32_t width
FlutterAddViewCallback add_view_callback
Definition embedder.h:1117
FlutterViewId view_id
The identifier for the view to add. This must be unique.
Definition embedder.h:1097
const FlutterWindowMetricsEvent * view_metrics
Definition embedder.h:1102
FlutterEngineDisplayId display_id
The identifier of the display the view is rendering on.
Definition embedder.h:1067
size_t struct_size
The size of this struct. Must be sizeof(FlutterWindowMetricsEvent).
Definition embedder.h:1047
size_t height
Physical height of the window.
Definition embedder.h:1051
int64_t view_id
The view that this event is describing.
Definition embedder.h:1069
double pixel_ratio
Scale factor for the physical screen.
Definition embedder.h:1053
size_t width
Physical width of the window.
Definition embedder.h:1049

References FlutterAddViewInfo::add_view_callback, callback, FlutterWindowMetricsEvent::display_id, FL_ENGINE_ERROR_FAILED, fl_engine_error_quark(), g_autoptr(), g_hash_table_insert(), height, FlutterWindowMetricsEvent::height, kSuccess, FlutterWindowMetricsEvent::pixel_ratio, self, FlutterWindowMetricsEvent::struct_size, FlutterAddViewInfo::struct_size, user_data, FlutterAddViewInfo::user_data, view_added_cb(), FlutterWindowMetricsEvent::view_id, FlutterAddViewInfo::view_id, view_id, FlutterAddViewInfo::view_metrics, width, and FlutterWindowMetricsEvent::width.

Referenced by fl_view_new_for_engine(), TEST(), TEST(), and TEST().

◆ fl_engine_add_view_finish()

gboolean fl_engine_add_view_finish ( FlEngine *  engine,
GAsyncResult *  result,
GError **  error 
)

fl_engine_add_view_finish: @engine: an #FlEngine.

Returns
: a #GAsyncResult. @error: (allow-none): #GError location to store the error occurring, or NULL to ignore.

Completes request started with fl_engine_add_view().

Returns: TRUE on success.

Definition at line 941 of file fl_engine.cc.

943 {
944 g_return_val_if_fail(FL_IS_ENGINE(self), FALSE);
945 return g_task_propagate_boolean(G_TASK(result), error);
946}
const uint8_t uint32_t uint32_t GError ** error

References error, and self.

Referenced by add_view_cb(), add_view_engine_error_cb(), add_view_error_cb(), and view_added_cb().

◆ fl_engine_dispatch_semantics_action()

void fl_engine_dispatch_semantics_action ( FlEngine *  engine,
FlutterViewId  view_id,
uint64_t  node_id,
FlutterSemanticsAction  action,
GBytes *  data 
)

fl_engine_dispatch_semantics_action: @engine: an #FlEngine. @view_id: the view that the event occured on. @node_id: the semantics action identifier. @action: the action being dispatched. @data: (allow-none): data associated with the action.

Definition at line 1400 of file fl_engine.cc.

1404 {
1405 g_return_if_fail(FL_IS_ENGINE(self));
1406
1407 if (self->engine == nullptr) {
1408 return;
1409 }
1410
1411 const uint8_t* action_data = nullptr;
1412 size_t action_data_length = 0;
1413 if (data != nullptr) {
1414 action_data = static_cast<const uint8_t*>(
1415 g_bytes_get_data(data, &action_data_length));
1416 }
1417
1420 info.view_id = view_id;
1421 info.node_id = node_id;
1422 info.action = action;
1423 info.data = action_data;
1424 info.data_length = action_data_length;
1425 if (self->embedder_api.SendSemanticsAction(self->engine, &info) != kSuccess) {
1426 g_warning("Failed to send semantics action");
1427 }
1428}
FlutterViewId view_id
The ID of the view that includes the node.
Definition embedder.h:2774
FlutterSemanticsAction action
The semantics action.
Definition embedder.h:2780
size_t data_length
The data length.
Definition embedder.h:2786
uint64_t node_id
The semantics node identifier.
Definition embedder.h:2777
const uint8_t * data
Data associated with the action.
Definition embedder.h:2783
std::shared_ptr< const fml::Mapping > data

References FlutterSendSemanticsActionInfo::action, action, data, FlutterSendSemanticsActionInfo::data, FlutterSendSemanticsActionInfo::data_length, kSuccess, FlutterSendSemanticsActionInfo::node_id, self, FlutterSendSemanticsActionInfo::struct_size, FlutterSendSemanticsActionInfo::view_id, and view_id.

Referenced by fl_accessible_node_perform_action_impl(), and TEST().

◆ fl_engine_error_quark()

◆ fl_engine_execute_task()

void fl_engine_execute_task ( FlEngine *  engine,
FlutterTask task 
)

fl_engine_execute_task: @engine: an #FlEngine. @task: a FlutterTask to execute.

Executes given Flutter task.

Definition at line 1462 of file fl_engine.cc.

1462 {
1463 g_return_if_fail(FL_IS_ENGINE(self));
1464 if (self->embedder_api.RunTask(self->engine, task) != kSuccess) {
1465 g_warning("Failed to run task");
1466 }
1467}

References kSuccess, and self.

Referenced by fl_task_runner_process_expired_tasks_locked().

◆ fl_engine_for_id()

FlEngine * fl_engine_for_id ( int64_t  handle)

fl_engine_for_id: @handle: an engine identifier obtained through PlatformDispatcher.instance.engineId.

Returns Flutter engine associated with the identifier. The identifier must be valid and for a running engine otherwise the behavior is undefined. Must be called from the main thread.

Returns: a #FlEngine or NULL.

Definition at line 691 of file fl_engine.cc.

691 {
692 void* engine = reinterpret_cast<void*>(id);
693 g_return_val_if_fail(FL_IS_ENGINE(engine), nullptr);
694 return FL_ENGINE(engine);
695}
FlutterEngine engine
Definition main.cc:84
const uintptr_t id

References engine, and id.

Referenced by TEST().

◆ fl_engine_get_display_monitor()

FlDisplayMonitor * fl_engine_get_display_monitor ( FlEngine *  engine)

fl_engine_get_display_monitor: @engine: an #FlEngine.

Gets the display monitor used by this engine.

Returns: an #FlDisplayMonitor.

Definition at line 721 of file fl_engine.cc.

721 {
722 g_return_val_if_fail(FL_IS_ENGINE(self), nullptr);
723 return self->display_monitor;
724}

References self.

Referenced by handle_geometry_changed(), and TEST().

◆ fl_engine_get_embedder_api()

FlutterEngineProcTable * fl_engine_get_embedder_api ( FlEngine *  engine)

fl_engine_get_embedder_api: @engine: an #FlEngine.

Gets the embedder API proc table, allowing modificiations for unit testing.

Returns: a mutable pointer to the embedder API proc table.

Definition at line 868 of file fl_engine.cc.

868 {
869 return &(self->embedder_api);
870}

References self.

Referenced by TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), and TEST().

◆ fl_engine_get_keyboard_manager()

FlKeyboardManager * fl_engine_get_keyboard_manager ( FlEngine *  engine)

fl_engine_get_keyboard_manager: @engine: an #FlEngine.

Gets the keyboard manager used by this engine.

Returns: an #FlKeyboardManager.

Definition at line 1499 of file fl_engine.cc.

1499 {
1500 g_return_val_if_fail(FL_IS_ENGINE(self), nullptr);
1501 return self->keyboard_manager;
1502}

References self.

Referenced by handle_key_event(), sync_modifier_if_needed(), and TEST().

◆ fl_engine_get_mouse_cursor_handler()

FlMouseCursorHandler * fl_engine_get_mouse_cursor_handler ( FlEngine *  engine)

fl_engine_get_mouse_cursor_handler: @engine: an #FlEngine.

Gets the mouse cursor handler used by this engine.

Returns: an #FlMouseCursorHandler.

Definition at line 1509 of file fl_engine.cc.

1509 {
1510 g_return_val_if_fail(FL_IS_ENGINE(self), nullptr);
1511 return self->mouse_cursor_handler;
1512}

References self.

Referenced by cursor_changed_cb(), fl_view_dispose(), setup_cursor(), and TEST().

◆ fl_engine_get_opengl_manager()

FlOpenGLManager * fl_engine_get_opengl_manager ( FlEngine *  engine)

fl_engine_get_opengl_manager: @engine: an #FlEngine.

Gets the OpenGL manager used by this engine.

Returns: an #FlOpenGLManager.

Definition at line 716 of file fl_engine.cc.

716 {
717 g_return_val_if_fail(FL_IS_ENGINE(self), nullptr);
718 return self->opengl_manager;
719}

References self.

Referenced by realize_cb(), and setup_opengl().

◆ fl_engine_get_renderable()

FlRenderable * fl_engine_get_renderable ( FlEngine *  engine,
FlutterViewId  view_id 
)

fl_engine_get_renderable: @engine: an #FlEngine. @view_id: ID to check.

Gets the renderable associated with the give view ID.

Returns: (transfer full): a reference to an #FlRenderable or NULL if none for this ID.

Definition at line 948 of file fl_engine.cc.

948 {
949 g_return_val_if_fail(FL_IS_ENGINE(self), nullptr);
950
951 GWeakRef* ref = static_cast<GWeakRef*>(g_hash_table_lookup(
952 self->renderables_by_view_id, GINT_TO_POINTER(view_id)));
953 return FL_RENDERABLE(g_weak_ref_get(ref));
954}

References self, and view_id.

◆ fl_engine_get_renderer_type()

FlutterRendererType fl_engine_get_renderer_type ( FlEngine *  engine)

fl_engine_get_renderer_type: @engine: an #FlEngine.

Gets the rendering type used by this engine.

Returns: type of rendering used.

Definition at line 711 of file fl_engine.cc.

711 {
712 g_return_val_if_fail(FL_IS_ENGINE(self), static_cast<FlutterRendererType>(0));
713 return self->renderer_type;
714}
FlutterRendererType
Definition embedder.h:79

References self.

Referenced by realize_cb().

◆ fl_engine_get_task_runner()

FlTaskRunner * fl_engine_get_task_runner ( FlEngine *  engine)

fl_engine_get_task_runner: @engine: an #FlEngine.

Returns
: a #FlTaskRunner.

Returns: task runner responsible for scheduling Flutter tasks.

Definition at line 1457 of file fl_engine.cc.

1457 {
1458 g_return_val_if_fail(FL_IS_ENGINE(self), nullptr);
1459 return self->task_runner;
1460}

References self.

Referenced by setup_opengl(), setup_software(), and TEST().

◆ fl_engine_get_text_input_handler()

FlTextInputHandler * fl_engine_get_text_input_handler ( FlEngine *  engine)

fl_engine_get_text_input_handler: @engine: an #FlEngine.

Gets the text input handler used by this engine.

Returns: an #FlTextInputHandler.

Definition at line 1504 of file fl_engine.cc.

1504 {
1505 g_return_val_if_fail(FL_IS_ENGINE(self), nullptr);
1506 return self->text_input_handler;
1507}

References self.

Referenced by fl_view_focus_in_event(), and handle_key_event().

◆ fl_engine_get_windowing_handler()

FlWindowingHandler * fl_engine_get_windowing_handler ( FlEngine *  engine)

fl_engine_get_windowing_handler: @engine: an #FlEngine.

Gets the windowing handler used by this engine.

Returns: an #FlWindowingHandler.

Definition at line 1494 of file fl_engine.cc.

1494 {
1495 g_return_val_if_fail(FL_IS_ENGINE(self), nullptr);
1496 return self->windowing_handler;
1497}

References self.

Referenced by fl_application_activate(), and TEST().

◆ fl_engine_mark_texture_frame_available()

gboolean fl_engine_mark_texture_frame_available ( FlEngine *  engine,
int64_t  texture_id 
)

fl_engine_mark_texture_frame_available: @engine: an #FlEngine. @texture_id: the identifier of the texture whose frame has been updated.

Tells the Flutter engine that a new texture frame is available for the given texture.

Returns: TRUE on success.

Definition at line 1430 of file fl_engine.cc.

1431 {
1432 g_return_val_if_fail(FL_IS_ENGINE(self), FALSE);
1433 return self->embedder_api.MarkExternalTextureFrameAvailable(
1434 self->engine, texture_id) == kSuccess;
1435}
int64_t texture_id

References kSuccess, self, and texture_id.

Referenced by mark_texture_frame_available().

◆ fl_engine_new_with_binary_messenger()

FlEngine * fl_engine_new_with_binary_messenger ( FlBinaryMessenger *  binary_messenger)

fl_engine_new_with_binary_messenger: @binary_messenger: an #FlBinaryMessenger.

Creates a new engine with a custom binary messenger. Used for testing.

Returns: a new #FlEngine.

Definition at line 701 of file fl_engine.cc.

702 {
703 g_autoptr(FlDartProject) project = fl_dart_project_new();
704 return fl_engine_new_full(project, binary_messenger);
705}
G_MODULE_EXPORT FlDartProject * fl_dart_project_new()
static FlEngine * fl_engine_new_full(FlDartProject *project, FlBinaryMessenger *binary_messenger)
Definition fl_engine.cc:654

References fl_dart_project_new(), fl_engine_new_full(), and g_autoptr().

Referenced by TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), and TEST().

◆ fl_engine_notify_display_update()

void fl_engine_notify_display_update ( FlEngine *  engine,
const FlutterEngineDisplay displays,
size_t  displays_length 
)

fl_engine_notify_display_update: @engine: an #FlEngine. @displays: displays present on the system. @displays_length: length of @displays.

Notify the current displays that are in the system.

Definition at line 872 of file fl_engine.cc.

874 {
875 g_return_if_fail(FL_IS_ENGINE(self));
876
877 FlutterEngineResult result = self->embedder_api.NotifyDisplayUpdate(
879 displays_length);
880 if (result != kSuccess) {
881 g_warning("Failed to notify display update to Flutter engine: %d", result);
882 }
883}
@ kFlutterEngineDisplaysUpdateTypeStartup
Definition embedder.h:2324
std::vector< FlutterEngineDisplay > * displays

References displays, kFlutterEngineDisplaysUpdateTypeStartup, kSuccess, and self.

Referenced by notify_display_update(), and TEST().

◆ fl_engine_register_external_texture()

gboolean fl_engine_register_external_texture ( FlEngine *  engine,
int64_t  texture_id 
)

fl_engine_register_external_texture: @engine: an #FlEngine. @texture_id: the identifier of the texture that is available.

Tells the Flutter engine that a new external texture is available.

Returns: TRUE on success.

Definition at line 1437 of file fl_engine.cc.

1438 {
1439 g_return_val_if_fail(FL_IS_ENGINE(self), FALSE);
1440 return self->embedder_api.RegisterExternalTexture(self->engine, texture_id) ==
1441 kSuccess;
1442}

References kSuccess, self, and texture_id.

Referenced by register_texture().

◆ fl_engine_remove_view()

void fl_engine_remove_view ( FlEngine *  engine,
FlutterViewId  view_id,
GCancellable *  cancellable,
GAsyncReadyCallback  callback,
gpointer  user_data 
)

fl_engine_remove_view: @engine: an #FlEngine. @view_id: ID to remove. @cancellable: (allow-none): a #GCancellable or NULL. @callback: (scope async): a #GAsyncReadyCallback to call when the view is added. @user_data: (closure): user data to pass to @callback.

Removes a view previously added with fl_engine_add_view().

Definition at line 956 of file fl_engine.cc.

960 {
961 g_return_if_fail(FL_IS_ENGINE(self));
962
963 g_hash_table_remove(self->renderables_by_view_id, GINT_TO_POINTER(view_id));
964
965 g_autoptr(GTask) task = g_task_new(self, cancellable, callback, user_data);
966
968 info.struct_size = sizeof(FlutterRemoveViewInfo);
969 info.view_id = view_id;
970 info.user_data = g_object_ref(task);
972 FlutterEngineResult result =
973 self->embedder_api.RemoveView(self->engine, &info);
974 if (result != kSuccess) {
975 g_task_return_new_error(task, fl_engine_error_quark(),
976 FL_ENGINE_ERROR_FAILED, "RemoveView returned %d",
977 result);
978 // This would have been done in the callback, but that won't occur now.
979 g_object_unref(task);
980 }
981}
static void view_removed_cb(const FlutterRemoveViewResult *result)
Definition fl_engine.cc:182
FlutterRemoveViewCallback remove_view_callback
Definition embedder.h:1165
FlutterViewId view_id
Definition embedder.h:1148

References callback, FL_ENGINE_ERROR_FAILED, fl_engine_error_quark(), g_autoptr(), kSuccess, FlutterRemoveViewInfo::remove_view_callback, self, FlutterRemoveViewInfo::struct_size, user_data, FlutterRemoveViewInfo::user_data, FlutterRemoveViewInfo::view_id, view_id, and view_removed_cb().

Referenced by fl_view_dispose(), TEST(), TEST(), and TEST().

◆ fl_engine_remove_view_finish()

gboolean fl_engine_remove_view_finish ( FlEngine *  engine,
GAsyncResult *  result,
GError **  error 
)

fl_engine_remove_view_finish: @engine: an #FlEngine.

Returns
: a #GAsyncResult. @error: (allow-none): #GError location to store the error occurring, or NULL to ignore.

Completes request started with fl_engine_remove_view().

Returns: TRUE on succcess.

Definition at line 983 of file fl_engine.cc.

985 {
986 g_return_val_if_fail(FL_IS_ENGINE(self), FALSE);
987 return g_task_propagate_boolean(G_TASK(result), error);
988}

References error, and self.

Referenced by remove_view_cb(), remove_view_engine_error_cb(), and remove_view_error_cb().

◆ fl_engine_request_app_exit()

void fl_engine_request_app_exit ( FlEngine *  engine)

fl_engine_request_app_exit: @engine: an #FlEngine.

Request the application exits.

Definition at line 1489 of file fl_engine.cc.

1489 {
1490 g_return_if_fail(FL_IS_ENGINE(self));
1491 fl_platform_handler_request_app_exit(self->platform_handler);
1492}
void fl_platform_handler_request_app_exit(FlPlatformHandler *self)

References fl_platform_handler_request_app_exit(), and self.

Referenced by window_delete_event_cb().

◆ fl_engine_send_key_event()

void fl_engine_send_key_event ( FlEngine *  engine,
const FlutterKeyEvent event,
GCancellable *  cancellable,
GAsyncReadyCallback  callback,
gpointer  user_data 
)

fl_engine_send_key_event: @engine: an #FlEngine. @event: key event to send. @cancellable: (allow-none): a #GCancellable or NULL. @callback: (scope async): a #GAsyncReadyCallback to call when the request is satisfied. @user_data: (closure): user data to pass to @callback.

Send a key event to the engine.

Definition at line 1360 of file fl_engine.cc.

1364 {
1365 g_return_if_fail(FL_IS_ENGINE(self));
1366
1367 g_autoptr(GTask) task = g_task_new(self, cancellable, callback, user_data);
1368
1369 if (self->engine == nullptr) {
1370 g_task_return_new_error(task, fl_engine_error_quark(),
1371 FL_ENGINE_ERROR_FAILED, "No engine");
1372 return;
1373 }
1374
1375 if (self->embedder_api.SendKeyEvent(self->engine, event, send_key_event_cb,
1376 g_object_ref(task)) != kSuccess) {
1377 g_task_return_new_error(task, fl_engine_error_quark(),
1378 FL_ENGINE_ERROR_FAILED, "Failed to send key event");
1379 g_object_unref(task);
1380 }
1381}
static void send_key_event_cb(bool handled, void *user_data)

References callback, FL_ENGINE_ERROR_FAILED, fl_engine_error_quark(), g_autoptr(), kSuccess, self, send_key_event_cb(), and user_data.

Referenced by fl_key_embedder_responder_handle_event(), fl_key_embedder_responder_handle_event_impl(), synthesize_simple_event(), TEST(), TEST(), and TEST().

◆ fl_engine_send_key_event_finish()

gboolean fl_engine_send_key_event_finish ( FlEngine *  engine,
GAsyncResult *  result,
gboolean *  handled,
GError **  error 
)

fl_engine_send_key_event_finish: @engine: an #FlEngine.

Returns
: a #GAsyncResult. @handled: location to write if this event was handled by the engine. @error: (allow-none): #GError location to store the error occurring, or NULL to ignore.

Completes request started with fl_engine_send_key_event().

Returns: TRUE on success.

Definition at line 1383 of file fl_engine.cc.

1386 {
1387 g_return_val_if_fail(FL_IS_ENGINE(self), FALSE);
1388 g_return_val_if_fail(g_task_is_valid(result, self), FALSE);
1389
1390 g_autofree gboolean* return_value =
1391 static_cast<gboolean*>(g_task_propagate_pointer(G_TASK(result), error));
1392 if (return_value == nullptr) {
1393 return FALSE;
1394 }
1395
1396 *handled = *return_value;
1397 return TRUE;
1398}
return TRUE

References error, self, and TRUE.

Referenced by TEST(), TEST(), and TEST().

◆ fl_engine_send_mouse_pointer_event()

void fl_engine_send_mouse_pointer_event ( FlEngine *  engine,
FlutterViewId  view_id,
FlutterPointerPhase  phase,
size_t  timestamp,
double  x,
double  y,
FlutterPointerDeviceKind  device_kind,
double  scroll_delta_x,
double  scroll_delta_y,
int64_t  buttons 
)

fl_engine_send_mouse_pointer_event: @engine: an #FlEngine. @view_id: the view that the event occured on. @phase: mouse phase. @timestamp: time when event occurred in microseconds. @x: x location of mouse cursor. @y: y location of mouse cursor. @device_kind: kind of pointing device. @scroll_delta_x: x offset of scroll. @scroll_delta_y: y offset of scroll. @buttons: buttons that are pressed.

Sends a mouse pointer event to the engine.

Definition at line 1136 of file fl_engine.cc.

1145 {
1146 g_return_if_fail(FL_IS_ENGINE(self));
1147
1148 if (self->engine == nullptr) {
1149 return;
1150 }
1151
1152 FlutterPointerEvent fl_event = {};
1153 fl_event.struct_size = sizeof(fl_event);
1154 fl_event.phase = phase;
1155 fl_event.timestamp = timestamp;
1156 fl_event.x = x;
1157 fl_event.y = y;
1158 if (scroll_delta_x != 0 || scroll_delta_y != 0) {
1160 }
1161 fl_event.scroll_delta_x = scroll_delta_x;
1162 fl_event.scroll_delta_y = scroll_delta_y;
1163 fl_event.device_kind = device_kind;
1164 fl_event.buttons = buttons;
1165 fl_event.device = kMousePointerDeviceId;
1166 fl_event.view_id = view_id;
1167 if (self->embedder_api.SendPointerEvent(self->engine, &fl_event, 1) !=
1168 kSuccess) {
1169 g_warning("Failed to send pointer event");
1170 }
1171}
int32_t x
@ kFlutterPointerSignalKindScroll
Definition embedder.h:1301
static constexpr int32_t kMousePointerDeviceId
Definition fl_engine.cc:36
double y
double scroll_delta_y
The y offset of the scroll in physical pixels.
Definition embedder.h:1325
int64_t buttons
The buttons currently pressed, if any.
Definition embedder.h:1333
size_t struct_size
The size of this struct. Must be sizeof(FlutterPointerEvent).
Definition embedder.h:1308
FlutterViewId view_id
The identifier of the view that received the pointer event.
Definition embedder.h:1343
FlutterPointerSignalKind signal_kind
Definition embedder.h:1321
double scroll_delta_x
The x offset of the scroll in physical pixels.
Definition embedder.h:1323
double y
The y coordinate of the pointer event in physical pixels.
Definition embedder.h:1317
double x
The x coordinate of the pointer event in physical pixels.
Definition embedder.h:1315
FlutterPointerDeviceKind device_kind
Definition embedder.h:1331
FlutterPointerPhase phase
Definition embedder.h:1309

References FlutterPointerEvent::buttons, FlutterPointerEvent::device, FlutterPointerEvent::device_kind, kFlutterPointerSignalKindScroll, kMousePointerDeviceId, kSuccess, FlutterPointerEvent::phase, FlutterPointerEvent::scroll_delta_x, FlutterPointerEvent::scroll_delta_y, self, FlutterPointerEvent::signal_kind, FlutterPointerEvent::struct_size, FlutterPointerEvent::timestamp, FlutterPointerEvent::view_id, view_id, x, FlutterPointerEvent::x, FlutterPointerEvent::y, and y.

Referenced by ensure_pointer_added(), fl_pointer_manager_handle_button_press(), fl_pointer_manager_handle_button_release(), fl_pointer_manager_handle_leave(), fl_pointer_manager_handle_motion(), fl_scrolling_manager_handle_scroll_event(), and TEST().

◆ fl_engine_send_platform_message()

void fl_engine_send_platform_message ( FlEngine *  engine,
const gchar *  channel,
GBytes *  message,
GCancellable *  cancellable,
GAsyncReadyCallback  callback,
gpointer  user_data 
)

fl_engine_send_platform_message: @engine: an #FlEngine. @channel: channel to send to. @message: (allow-none): message buffer to send or NULL for an empty message @cancellable: (allow-none): a #GCancellable or NULL. @callback: (scope async): a #GAsyncReadyCallback to call when the request is satisfied. @user_data: (closure): user data to pass to @callback.

Asynchronously sends a platform message.

Definition at line 1041 of file fl_engine.cc.

1046 {
1047 g_return_if_fail(FL_IS_ENGINE(self));
1048
1049 GTask* task = nullptr;
1050 FlutterPlatformMessageResponseHandle* response_handle = nullptr;
1051 if (callback != nullptr) {
1052 task = g_task_new(self, cancellable, callback, user_data);
1053
1054 if (self->engine == nullptr) {
1055 g_task_return_new_error(task, fl_engine_error_quark(),
1056 FL_ENGINE_ERROR_FAILED, "No engine to send to");
1057 return;
1058 }
1059
1060 FlutterEngineResult result =
1061 self->embedder_api.PlatformMessageCreateResponseHandle(
1063 &response_handle);
1064 if (result != kSuccess) {
1065 g_task_return_new_error(task, fl_engine_error_quark(),
1067 "Failed to create response handle");
1068 g_object_unref(task);
1069 return;
1070 }
1071 } else if (self->engine == nullptr) {
1072 return;
1073 }
1074
1075 FlutterPlatformMessage fl_message = {};
1076 fl_message.struct_size = sizeof(fl_message);
1077 fl_message.channel = channel;
1078 fl_message.message =
1079 message != nullptr
1080 ? static_cast<const uint8_t*>(g_bytes_get_data(message, nullptr))
1081 : nullptr;
1082 fl_message.message_size = message != nullptr ? g_bytes_get_size(message) : 0;
1083 fl_message.response_handle = response_handle;
1084 FlutterEngineResult result =
1085 self->embedder_api.SendPlatformMessage(self->engine, &fl_message);
1086
1087 if (result != kSuccess && task != nullptr) {
1088 g_task_return_new_error(task, fl_engine_error_quark(),
1090 "Failed to send platform messages");
1091 g_object_unref(task);
1092 }
1093
1094 if (response_handle != nullptr) {
1095 if (self->embedder_api.PlatformMessageReleaseResponseHandle(
1096 self->engine, response_handle) != kSuccess) {
1097 g_warning("Failed to release response handle");
1098 }
1099 }
1100}
static void fl_engine_platform_message_response_cb(const uint8_t *data, size_t data_length, void *user_data)
Definition fl_engine.cc:524
const gchar * channel
G_BEGIN_DECLS GBytes * message
size_t struct_size
The size of this struct. Must be sizeof(FlutterPlatformMessage).
Definition embedder.h:1436
const FlutterPlatformMessageResponseHandle * response_handle
Definition embedder.h:1446
const char * channel
Definition embedder.h:1437
const uint8_t * message
Definition embedder.h:1438

References callback, FlutterPlatformMessage::channel, channel, FL_ENGINE_ERROR_FAILED, fl_engine_error_quark(), fl_engine_platform_message_response_cb(), kSuccess, FlutterPlatformMessage::message, message, FlutterPlatformMessage::message_size, FlutterPlatformMessage::response_handle, self, FlutterPlatformMessage::struct_size, and user_data.

Referenced by send_on_channel(), and TEST().

◆ fl_engine_send_platform_message_finish()

GBytes * fl_engine_send_platform_message_finish ( FlEngine *  engine,
GAsyncResult *  result,
GError **  error 
)

fl_engine_send_platform_message_finish: @engine: an #FlEngine.

Returns
: a #GAsyncResult. @error: (allow-none): #GError location to store the error occurring, or NULL to ignore.

Completes request started with fl_engine_send_platform_message().

Returns: message response on success or NULL on error.

Definition at line 1102 of file fl_engine.cc.

1104 {
1105 g_return_val_if_fail(FL_IS_ENGINE(self), FALSE);
1106 g_return_val_if_fail(g_task_is_valid(result, self), FALSE);
1107
1108 return static_cast<GBytes*>(g_task_propagate_pointer(G_TASK(result), error));
1109}

References error, and self.

Referenced by send_on_channel_finish().

◆ fl_engine_send_platform_message_response()

gboolean fl_engine_send_platform_message_response ( FlEngine *  engine,
const FlutterPlatformMessageResponseHandle handle,
GBytes *  response,
GError **  error 
)

fl_engine_send_platform_message_response: @engine: an #FlEngine. @handle: handle that was provided in FlEnginePlatformMessageHandler. @response: (allow-none): response to send or NULL for an empty response. @error: (allow-none): #GError location to store the error occurring, or NULL to ignore.

Responds to a platform message.

Returns: TRUE on success.

Definition at line 1009 of file fl_engine.cc.

1013 {
1014 g_return_val_if_fail(FL_IS_ENGINE(self), FALSE);
1015 g_return_val_if_fail(handle != nullptr, FALSE);
1016
1017 if (self->engine == nullptr) {
1019 "No engine to send response to");
1020 return FALSE;
1021 }
1022
1023 gsize data_length = 0;
1024 const uint8_t* data = nullptr;
1025 if (response != nullptr) {
1026 data =
1027 static_cast<const uint8_t*>(g_bytes_get_data(response, &data_length));
1028 }
1029 FlutterEngineResult result = self->embedder_api.SendPlatformMessageResponse(
1030 self->engine, handle, data, data_length);
1031
1032 if (result != kSuccess) {
1034 "Failed to send platform message response");
1035 return FALSE;
1036 }
1037
1038 return TRUE;
1039}

References data, error, FL_ENGINE_ERROR_FAILED, fl_engine_error_quark(), kSuccess, self, and TRUE.

Referenced by fl_engine_platform_message_cb(), send_response(), and TEST().

◆ fl_engine_send_pointer_pan_zoom_event()

void fl_engine_send_pointer_pan_zoom_event ( FlEngine *  engine,
FlutterViewId  view_id,
size_t  timestamp,
double  x,
double  y,
FlutterPointerPhase  phase,
double  pan_x,
double  pan_y,
double  scale,
double  rotation 
)

fl_engine_send_pointer_pan_zoom_event: @engine: an #FlEngine. @view_id: the view that the event occured on. @timestamp: time when event occurred in microseconds. @x: x location of mouse cursor. @y: y location of mouse cursor. @phase: mouse phase. @pan_x: x offset of the pan/zoom in pixels. @pan_y: y offset of the pan/zoom in pixels. @scale: scale of the pan/zoom. @rotation: rotation of the pan/zoom in radians.

Sends a pan/zoom pointer event to the engine.

Definition at line 1318 of file fl_engine.cc.

1327 {
1328 g_return_if_fail(FL_IS_ENGINE(self));
1329
1330 if (self->engine == nullptr) {
1331 return;
1332 }
1333
1334 FlutterPointerEvent fl_event = {};
1335 fl_event.struct_size = sizeof(fl_event);
1336 fl_event.timestamp = timestamp;
1337 fl_event.x = x;
1338 fl_event.y = y;
1339 fl_event.phase = phase;
1340 fl_event.pan_x = pan_x;
1341 fl_event.pan_y = pan_y;
1342 fl_event.scale = scale;
1343 fl_event.rotation = rotation;
1346 fl_event.view_id = view_id;
1347 if (self->embedder_api.SendPointerEvent(self->engine, &fl_event, 1) !=
1348 kSuccess) {
1349 g_warning("Failed to send pointer event");
1350 }
1351}
@ kFlutterPointerDeviceKindTrackpad
Definition embedder.h:1283
static constexpr int32_t kPointerPanZoomDeviceId
Definition fl_engine.cc:37
double scale
The scale of the pan/zoom, where 1.0 is the initial scale.
Definition embedder.h:1339
double rotation
The rotation of the pan/zoom in radians, where 0.0 is the initial angle.
Definition embedder.h:1341
double pan_x
The x offset of the pan/zoom in physical pixels.
Definition embedder.h:1335
double pan_y
The y offset of the pan/zoom in physical pixels.
Definition embedder.h:1337

References FlutterPointerEvent::device, FlutterPointerEvent::device_kind, kFlutterPointerDeviceKindTrackpad, kPointerPanZoomDeviceId, kSuccess, FlutterPointerEvent::pan_x, FlutterPointerEvent::pan_y, FlutterPointerEvent::phase, FlutterPointerEvent::rotation, FlutterPointerEvent::scale, self, FlutterPointerEvent::struct_size, FlutterPointerEvent::timestamp, FlutterPointerEvent::view_id, view_id, x, FlutterPointerEvent::x, FlutterPointerEvent::y, and y.

Referenced by fl_scrolling_manager_handle_rotation_begin(), fl_scrolling_manager_handle_rotation_end(), fl_scrolling_manager_handle_rotation_update(), fl_scrolling_manager_handle_scroll_event(), fl_scrolling_manager_handle_zoom_begin(), fl_scrolling_manager_handle_zoom_end(), fl_scrolling_manager_handle_zoom_update(), and TEST().

◆ fl_engine_send_touch_add_event()

void fl_engine_send_touch_add_event ( FlEngine *  engine,
FlutterViewId  view_id,
size_t  timestamp,
double  x,
double  y,
int32_t  device 
)

fl_engine_send_touch_add_event: @engine: an #FlEngine. @view_id: the view that the event occured on. @timestamp: time when event occurred in microseconds. @x: x location of mouse cursor. @y: y location of mouse cursor. @device: device id.

Sends a touch add event to the engine.

Definition at line 1260 of file fl_engine.cc.

1265 {
1266 g_return_if_fail(FL_IS_ENGINE(self));
1267
1268 if (self->engine == nullptr) {
1269 return;
1270 }
1271
1272 FlutterPointerEvent event;
1273 event.timestamp = timestamp;
1274 event.x = x;
1275 event.y = y;
1276 event.device_kind = kFlutterPointerDeviceKindTouch;
1277 event.device = device;
1278 event.buttons = 0;
1279 event.view_id = view_id;
1280 event.phase = FlutterPointerPhase::kAdd;
1281 event.struct_size = sizeof(event);
1282
1283 if (self->embedder_api.SendPointerEvent(self->engine, &event, 1) !=
1284 kSuccess) {
1285 g_warning("Failed to send pointer event");
1286 }
1287}
@ kAdd
Definition embedder.h:1262
@ kFlutterPointerDeviceKindTouch
Definition embedder.h:1281
VkDevice device
Definition main.cc:69

References device, kAdd, kFlutterPointerDeviceKindTouch, kSuccess, self, FlutterPointerEvent::timestamp, view_id, x, and y.

Referenced by ensure_touch_added().

◆ fl_engine_send_touch_down_event()

void fl_engine_send_touch_down_event ( FlEngine *  engine,
FlutterViewId  view_id,
size_t  timestamp,
double  x,
double  y,
int32_t  device 
)

fl_engine_send_touch_down_event: @engine: an #FlEngine. @view_id: the view that the event occured on. @timestamp: time when event occurred in microseconds. @x: x location of mouse cursor. @y: y location of mouse cursor. @device: device id.

Sends a touch down event to the engine.

Definition at line 1202 of file fl_engine.cc.

1207 {
1208 g_return_if_fail(FL_IS_ENGINE(self));
1209
1210 if (self->engine == nullptr) {
1211 return;
1212 }
1213
1214 FlutterPointerEvent event;
1215 event.timestamp = timestamp;
1216 event.x = x;
1217 event.y = y;
1218 event.device_kind = kFlutterPointerDeviceKindTouch;
1219 event.device = device;
1221 event.view_id = view_id;
1222 event.phase = FlutterPointerPhase::kDown;
1223 event.struct_size = sizeof(event);
1224
1225 if (self->embedder_api.SendPointerEvent(self->engine, &event, 1) !=
1226 kSuccess) {
1227 g_warning("Failed to send pointer event");
1228 }
1229}
@ kDown
Definition embedder.h:1252
@ kFlutterPointerButtonMousePrimary
Definition embedder.h:1289

References device, kDown, kFlutterPointerButtonMousePrimary, kFlutterPointerDeviceKindTouch, kSuccess, self, FlutterPointerEvent::timestamp, view_id, x, and y.

Referenced by fl_touch_manager_handle_touch_event().

◆ fl_engine_send_touch_move_event()

void fl_engine_send_touch_move_event ( FlEngine *  engine,
FlutterViewId  view_id,
size_t  timestamp,
double  x,
double  y,
int32_t  device 
)

fl_engine_send_touch_move_event: @engine: an #FlEngine. @view_id: the view that the event occured on. @timestamp: time when event occurred in microseconds. @x: x location of mouse cursor. @y: y location of mouse cursor. @device: device id.

Sends a touch move event to the engine.

Definition at line 1231 of file fl_engine.cc.

1236 {
1237 g_return_if_fail(FL_IS_ENGINE(self));
1238
1239 if (self->engine == nullptr) {
1240 return;
1241 }
1242
1243 FlutterPointerEvent event;
1244 event.timestamp = timestamp;
1245 event.x = x;
1246 event.y = y;
1247 event.device_kind = kFlutterPointerDeviceKindTouch;
1248 event.device = device;
1250 event.view_id = view_id;
1251 event.phase = FlutterPointerPhase::kMove;
1252 event.struct_size = sizeof(event);
1253
1254 if (self->embedder_api.SendPointerEvent(self->engine, &event, 1) !=
1255 kSuccess) {
1256 g_warning("Failed to send pointer event");
1257 }
1258}
@ kMove
Definition embedder.h:1257

References device, kFlutterPointerButtonMousePrimary, kFlutterPointerDeviceKindTouch, kMove, kSuccess, self, FlutterPointerEvent::timestamp, view_id, x, and y.

Referenced by fl_touch_manager_handle_touch_event().

◆ fl_engine_send_touch_remove_event()

void fl_engine_send_touch_remove_event ( FlEngine *  engine,
FlutterViewId  view_id,
size_t  timestamp,
double  x,
double  y,
int32_t  device 
)

fl_engine_send_touch_remove_event: @engine: an #FlEngine. @view_id: the view that the event occured on. @timestamp: time when event occurred in microseconds. @x: x location of mouse cursor. @y: y location of mouse cursor. @device: device id.

Sends a touch remove event to the engine.

Definition at line 1289 of file fl_engine.cc.

1294 {
1295 g_return_if_fail(FL_IS_ENGINE(self));
1296
1297 if (self->engine == nullptr) {
1298 return;
1299 }
1300
1301 FlutterPointerEvent event;
1302 event.timestamp = timestamp;
1303 event.x = x;
1304 event.y = y;
1305 event.device_kind = kFlutterPointerDeviceKindTouch;
1306 event.device = device;
1307 event.buttons = 0;
1308 event.view_id = view_id;
1309 event.phase = FlutterPointerPhase::kRemove;
1310 event.struct_size = sizeof(event);
1311
1312 if (self->embedder_api.SendPointerEvent(self->engine, &event, 1) !=
1313 kSuccess) {
1314 g_warning("Failed to send pointer event");
1315 }
1316}
@ kRemove
Definition embedder.h:1267

References device, kFlutterPointerDeviceKindTouch, kRemove, kSuccess, self, FlutterPointerEvent::timestamp, view_id, x, and y.

Referenced by fl_touch_manager_handle_touch_event().

◆ fl_engine_send_touch_up_event()

void fl_engine_send_touch_up_event ( FlEngine *  engine,
FlutterViewId  view_id,
size_t  timestamp,
double  x,
double  y,
int32_t  device 
)

fl_engine_send_touch_up_event: @engine: an #FlEngine. @view_id: the view that the event occured on. @timestamp: time when event occurred in microseconds. @x: x location of mouse cursor. @y: y location of mouse cursor. @device: device id.

Sends a touch up event to the engine.

Definition at line 1173 of file fl_engine.cc.

1178 {
1179 g_return_if_fail(FL_IS_ENGINE(self));
1180
1181 if (self->engine == nullptr) {
1182 return;
1183 }
1184
1185 FlutterPointerEvent event;
1186 event.timestamp = timestamp;
1187 event.x = x;
1188 event.y = y;
1189 event.device_kind = kFlutterPointerDeviceKindTouch;
1190 event.device = device;
1191 event.buttons = 0;
1192 event.view_id = view_id;
1193 event.phase = FlutterPointerPhase::kUp;
1194 event.struct_size = sizeof(event);
1195
1196 if (self->embedder_api.SendPointerEvent(self->engine, &event, 1) !=
1197 kSuccess) {
1198 g_warning("Failed to send pointer event");
1199 }
1200}
@ kUp
Definition embedder.h:1245

References device, kFlutterPointerDeviceKindTouch, kSuccess, kUp, self, FlutterPointerEvent::timestamp, view_id, x, and y.

Referenced by fl_touch_manager_handle_touch_event().

◆ fl_engine_send_window_metrics_event()

void fl_engine_send_window_metrics_event ( FlEngine *  engine,
FlutterEngineDisplayId  display_id,
FlutterViewId  view_id,
size_t  width,
size_t  height,
double  pixel_ratio 
)

fl_engine_send_window_metrics_event: @engine: an #FlEngine. @display_id: the display this view is rendering on. @view_id: the view that the event occured on. @width: width of the window in pixels. @height: height of the window in pixels. @pixel_ratio: scale factor for window.

Sends a window metrics event to the engine.

Definition at line 1111 of file fl_engine.cc.

1116 {
1117 g_return_if_fail(FL_IS_ENGINE(self));
1118
1119 if (self->engine == nullptr) {
1120 return;
1121 }
1122
1123 FlutterWindowMetricsEvent event = {};
1124 event.struct_size = sizeof(FlutterWindowMetricsEvent);
1125 event.width = width;
1126 event.height = height;
1127 event.pixel_ratio = pixel_ratio;
1128 event.display_id = display_id;
1129 event.view_id = view_id;
1130 if (self->embedder_api.SendWindowMetricsEvent(self->engine, &event) !=
1131 kSuccess) {
1132 g_warning("Failed to send window metrics");
1133 }
1134}

References height, kSuccess, self, FlutterWindowMetricsEvent::struct_size, view_id, and width.

Referenced by handle_geometry_changed(), and TEST().

◆ fl_engine_set_implicit_view()

void fl_engine_set_implicit_view ( FlEngine *  engine,
FlRenderable *  renderable 
)

fl_engine_set_implicit_view: @engine: an #FlEngine. @renderable: the object that will render the implicit view.

Sets the object to render the implicit view.

Definition at line 885 of file fl_engine.cc.

885 {
886 GWeakRef* ref = g_new(GWeakRef, 1);
887 g_weak_ref_init(ref, G_OBJECT(renderable));
888 g_hash_table_insert(self->renderables_by_view_id,
889 GINT_TO_POINTER(flutter::kFlutterImplicitViewId), ref);
890}
constexpr int64_t kFlutterImplicitViewId
Definition constants.h:35

References g_hash_table_insert(), flutter::kFlutterImplicitViewId, and self.

Referenced by fl_view_new(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), and TEST().

◆ fl_engine_set_platform_message_handler()

void fl_engine_set_platform_message_handler ( FlEngine *  engine,
FlEnginePlatformMessageHandler  handler,
gpointer  user_data,
GDestroyNotify  destroy_notify 
)

fl_engine_set_platform_message_handler: @engine: an #FlEngine. @handler: function to call when a platform message is received. @user_data: (closure): user data to pass to @handler. @destroy_notify: (allow-none): a function which gets called to free @user_data, or NULL.

Registers the function called when a platform message is received. Call fl_engine_send_platform_message_response() with the response to this message. Ownership of FlutterPlatformMessageResponseHandle is transferred to the caller, and the message must be responded to avoid memory leaks.

Definition at line 990 of file fl_engine.cc.

994 {
995 g_return_if_fail(FL_IS_ENGINE(self));
996 g_return_if_fail(handler != nullptr);
997
998 if (self->platform_message_handler_destroy_notify) {
999 self->platform_message_handler_destroy_notify(
1000 self->platform_message_handler_data);
1001 }
1002
1003 self->platform_message_handler = handler;
1004 self->platform_message_handler_data = user_data;
1005 self->platform_message_handler_destroy_notify = destroy_notify;
1006}
const gchar FlBinaryMessengerMessageHandler gpointer GDestroyNotify destroy_notify
const gchar FlBinaryMessengerMessageHandler handler

References destroy_notify, handler, self, and user_data.

Referenced by fl_binary_messenger_new().

◆ fl_engine_start()

gboolean fl_engine_start ( FlEngine *  engine,
GError **  error 
)

fl_engine_start: @engine: an #FlEngine. @error: (allow-none): #GError location to store the error occurring, or NULL to ignore.

Starts the Flutter engine.

Returns: TRUE on success.

Definition at line 726 of file fl_engine.cc.

726 {
727 g_return_val_if_fail(FL_IS_ENGINE(self), FALSE);
728
729 FlutterRendererConfig config = {};
730 config.type = self->renderer_type;
731 switch (config.type) {
732 case kSoftware:
734 // No action required, as this is handled in
735 // compositor_present_view_callback.
737 [](void* user_data, const void* allocation, size_t row_bytes,
738 size_t height) { return true; };
739 break;
740 case kOpenGL:
746 // No action required, as this is handled in
747 // compositor_present_view_callback.
748 config.open_gl.present = [](void* user_data) { return true; };
752 break;
753 case kMetal:
754 case kVulkan:
755 default:
757 "Unsupported renderer type");
758 return FALSE;
759 }
760
761 FlutterTaskRunnerDescription platform_task_runner = {};
762 platform_task_runner.struct_size = sizeof(FlutterTaskRunnerDescription);
763 platform_task_runner.user_data = self;
764 platform_task_runner.runs_task_on_current_thread_callback =
766 platform_task_runner.post_task_callback = fl_engine_post_task;
767 platform_task_runner.identifier = kPlatformTaskRunnerIdentifier;
768
769 FlutterCustomTaskRunners custom_task_runners = {};
770 custom_task_runners.struct_size = sizeof(FlutterCustomTaskRunners);
771 custom_task_runners.platform_task_runner = &platform_task_runner;
772
773 switch (fl_dart_project_get_ui_thread_policy(self->project)) {
775 break;
778 custom_task_runners.ui_task_runner = &platform_task_runner;
779 break;
780 }
781
782 g_autoptr(GPtrArray) command_line_args =
783 g_ptr_array_new_with_free_func(g_free);
784 g_ptr_array_insert(command_line_args, 0, g_strdup("flutter"));
785 for (const auto& env_switch : flutter::GetSwitchesFromEnvironment()) {
786 g_ptr_array_add(command_line_args, g_strdup(env_switch.c_str()));
787 }
788
789 gchar** dart_entrypoint_args =
791
794 args.assets_path = fl_dart_project_get_assets_path(self->project);
795 args.icu_data_path = fl_dart_project_get_icu_data_path(self->project);
796 args.command_line_argc = command_line_args->len;
797 args.command_line_argv =
798 reinterpret_cast<const char* const*>(command_line_args->pdata);
799 args.platform_message_callback = fl_engine_platform_message_cb;
800 args.update_semantics_callback2 = fl_engine_update_semantics_cb;
801 args.custom_task_runners = &custom_task_runners;
802 args.shutdown_dart_vm_when_done = true;
803 args.on_pre_engine_restart_callback = fl_engine_on_pre_engine_restart_cb;
804 args.dart_entrypoint_argc =
805 dart_entrypoint_args != nullptr ? g_strv_length(dart_entrypoint_args) : 0;
806 args.dart_entrypoint_argv =
807 reinterpret_cast<const char* const*>(dart_entrypoint_args);
808 args.engine_id = reinterpret_cast<int64_t>(self);
809
810 FlutterCompositor compositor = {};
811 compositor.struct_size = sizeof(FlutterCompositor);
812 compositor.user_data = self;
818 args.compositor = &compositor;
819
820 if (self->embedder_api.RunsAOTCompiledDartCode()) {
821 FlutterEngineAOTDataSource source = {};
824 if (self->embedder_api.CreateAOTData(&source, &self->aot_data) !=
825 kSuccess) {
827 "Failed to create AOT data");
828 return FALSE;
829 }
830 args.aot_data = self->aot_data;
831 }
832
833 FlutterEngineResult result = self->embedder_api.Initialize(
834 FLUTTER_ENGINE_VERSION, &config, &args, self, &self->engine);
835 if (result != kSuccess) {
837 "Failed to initialize Flutter engine");
838 return FALSE;
839 }
840
841 result = self->embedder_api.RunInitialized(self->engine);
842 if (result != kSuccess) {
844 "Failed to run Flutter engine");
845 return FALSE;
846 }
847
849
850 g_autoptr(FlSettings) settings = fl_settings_new();
851 self->settings_handler = fl_settings_handler_new(self);
852 fl_settings_handler_start(self->settings_handler, settings);
853
854 self->platform_handler = fl_platform_handler_new(self->binary_messenger);
855
857
858 result = self->embedder_api.UpdateSemanticsEnabled(self->engine, TRUE);
859 if (result != kSuccess) {
860 g_warning("Failed to enable accessibility features on Flutter engine");
861 }
862
863 fl_display_monitor_start(self->display_monitor);
864
865 return TRUE;
866}
@ kFlutterEngineAOTDataSourceTypeElfPath
Definition embedder.h:2428
@ kVulkan
Definition embedder.h:86
@ kOpenGL
Definition embedder.h:80
@ kMetal
Definition embedder.h:85
@ kSoftware
Definition embedder.h:81
#define FLUTTER_ENGINE_VERSION
Definition embedder.h:70
G_MODULE_EXPORT const gchar * fl_dart_project_get_assets_path(FlDartProject *self)
G_MODULE_EXPORT const gchar * fl_dart_project_get_aot_library_path(FlDartProject *self)
G_MODULE_EXPORT const gchar * fl_dart_project_get_icu_data_path(FlDartProject *self)
G_MODULE_EXPORT gchar ** fl_dart_project_get_dart_entrypoint_arguments(FlDartProject *self)
G_MODULE_EXPORT FlUIThreadPolicy fl_dart_project_get_ui_thread_policy(FlDartProject *project)
@ FL_UI_THREAD_POLICY_RUN_ON_PLATFORM_THREAD
@ FL_UI_THREAD_POLICY_RUN_ON_SEPARATE_THREAD
@ FL_UI_THREAD_POLICY_DEFAULT
void fl_display_monitor_start(FlDisplayMonitor *self)
static bool fl_engine_gl_external_texture_frame_callback(void *user_data, int64_t texture_id, size_t width, size_t height, FlutterOpenGLTexture *opengl_texture)
Definition fl_engine.cc:407
static bool fl_engine_runs_task_on_current_thread(void *user_data)
Definition fl_engine.cc:448
static void fl_engine_on_pre_engine_restart_cb(void *user_data)
Definition fl_engine.cc:514
static bool compositor_create_backing_store_callback(const FlutterBackingStoreConfig *config, FlutterBackingStore *backing_store_out, void *user_data)
Definition fl_engine.cc:331
static bool fl_engine_gl_make_current(void *user_data)
Definition fl_engine.cc:386
static void * fl_engine_gl_proc_resolver(void *user_data, const char *name)
Definition fl_engine.cc:382
static bool compositor_present_view_callback(const FlutterPresentViewInfo *info)
Definition fl_engine.cc:362
static bool compositor_collect_backing_store_callback(const FlutterBackingStore *backing_store, void *user_data)
Definition fl_engine.cc:347
static void fl_engine_post_task(FlutterTask task, uint64_t target_time_nanos, void *user_data)
Definition fl_engine.cc:454
static uint32_t fl_engine_gl_get_fbo(void *user_data)
Definition fl_engine.cc:396
static void setup_keyboard(FlEngine *self)
Definition fl_engine.cc:490
static void setup_locales(FlEngine *self)
Definition fl_engine.cc:200
static void fl_engine_update_semantics_cb(const FlutterSemanticsUpdate2 *update, void *user_data)
Definition fl_engine.cc:483
static bool fl_engine_gl_make_resource_current(void *user_data)
Definition fl_engine.cc:401
static void fl_engine_platform_message_cb(const FlutterPlatformMessage *message, void *user_data)
Definition fl_engine.cc:463
static constexpr size_t kPlatformTaskRunnerIdentifier
Definition fl_engine.cc:32
static bool fl_engine_gl_clear_current(void *user_data)
Definition fl_engine.cc:391
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
FlPlatformHandler * fl_platform_handler_new(FlBinaryMessenger *messenger)
FlSettings * fl_settings_new()
void fl_settings_handler_start(FlSettingsHandler *self, FlSettings *settings)
FlSettingsHandler * fl_settings_handler_new(FlEngine *engine)
std::vector< std::string > GetSwitchesFromEnvironment()
FlutterBackingStoreCreateCallback create_backing_store_callback
Definition embedder.h:2213
size_t struct_size
This size of this struct. Must be sizeof(FlutterCompositor).
Definition embedder.h:2197
FlutterPresentViewCallback present_view_callback
Definition embedder.h:2250
FlutterBackingStoreCollectCallback collect_backing_store_callback
Definition embedder.h:2218
const FlutterTaskRunnerDescription * ui_task_runner
Definition embedder.h:1908
const FlutterTaskRunnerDescription * platform_task_runner
Definition embedder.h:1896
size_t struct_size
The size of this struct. Must be sizeof(FlutterCustomTaskRunners).
Definition embedder.h:1891
FlutterEngineAOTDataSourceType type
Definition embedder.h:2434
const char * elf_path
Absolute path to an ELF library file.
Definition embedder.h:2437
ProcResolver gl_proc_resolver
Definition embedder.h:758
size_t struct_size
The size of this struct. Must be sizeof(FlutterOpenGLRendererConfig).
Definition embedder.h:719
TextureFrameCallback gl_external_texture_frame_callback
Definition embedder.h:763
BoolCallback make_resource_current
Definition embedder.h:741
size_t struct_size
The size of this struct. Must be sizeof(FlutterProjectArgs).
Definition embedder.h:2458
FlutterSoftwareRendererConfig software
Definition embedder.h:1034
FlutterOpenGLRendererConfig open_gl
Definition embedder.h:1033
FlutterRendererType type
Definition embedder.h:1031
size_t struct_size
The size of this struct. Must be sizeof(FlutterSoftwareRendererConfig).
Definition embedder.h:1022
SoftwareSurfacePresentCallback surface_present_callback
Definition embedder.h:1027
size_t struct_size
The size of this struct. Must be sizeof(FlutterTaskRunnerDescription).
Definition embedder.h:1864
BoolCallback runs_task_on_current_thread_callback
Definition embedder.h:1870
FlutterTaskRunnerPostTaskCallback post_task_callback
Definition embedder.h:1881

References args, FlutterOpenGLRendererConfig::clear_current, FlutterCompositor::collect_backing_store_callback, compositor_collect_backing_store_callback(), compositor_create_backing_store_callback(), compositor_present_view_callback(), FlutterCompositor::create_backing_store_callback, FlutterEngineAOTDataSource::elf_path, error, FlutterOpenGLRendererConfig::fbo_callback, fl_dart_project_get_aot_library_path(), fl_dart_project_get_assets_path(), fl_dart_project_get_dart_entrypoint_arguments(), fl_dart_project_get_icu_data_path(), fl_dart_project_get_ui_thread_policy(), fl_display_monitor_start(), FL_ENGINE_ERROR_FAILED, fl_engine_error_quark(), fl_engine_gl_clear_current(), fl_engine_gl_external_texture_frame_callback(), fl_engine_gl_get_fbo(), fl_engine_gl_make_current(), fl_engine_gl_make_resource_current(), fl_engine_gl_proc_resolver(), fl_engine_on_pre_engine_restart_cb(), fl_engine_platform_message_cb(), fl_engine_post_task(), fl_engine_runs_task_on_current_thread(), fl_engine_update_semantics_cb(), fl_platform_handler_new(), fl_settings_handler_new(), fl_settings_handler_start(), fl_settings_new(), FL_UI_THREAD_POLICY_DEFAULT, FL_UI_THREAD_POLICY_RUN_ON_PLATFORM_THREAD, FL_UI_THREAD_POLICY_RUN_ON_SEPARATE_THREAD, FLUTTER_ENGINE_VERSION, g_autoptr(), flutter::GetSwitchesFromEnvironment(), FlutterOpenGLRendererConfig::gl_external_texture_frame_callback, FlutterOpenGLRendererConfig::gl_proc_resolver, height, FlutterTaskRunnerDescription::identifier, kFlutterEngineAOTDataSourceTypeElfPath, kMetal, kOpenGL, kPlatformTaskRunnerIdentifier, kSoftware, kSuccess, kVulkan, FlutterOpenGLRendererConfig::make_current, FlutterOpenGLRendererConfig::make_resource_current, FlutterRendererConfig::open_gl, FlutterCustomTaskRunners::platform_task_runner, FlutterTaskRunnerDescription::post_task_callback, FlutterOpenGLRendererConfig::present, FlutterCompositor::present_view_callback, FlutterTaskRunnerDescription::runs_task_on_current_thread_callback, self, setup_keyboard(), setup_locales(), FlutterRendererConfig::software, FlutterOpenGLRendererConfig::struct_size, FlutterSoftwareRendererConfig::struct_size, FlutterTaskRunnerDescription::struct_size, FlutterCustomTaskRunners::struct_size, FlutterCompositor::struct_size, FlutterProjectArgs::struct_size, FlutterSoftwareRendererConfig::surface_present_callback, TRUE, FlutterRendererConfig::type, FlutterEngineAOTDataSource::type, FlutterCustomTaskRunners::ui_task_runner, user_data, FlutterTaskRunnerDescription::user_data, and FlutterCompositor::user_data.

Referenced by realize_cb(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), and TEST().

◆ fl_engine_unregister_external_texture()

gboolean fl_engine_unregister_external_texture ( FlEngine *  engine,
int64_t  texture_id 
)

fl_engine_unregister_external_texture: @engine: an #FlEngine. @texture_id: the identifier of the texture that is not available anymore.

Tells the Flutter engine that an existing external texture is not available anymore.

Returns: TRUE on success.

Definition at line 1444 of file fl_engine.cc.

1445 {
1446 g_return_val_if_fail(FL_IS_ENGINE(self), FALSE);
1447 return self->embedder_api.UnregisterExternalTexture(self->engine,
1448 texture_id) == kSuccess;
1449}

References kSuccess, self, and texture_id.

Referenced by unregister_texture().

◆ fl_engine_update_accessibility_features()

void fl_engine_update_accessibility_features ( FlEngine *  engine,
int32_t  flags 
)

fl_engine_update_accessibility_features: @engine: an #FlEngine. @flags: the features to enable in the accessibility tree.

Tells the Flutter engine to update the flags on the accessibility tree.

Definition at line 1475 of file fl_engine.cc.

1475 {
1476 g_return_if_fail(FL_IS_ENGINE(self));
1477
1478 if (self->engine == nullptr) {
1479 return;
1480 }
1481
1482 if (self->embedder_api.UpdateAccessibilityFeatures(
1483 self->engine, static_cast<FlutterAccessibilityFeature>(flags)) !=
1484 kSuccess) {
1485 g_warning("Failed to update accessibility features");
1486 }
1487}
FlutterAccessibilityFeature
Definition embedder.h:91

References kSuccess, and self.

Referenced by update_settings().