Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
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 min_width, size_t min_height, size_t max_width, size_t max_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 min_width, size_t min_height, size_t max_width, size_t max_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)
 
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 46 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 28 of file fl_engine_private.h.

28 {
FlEngineError
@ FL_ENGINE_ERROR_FAILED

Function Documentation

◆ fl_engine_add_view()

FlutterViewId fl_engine_add_view ( FlEngine *  engine,
FlRenderable *  renderable,
size_t  min_width,
size_t  min_height,
size_t  max_width,
size_t  max_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. @min_width: minimum width of view in pixels. @min_height: minimum height of view in pixels. @max_width: maximum width of view in pixels. @max_height: maximum 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 924 of file fl_engine.cc.

933 {
934 g_return_val_if_fail(FL_IS_ENGINE(self), -1);
935
936 g_autoptr(GTask) task = g_task_new(self, cancellable, callback, user_data);
937
938 FlutterViewId view_id = self->next_view_id;
939 self->next_view_id++;
940
942
943 // We don't know which display this view will open on, so set to zero and this
944 // will be updated in a following FlutterWindowMetricsEvent
945 FlutterEngineDisplayId display_id = 0;
946
947 FlutterWindowMetricsEvent metrics = {};
948 metrics.struct_size = sizeof(FlutterWindowMetricsEvent);
949 metrics.width = min_width;
950 metrics.height = min_height;
951 metrics.pixel_ratio = pixel_ratio;
952 metrics.display_id = display_id;
953 metrics.view_id = view_id;
954 metrics.has_constraints = true;
955 metrics.min_width_constraint = min_width;
956 metrics.min_height_constraint = min_height;
957 metrics.max_width_constraint = max_width;
958 metrics.max_height_constraint = max_height;
960 info.struct_size = sizeof(FlutterAddViewInfo);
961 info.view_id = view_id;
962 info.view_metrics = &metrics;
963 info.user_data = g_object_ref(task);
965 FlutterEngineResult result = self->embedder_api.AddView(self->engine, &info);
966 if (result != kSuccess) {
967 g_task_return_new_error(task, fl_engine_error_quark(),
968 FL_ENGINE_ERROR_FAILED, "AddView returned %d",
969 result);
970 // This would have been done in the callback, but that won't occur now.
971 g_object_unref(task);
972 }
973
974 return view_id;
975}
uint64_t FlutterEngineDisplayId
Definition embedder.h:1050
FlutterEngineResult
Definition embedder.h:72
@ kSuccess
Definition embedder.h:73
int64_t FlutterViewId
Definition embedder.h:393
g_autoptr(FlEngine) engine
FlRenderable * renderable
static void view_added_cb(const FlutterAddViewResult *result)
Definition fl_engine.cc:203
static void set_renderable(FlEngine *self, int64_t view_id, FlRenderable *renderable)
Stores a weak reference to the renderable with the given ID.
Definition fl_engine.cc:175
GQuark fl_engine_error_quark(void) G_GNUC_CONST
G_BEGIN_DECLS FlutterViewId view_id
FlutterDesktopBinaryReply callback
FlutterAddViewCallback add_view_callback
Definition embedder.h:1147
FlutterViewId view_id
The identifier for the view to add. This must be unique.
Definition embedder.h:1127
const FlutterWindowMetricsEvent * view_metrics
Definition embedder.h:1132
FlutterEngineDisplayId display_id
The identifier of the display the view is rendering on.
Definition embedder.h:1074
size_t struct_size
The size of this struct. Must be sizeof(FlutterWindowMetricsEvent).
Definition embedder.h:1054
size_t height
Physical height of the window.
Definition embedder.h:1058
int64_t view_id
The view that this event is describing.
Definition embedder.h:1076
double pixel_ratio
Scale factor for the physical screen.
Definition embedder.h:1060
size_t width
Physical width of the window.
Definition embedder.h:1056

References FlutterAddViewInfo::add_view_callback, callback, FlutterWindowMetricsEvent::display_id, FL_ENGINE_ERROR_FAILED, fl_engine_error_quark(), g_autoptr(), FlutterWindowMetricsEvent::has_constraints, FlutterWindowMetricsEvent::height, kSuccess, FlutterWindowMetricsEvent::max_height_constraint, FlutterWindowMetricsEvent::max_width_constraint, FlutterWindowMetricsEvent::min_height_constraint, FlutterWindowMetricsEvent::min_width_constraint, FlutterWindowMetricsEvent::pixel_ratio, renderable, self, set_renderable(), 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, and FlutterWindowMetricsEvent::width.

Referenced by fl_view_new_for_engine(), fl_view_new_sized_to_content(), 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. If error is not NULL, *error must be initialized (typically NULL, but an error from a previous call using GLib error handling is explicitly valid).

Completes request started with fl_engine_add_view().

Returns: TRUE on success.

Definition at line 977 of file fl_engine.cc.

979 {
980 g_return_val_if_fail(FL_IS_ENGINE(self), FALSE);
981 return g_task_propagate_boolean(G_TASK(result), error);
982}
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 1442 of file fl_engine.cc.

1446 {
1447 g_return_if_fail(FL_IS_ENGINE(self));
1448
1449 if (self->engine == nullptr) {
1450 return;
1451 }
1452
1453 const uint8_t* action_data = nullptr;
1454 size_t action_data_length = 0;
1455 if (data != nullptr) {
1456 action_data = static_cast<const uint8_t*>(
1457 g_bytes_get_data(data, &action_data_length));
1458 }
1459
1462 info.view_id = view_id;
1463 info.node_id = node_id;
1464 info.action = action;
1465 info.data = action_data;
1466 info.data_length = action_data_length;
1467 if (self->embedder_api.SendSemanticsAction(self->engine, &info) != kSuccess) {
1468 g_warning("Failed to send semantics action");
1469 }
1470}
FlutterViewId view_id
The ID of the view that includes the node.
Definition embedder.h:2816
FlutterSemanticsAction action
The semantics action.
Definition embedder.h:2822
size_t data_length
The data length.
Definition embedder.h:2828
uint64_t node_id
The semantics node identifier.
Definition embedder.h:2819
const uint8_t * data
Data associated with the action.
Definition embedder.h:2825

References FlutterSendSemanticsActionInfo::action, action, 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 1504 of file fl_engine.cc.

1504 {
1505 g_return_if_fail(FL_IS_ENGINE(self));
1506 if (self->embedder_api.RunTask(self->engine, task) != kSuccess) {
1507 g_warning("Failed to run task");
1508 }
1509}

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 724 of file fl_engine.cc.

724 {
725 void* engine = reinterpret_cast<void*>(id);
726 g_return_val_if_fail(FL_IS_ENGINE(engine), nullptr);
727 return FL_ENGINE(engine);
728}
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 754 of file fl_engine.cc.

754 {
755 g_return_val_if_fail(FL_IS_ENGINE(self), nullptr);
756 return self->display_monitor;
757}

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 903 of file fl_engine.cc.

903 {
904 return &(self->embedder_api);
905}

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(), 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 1536 of file fl_engine.cc.

1536 {
1537 g_return_val_if_fail(FL_IS_ENGINE(self), nullptr);
1538 return self->keyboard_manager;
1539}

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 1546 of file fl_engine.cc.

1546 {
1547 g_return_val_if_fail(FL_IS_ENGINE(self), nullptr);
1548 return self->mouse_cursor_handler;
1549}

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 749 of file fl_engine.cc.

749 {
750 g_return_val_if_fail(FL_IS_ENGINE(self), nullptr);
751 return self->opengl_manager;
752}

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 984 of file fl_engine.cc.

984 {
985 g_return_val_if_fail(FL_IS_ENGINE(self), nullptr);
986
987 return get_renderable(self, view_id);
988}
static FlRenderable * get_renderable(FlEngine *self, int64_t view_id)
Definition fl_engine.cc:187

References get_renderable(), 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 744 of file fl_engine.cc.

744 {
745 g_return_val_if_fail(FL_IS_ENGINE(self), static_cast<FlutterRendererType>(0));
746 return self->renderer_type;
747}
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 1499 of file fl_engine.cc.

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

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 1541 of file fl_engine.cc.

1541 {
1542 g_return_val_if_fail(FL_IS_ENGINE(self), nullptr);
1543 return self->text_input_handler;
1544}

References self.

Referenced by fl_view_focus_in_event(), and handle_key_event().

◆ 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 1472 of file fl_engine.cc.

1473 {
1474 g_return_val_if_fail(FL_IS_ENGINE(self), FALSE);
1475 return self->embedder_api.MarkExternalTextureFrameAvailable(
1476 self->engine, texture_id) == kSuccess;
1477}
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 734 of file fl_engine.cc.

735 {
736 g_autoptr(FlDartProject) project = fl_dart_project_new();
737 return fl_engine_new_full(project, binary_messenger);
738}
G_MODULE_EXPORT FlDartProject * fl_dart_project_new()
static FlEngine * fl_engine_new_full(FlDartProject *project, FlBinaryMessenger *binary_messenger)
Definition fl_engine.cc:687

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

Referenced by 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 907 of file fl_engine.cc.

909 {
910 g_return_if_fail(FL_IS_ENGINE(self));
911
912 FlutterEngineResult result = self->embedder_api.NotifyDisplayUpdate(
914 displays_length);
915 if (result != kSuccess) {
916 g_warning("Failed to notify display update to Flutter engine: %d", result);
917 }
918}
@ kFlutterEngineDisplaysUpdateTypeStartup
Definition embedder.h:2362
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 1479 of file fl_engine.cc.

1480 {
1481 g_return_val_if_fail(FL_IS_ENGINE(self), FALSE);
1482 return self->embedder_api.RegisterExternalTexture(self->engine, texture_id) ==
1483 kSuccess;
1484}

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 990 of file fl_engine.cc.

994 {
995 g_return_if_fail(FL_IS_ENGINE(self));
996
998
999 g_autoptr(GTask) task = g_task_new(self, cancellable, callback, user_data);
1000
1002 info.struct_size = sizeof(FlutterRemoveViewInfo);
1003 info.view_id = view_id;
1004 info.user_data = g_object_ref(task);
1006 FlutterEngineResult result =
1007 self->embedder_api.RemoveView(self->engine, &info);
1008 if (result != kSuccess) {
1009 g_task_return_new_error(task, fl_engine_error_quark(),
1010 FL_ENGINE_ERROR_FAILED, "RemoveView returned %d",
1011 result);
1012 // This would have been done in the callback, but that won't occur now.
1013 g_object_unref(task);
1014 }
1015}
static void remove_renderable(FlEngine *self, int64_t view_id)
Remove a renderable that no longer exists.
Definition fl_engine.cc:198
static void view_removed_cb(const FlutterRemoveViewResult *result)
Definition fl_engine.cc:214
FlutterRemoveViewCallback remove_view_callback
Definition embedder.h:1195
FlutterViewId view_id
Definition embedder.h:1178

References callback, FL_ENGINE_ERROR_FAILED, fl_engine_error_quark(), g_autoptr(), kSuccess, remove_renderable(), 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. If error is not NULL, *error must be initialized (typically NULL, but an error from a previous call using GLib error handling is explicitly valid).

Completes request started with fl_engine_remove_view().

Returns: TRUE on succcess.

Definition at line 1017 of file fl_engine.cc.

1019 {
1020 g_return_val_if_fail(FL_IS_ENGINE(self), FALSE);
1021 return g_task_propagate_boolean(G_TASK(result), error);
1022}

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 1531 of file fl_engine.cc.

1531 {
1532 g_return_if_fail(FL_IS_ENGINE(self));
1533 fl_platform_handler_request_app_exit(self->platform_handler);
1534}
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 1402 of file fl_engine.cc.

1406 {
1407 g_return_if_fail(FL_IS_ENGINE(self));
1408
1409 g_autoptr(GTask) task = g_task_new(self, cancellable, callback, user_data);
1410
1411 if (self->engine == nullptr) {
1412 g_task_return_new_error(task, fl_engine_error_quark(),
1413 FL_ENGINE_ERROR_FAILED, "No engine");
1414 return;
1415 }
1416
1417 if (self->embedder_api.SendKeyEvent(self->engine, event, send_key_event_cb,
1418 g_object_ref(task)) != kSuccess) {
1419 g_task_return_new_error(task, fl_engine_error_quark(),
1420 FL_ENGINE_ERROR_FAILED, "Failed to send key event");
1421 g_object_unref(task);
1422 }
1423}
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. If error is not NULL, *error must be initialized (typically NULL, but an error from a previous call using GLib error handling is explicitly valid).

Completes request started with fl_engine_send_key_event().

Returns: TRUE on success.

Definition at line 1425 of file fl_engine.cc.

1428 {
1429 g_return_val_if_fail(FL_IS_ENGINE(self), FALSE);
1430 g_return_val_if_fail(g_task_is_valid(result, self), FALSE);
1431
1432 g_autofree gboolean* return_value =
1433 static_cast<gboolean*>(g_task_propagate_pointer(G_TASK(result), error));
1434 if (return_value == nullptr) {
1435 return FALSE;
1436 }
1437
1438 *handled = *return_value;
1439 return TRUE;
1440}
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 1178 of file fl_engine.cc.

1187 {
1188 g_return_if_fail(FL_IS_ENGINE(self));
1189
1190 if (self->engine == nullptr) {
1191 return;
1192 }
1193
1194 FlutterPointerEvent fl_event = {};
1195 fl_event.struct_size = sizeof(fl_event);
1196 fl_event.phase = phase;
1197 fl_event.timestamp = timestamp;
1198 fl_event.x = x;
1199 fl_event.y = y;
1200 if (scroll_delta_x != 0 || scroll_delta_y != 0) {
1202 }
1203 fl_event.scroll_delta_x = scroll_delta_x;
1204 fl_event.scroll_delta_y = scroll_delta_y;
1205 fl_event.device_kind = device_kind;
1206 fl_event.buttons = buttons;
1207 fl_event.device = kMousePointerDeviceId;
1208 fl_event.view_id = view_id;
1209 if (self->embedder_api.SendPointerEvent(self->engine, &fl_event, 1) !=
1210 kSuccess) {
1211 g_warning("Failed to send pointer event");
1212 }
1213}
int32_t x
@ kFlutterPointerSignalKindScroll
Definition embedder.h:1331
static constexpr int32_t kMousePointerDeviceId
Definition fl_engine.cc:35
double y
double scroll_delta_y
The y offset of the scroll in physical pixels.
Definition embedder.h:1355
int64_t buttons
The buttons currently pressed, if any.
Definition embedder.h:1363
size_t struct_size
The size of this struct. Must be sizeof(FlutterPointerEvent).
Definition embedder.h:1338
FlutterViewId view_id
The identifier of the view that received the pointer event.
Definition embedder.h:1373
FlutterPointerSignalKind signal_kind
Definition embedder.h:1351
double scroll_delta_x
The x offset of the scroll in physical pixels.
Definition embedder.h:1353
double y
The y coordinate of the pointer event in physical pixels.
Definition embedder.h:1347
double x
The x coordinate of the pointer event in physical pixels.
Definition embedder.h:1345
FlutterPointerDeviceKind device_kind
Definition embedder.h:1361
FlutterPointerPhase phase
Definition embedder.h:1339

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 1075 of file fl_engine.cc.

1080 {
1081 g_return_if_fail(FL_IS_ENGINE(self));
1082
1083 GTask* task = nullptr;
1084 FlutterPlatformMessageResponseHandle* response_handle = nullptr;
1085 if (callback != nullptr) {
1086 task = g_task_new(self, cancellable, callback, user_data);
1087
1088 if (self->engine == nullptr) {
1089 g_task_return_new_error(task, fl_engine_error_quark(),
1090 FL_ENGINE_ERROR_FAILED, "No engine to send to");
1091 g_object_unref(task);
1092 return;
1093 }
1094
1095 FlutterEngineResult result =
1096 self->embedder_api.PlatformMessageCreateResponseHandle(
1098 &response_handle);
1099 if (result != kSuccess) {
1100 g_task_return_new_error(task, fl_engine_error_quark(),
1102 "Failed to create response handle");
1103 g_object_unref(task);
1104 return;
1105 }
1106 } else if (self->engine == nullptr) {
1107 return;
1108 }
1109
1110 FlutterPlatformMessage fl_message = {};
1111 fl_message.struct_size = sizeof(fl_message);
1112 fl_message.channel = channel;
1113 fl_message.message =
1114 message != nullptr
1115 ? static_cast<const uint8_t*>(g_bytes_get_data(message, nullptr))
1116 : nullptr;
1117 fl_message.message_size = message != nullptr ? g_bytes_get_size(message) : 0;
1118 fl_message.response_handle = response_handle;
1119 FlutterEngineResult result =
1120 self->embedder_api.SendPlatformMessage(self->engine, &fl_message);
1121
1122 if (result != kSuccess && task != nullptr) {
1123 g_task_return_new_error(task, fl_engine_error_quark(),
1125 "Failed to send platform messages");
1126 g_object_unref(task);
1127 }
1128
1129 if (response_handle != nullptr) {
1130 if (self->embedder_api.PlatformMessageReleaseResponseHandle(
1131 self->engine, response_handle) != kSuccess) {
1132 g_warning("Failed to release response handle");
1133 }
1134 }
1135}
const char * message
static void fl_engine_platform_message_response_cb(const uint8_t *data, size_t data_length, void *user_data)
Definition fl_engine.cc:551
const gchar * channel
size_t struct_size
The size of this struct. Must be sizeof(FlutterPlatformMessage).
Definition embedder.h:1474
const FlutterPlatformMessageResponseHandle * response_handle
Definition embedder.h:1484
const char * channel
Definition embedder.h:1475
const uint8_t * message
Definition embedder.h:1476

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. If error is not NULL, *error must be initialized (typically NULL, but an error from a previous call using GLib error handling is explicitly valid).

Completes request started with fl_engine_send_platform_message().

Returns: message response on success or NULL on error.

Definition at line 1137 of file fl_engine.cc.

1139 {
1140 g_return_val_if_fail(FL_IS_ENGINE(self), FALSE);
1141 g_return_val_if_fail(g_task_is_valid(result, self), FALSE);
1142
1143 return static_cast<GBytes*>(g_task_propagate_pointer(G_TASK(result), error));
1144}

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. If error is not NULL, *error must be initialized (typically NULL, but an error from a previous call using GLib error handling is explicitly valid).

Responds to a platform message.

Returns: TRUE on success.

Definition at line 1043 of file fl_engine.cc.

1047 {
1048 g_return_val_if_fail(FL_IS_ENGINE(self), FALSE);
1049 g_return_val_if_fail(handle != nullptr, FALSE);
1050
1051 if (self->engine == nullptr) {
1053 "No engine to send response to");
1054 return FALSE;
1055 }
1056
1057 gsize data_length = 0;
1058 const uint8_t* data = nullptr;
1059 if (response != nullptr) {
1060 data =
1061 static_cast<const uint8_t*>(g_bytes_get_data(response, &data_length));
1062 }
1063 FlutterEngineResult result = self->embedder_api.SendPlatformMessageResponse(
1064 self->engine, handle, data, data_length);
1065
1066 if (result != kSuccess) {
1068 "Failed to send platform message response");
1069 return FALSE;
1070 }
1071
1072 return TRUE;
1073}
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot data
Definition switch_defs.h:36

References 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 1360 of file fl_engine.cc.

1369 {
1370 g_return_if_fail(FL_IS_ENGINE(self));
1371
1372 if (self->engine == nullptr) {
1373 return;
1374 }
1375
1376 FlutterPointerEvent fl_event = {};
1377 fl_event.struct_size = sizeof(fl_event);
1378 fl_event.timestamp = timestamp;
1379 fl_event.x = x;
1380 fl_event.y = y;
1381 fl_event.phase = phase;
1382 fl_event.pan_x = pan_x;
1383 fl_event.pan_y = pan_y;
1384 fl_event.scale = scale;
1385 fl_event.rotation = rotation;
1388 fl_event.view_id = view_id;
1389 if (self->embedder_api.SendPointerEvent(self->engine, &fl_event, 1) !=
1390 kSuccess) {
1391 g_warning("Failed to send pointer event");
1392 }
1393}
@ kFlutterPointerDeviceKindTrackpad
Definition embedder.h:1313
static constexpr int32_t kPointerPanZoomDeviceId
Definition fl_engine.cc:36
double scale
The scale of the pan/zoom, where 1.0 is the initial scale.
Definition embedder.h:1369
double rotation
The rotation of the pan/zoom in radians, where 0.0 is the initial angle.
Definition embedder.h:1371
double pan_x
The x offset of the pan/zoom in physical pixels.
Definition embedder.h:1365
double pan_y
The y offset of the pan/zoom in physical pixels.
Definition embedder.h:1367

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 1302 of file fl_engine.cc.

1307 {
1308 g_return_if_fail(FL_IS_ENGINE(self));
1309
1310 if (self->engine == nullptr) {
1311 return;
1312 }
1313
1314 FlutterPointerEvent event;
1315 event.timestamp = timestamp;
1316 event.x = x;
1317 event.y = y;
1318 event.device_kind = kFlutterPointerDeviceKindTouch;
1319 event.device = device;
1320 event.buttons = 0;
1321 event.view_id = view_id;
1322 event.phase = FlutterPointerPhase::kAdd;
1323 event.struct_size = sizeof(event);
1324
1325 if (self->embedder_api.SendPointerEvent(self->engine, &event, 1) !=
1326 kSuccess) {
1327 g_warning("Failed to send pointer event");
1328 }
1329}
@ kAdd
Definition embedder.h:1292
@ kFlutterPointerDeviceKindTouch
Definition embedder.h:1311
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 1244 of file fl_engine.cc.

1249 {
1250 g_return_if_fail(FL_IS_ENGINE(self));
1251
1252 if (self->engine == nullptr) {
1253 return;
1254 }
1255
1256 FlutterPointerEvent event;
1257 event.timestamp = timestamp;
1258 event.x = x;
1259 event.y = y;
1260 event.device_kind = kFlutterPointerDeviceKindTouch;
1261 event.device = device;
1263 event.view_id = view_id;
1264 event.phase = FlutterPointerPhase::kDown;
1265 event.struct_size = sizeof(event);
1266
1267 if (self->embedder_api.SendPointerEvent(self->engine, &event, 1) !=
1268 kSuccess) {
1269 g_warning("Failed to send pointer event");
1270 }
1271}
@ kDown
Definition embedder.h:1282
@ kFlutterPointerButtonMousePrimary
Definition embedder.h:1319

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 1273 of file fl_engine.cc.

1278 {
1279 g_return_if_fail(FL_IS_ENGINE(self));
1280
1281 if (self->engine == nullptr) {
1282 return;
1283 }
1284
1285 FlutterPointerEvent event;
1286 event.timestamp = timestamp;
1287 event.x = x;
1288 event.y = y;
1289 event.device_kind = kFlutterPointerDeviceKindTouch;
1290 event.device = device;
1292 event.view_id = view_id;
1293 event.phase = FlutterPointerPhase::kMove;
1294 event.struct_size = sizeof(event);
1295
1296 if (self->embedder_api.SendPointerEvent(self->engine, &event, 1) !=
1297 kSuccess) {
1298 g_warning("Failed to send pointer event");
1299 }
1300}
@ kMove
Definition embedder.h:1287

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 1331 of file fl_engine.cc.

1336 {
1337 g_return_if_fail(FL_IS_ENGINE(self));
1338
1339 if (self->engine == nullptr) {
1340 return;
1341 }
1342
1343 FlutterPointerEvent event;
1344 event.timestamp = timestamp;
1345 event.x = x;
1346 event.y = y;
1347 event.device_kind = kFlutterPointerDeviceKindTouch;
1348 event.device = device;
1349 event.buttons = 0;
1350 event.view_id = view_id;
1351 event.phase = FlutterPointerPhase::kRemove;
1352 event.struct_size = sizeof(event);
1353
1354 if (self->embedder_api.SendPointerEvent(self->engine, &event, 1) !=
1355 kSuccess) {
1356 g_warning("Failed to send pointer event");
1357 }
1358}
@ kRemove
Definition embedder.h:1297

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 1215 of file fl_engine.cc.

1220 {
1221 g_return_if_fail(FL_IS_ENGINE(self));
1222
1223 if (self->engine == nullptr) {
1224 return;
1225 }
1226
1227 FlutterPointerEvent event;
1228 event.timestamp = timestamp;
1229 event.x = x;
1230 event.y = y;
1231 event.device_kind = kFlutterPointerDeviceKindTouch;
1232 event.device = device;
1233 event.buttons = 0;
1234 event.view_id = view_id;
1235 event.phase = FlutterPointerPhase::kUp;
1236 event.struct_size = sizeof(event);
1237
1238 if (self->embedder_api.SendPointerEvent(self->engine, &event, 1) !=
1239 kSuccess) {
1240 g_warning("Failed to send pointer event");
1241 }
1242}
@ kUp
Definition embedder.h:1275

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  min_width,
size_t  min_height,
size_t  max_width,
size_t  max_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. @min_width: minimum width of view in pixels. @min_height: minimum height of view in pixels. @max_width: maximum width of view in pixels. @max_height: maximum height of view in pixels. @pixel_ratio: scale factor for view.

Sends a window metrics event to the engine.

Definition at line 1146 of file fl_engine.cc.

1153 {
1154 g_return_if_fail(FL_IS_ENGINE(self));
1155
1156 if (self->engine == nullptr) {
1157 return;
1158 }
1159
1160 FlutterWindowMetricsEvent event = {};
1161 event.struct_size = sizeof(FlutterWindowMetricsEvent);
1162 event.width = min_width;
1163 event.height = min_height;
1164 event.pixel_ratio = pixel_ratio;
1165 event.display_id = display_id;
1166 event.view_id = view_id;
1167 event.has_constraints = true;
1168 event.min_width_constraint = min_width;
1169 event.min_height_constraint = min_height;
1170 event.max_width_constraint = max_width;
1171 event.max_height_constraint = max_height;
1172 if (self->embedder_api.SendWindowMetricsEvent(self->engine, &event) !=
1173 kSuccess) {
1174 g_warning("Failed to send window metrics");
1175 }
1176}

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

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 920 of file fl_engine.cc.

920 {
922}
constexpr int64_t kFlutterImplicitViewId
Definition constants.h:35

References flutter::kFlutterImplicitViewId, renderable, self, and set_renderable().

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 1024 of file fl_engine.cc.

1028 {
1029 g_return_if_fail(FL_IS_ENGINE(self));
1030 g_return_if_fail(handler != nullptr);
1031
1032 if (self->platform_message_handler_destroy_notify) {
1033 self->platform_message_handler_destroy_notify(
1034 self->platform_message_handler_data);
1035 }
1036
1037 self->platform_message_handler = handler;
1038 self->platform_message_handler_data = user_data;
1039 self->platform_message_handler_destroy_notify = destroy_notify;
1040}
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. If error is not NULL, *error must be initialized (typically NULL, but an error from a previous call using GLib error handling is explicitly valid).

Starts the Flutter engine.

Returns: TRUE on success.

Definition at line 759 of file fl_engine.cc.

759 {
760 g_return_val_if_fail(FL_IS_ENGINE(self), FALSE);
761
762 FlutterRendererConfig config = {};
763 config.type = self->renderer_type;
764 switch (config.type) {
765 case kSoftware:
767 // No action required, as this is handled in
768 // compositor_present_view_callback.
770 [](void* user_data, const void* allocation, size_t row_bytes,
771 size_t height) { return true; };
772 break;
773 case kOpenGL:
779 // No action required, as this is handled in
780 // compositor_present_view_callback.
781 config.open_gl.present = [](void* user_data) { return true; };
785 break;
786 case kMetal:
787 case kVulkan:
788 default:
790 "Unsupported renderer type");
791 return FALSE;
792 }
793
794 FlutterTaskRunnerDescription platform_task_runner = {};
795 platform_task_runner.struct_size = sizeof(FlutterTaskRunnerDescription);
796 platform_task_runner.user_data = self;
797 platform_task_runner.runs_task_on_current_thread_callback =
799 platform_task_runner.post_task_callback = fl_engine_post_task;
800 platform_task_runner.identifier = kPlatformTaskRunnerIdentifier;
801
802 FlutterCustomTaskRunners custom_task_runners = {};
803 custom_task_runners.struct_size = sizeof(FlutterCustomTaskRunners);
804 custom_task_runners.platform_task_runner = &platform_task_runner;
805
806 switch (fl_dart_project_get_ui_thread_policy(self->project)) {
808 break;
811 custom_task_runners.ui_task_runner = &platform_task_runner;
812 break;
813 }
814
815 g_autoptr(GPtrArray) command_line_args =
816 g_ptr_array_new_with_free_func(g_free);
817 g_ptr_array_insert(command_line_args, 0, g_strdup("flutter"));
818 for (const auto& env_switch : flutter::GetSwitchesFromEnvironment()) {
819 g_ptr_array_add(command_line_args, g_strdup(env_switch.c_str()));
820 }
821 // Linux (and other desktop platforms) always uses SDFs.
822 g_ptr_array_add(command_line_args, g_strdup("--impeller-use-sdfs"));
823
824 gchar** dart_entrypoint_args =
826
829 args.assets_path = fl_dart_project_get_assets_path(self->project);
830 args.icu_data_path = fl_dart_project_get_icu_data_path(self->project);
831 args.command_line_argc = command_line_args->len;
832 args.command_line_argv =
833 reinterpret_cast<const char* const*>(command_line_args->pdata);
834 args.platform_message_callback = fl_engine_platform_message_cb;
835 args.update_semantics_callback2 = fl_engine_update_semantics_cb;
836 args.custom_task_runners = &custom_task_runners;
837 args.shutdown_dart_vm_when_done = true;
838 args.on_pre_engine_restart_callback = fl_engine_on_pre_engine_restart_cb;
839 args.dart_entrypoint_argc =
840 dart_entrypoint_args != nullptr ? g_strv_length(dart_entrypoint_args) : 0;
841 args.dart_entrypoint_argv =
842 reinterpret_cast<const char* const*>(dart_entrypoint_args);
843 args.engine_id = reinterpret_cast<int64_t>(self);
844
845 FlutterCompositor compositor = {};
846 compositor.struct_size = sizeof(FlutterCompositor);
847 compositor.user_data = self;
853 args.compositor = &compositor;
854
855 if (self->embedder_api.RunsAOTCompiledDartCode()) {
856 FlutterEngineAOTDataSource source = {};
859 if (self->embedder_api.CreateAOTData(&source, &self->aot_data) !=
860 kSuccess) {
862 "Failed to create AOT data");
863 return FALSE;
864 }
865 args.aot_data = self->aot_data;
866 }
867
868 FlutterEngineResult result = self->embedder_api.Initialize(
869 FLUTTER_ENGINE_VERSION, &config, &args, self, &self->engine);
870 if (result != kSuccess) {
872 "Failed to initialize Flutter engine");
873 return FALSE;
874 }
875
876 result = self->embedder_api.RunInitialized(self->engine);
877 if (result != kSuccess) {
879 "Failed to run Flutter engine");
880 return FALSE;
881 }
882
884
885 g_autoptr(FlSettings) settings = fl_settings_new();
886 self->settings_handler = fl_settings_handler_new(self);
887 fl_settings_handler_start(self->settings_handler, settings);
888
889 self->platform_handler = fl_platform_handler_new(self->binary_messenger);
890
892
893 result = self->embedder_api.UpdateSemanticsEnabled(self->engine, TRUE);
894 if (result != kSuccess) {
895 g_warning("Failed to enable accessibility features on Flutter engine");
896 }
897
898 fl_display_monitor_start(self->display_monitor);
899
900 return TRUE;
901}
@ kFlutterEngineAOTDataSourceTypeElfPath
Definition embedder.h:2466
@ 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:434
static bool fl_engine_runs_task_on_current_thread(void *user_data)
Definition fl_engine.cc:475
static void fl_engine_on_pre_engine_restart_cb(void *user_data)
Definition fl_engine.cc:541
static bool compositor_create_backing_store_callback(const FlutterBackingStoreConfig *config, FlutterBackingStore *backing_store_out, void *user_data)
Definition fl_engine.cc:363
static bool fl_engine_gl_make_current(void *user_data)
Definition fl_engine.cc:413
static void * fl_engine_gl_proc_resolver(void *user_data, const char *name)
Definition fl_engine.cc:409
static bool compositor_present_view_callback(const FlutterPresentViewInfo *info)
Definition fl_engine.cc:394
static bool compositor_collect_backing_store_callback(const FlutterBackingStore *backing_store, void *user_data)
Definition fl_engine.cc:379
static void fl_engine_post_task(FlutterTask task, uint64_t target_time_nanos, void *user_data)
Definition fl_engine.cc:481
static uint32_t fl_engine_gl_get_fbo(void *user_data)
Definition fl_engine.cc:423
static void setup_keyboard(FlEngine *self)
Definition fl_engine.cc:517
static void setup_locales(FlEngine *self)
Definition fl_engine.cc:232
static void fl_engine_update_semantics_cb(const FlutterSemanticsUpdate2 *update, void *user_data)
Definition fl_engine.cc:510
static bool fl_engine_gl_make_resource_current(void *user_data)
Definition fl_engine.cc:428
static void fl_engine_platform_message_cb(const FlutterPlatformMessage *message, void *user_data)
Definition fl_engine.cc:490
static constexpr size_t kPlatformTaskRunnerIdentifier
Definition fl_engine.cc:31
static bool fl_engine_gl_clear_current(void *user_data)
Definition fl_engine.cc:418
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()
int32_t height
FlutterBackingStoreCreateCallback create_backing_store_callback
Definition embedder.h:2251
size_t struct_size
This size of this struct. Must be sizeof(FlutterCompositor).
Definition embedder.h:2235
FlutterPresentViewCallback present_view_callback
Definition embedder.h:2288
FlutterBackingStoreCollectCallback collect_backing_store_callback
Definition embedder.h:2256
const FlutterTaskRunnerDescription * ui_task_runner
Definition embedder.h:1946
const FlutterTaskRunnerDescription * platform_task_runner
Definition embedder.h:1934
size_t struct_size
The size of this struct. Must be sizeof(FlutterCustomTaskRunners).
Definition embedder.h:1929
FlutterEngineAOTDataSourceType type
Definition embedder.h:2472
const char * elf_path
Absolute path to an ELF library file.
Definition embedder.h:2475
ProcResolver gl_proc_resolver
Definition embedder.h:765
size_t struct_size
The size of this struct. Must be sizeof(FlutterOpenGLRendererConfig).
Definition embedder.h:726
TextureFrameCallback gl_external_texture_frame_callback
Definition embedder.h:770
BoolCallback make_resource_current
Definition embedder.h:748
size_t struct_size
The size of this struct. Must be sizeof(FlutterProjectArgs).
Definition embedder.h:2496
FlutterSoftwareRendererConfig software
Definition embedder.h:1041
FlutterOpenGLRendererConfig open_gl
Definition embedder.h:1040
FlutterRendererType type
Definition embedder.h:1038
size_t struct_size
The size of this struct. Must be sizeof(FlutterSoftwareRendererConfig).
Definition embedder.h:1029
SoftwareSurfacePresentCallback surface_present_callback
Definition embedder.h:1034
size_t struct_size
The size of this struct. Must be sizeof(FlutterTaskRunnerDescription).
Definition embedder.h:1902
BoolCallback runs_task_on_current_thread_callback
Definition embedder.h:1908
FlutterTaskRunnerPostTaskCallback post_task_callback
Definition embedder.h:1919

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(), 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 1486 of file fl_engine.cc.

1487 {
1488 g_return_val_if_fail(FL_IS_ENGINE(self), FALSE);
1489 return self->embedder_api.UnregisterExternalTexture(self->engine,
1490 texture_id) == kSuccess;
1491}

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 1517 of file fl_engine.cc.

1517 {
1518 g_return_if_fail(FL_IS_ENGINE(self));
1519
1520 if (self->engine == nullptr) {
1521 return;
1522 }
1523
1524 if (self->embedder_api.UpdateAccessibilityFeatures(
1525 self->engine, static_cast<FlutterAccessibilityFeature>(flags)) !=
1526 kSuccess) {
1527 g_warning("Failed to update accessibility features");
1528 }
1529}
FlutterAccessibilityFeature
Definition embedder.h:91

References kSuccess, and self.

Referenced by update_settings().