// Copyright 2017 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef FLUTTER_EMBEDDER_H_ #define FLUTTER_EMBEDDER_H_ #include #include #include #if defined(__cplusplus) extern "C" { #endif #ifndef FLUTTER_EXPORT #define FLUTTER_EXPORT #endif // FLUTTER_EXPORT #define FLUTTER_ENGINE_VERSION 1 typedef enum { kSuccess = 0, kInvalidLibraryVersion, kInvalidArguments, } FlutterResult; typedef enum { kOpenGL, } FlutterRendererType; typedef struct _FlutterEngine* FlutterEngine; typedef bool (*BoolCallback)(void* /* user data */); typedef uint32_t (*UIntCallback)(void* /* user data */); typedef struct { // The size of this struct. Must be sizeof(FlutterOpenGLRendererConfig). size_t struct_size; BoolCallback make_current; BoolCallback clear_current; BoolCallback present; UIntCallback fbo_callback; } FlutterOpenGLRendererConfig; typedef struct { FlutterRendererType type; union { FlutterOpenGLRendererConfig open_gl; }; } FlutterRendererConfig; typedef struct { // The size of this struct. Must be sizeof(FlutterWindowMetricsEvent). size_t struct_size; // Physical width of the window. size_t width; // Physical height of the window. size_t height; // Scale factor for the physical screen. double pixel_ratio; } FlutterWindowMetricsEvent; typedef enum { kCancel, kUp, kDown, kMove, } FlutterPointerPhase; typedef struct { // The size of this struct. Must be sizeof(FlutterPointerEvent). size_t struct_size; FlutterPointerPhase phase; size_t timestamp; // in microseconds. double x; double y; } FlutterPointerEvent; struct _FlutterPlatformMessageResponseHandle; typedef struct _FlutterPlatformMessageResponseHandle FlutterPlatformMessageResponseHandle; typedef struct { // The size of this struct. Must be sizeof(FlutterPlatformMessage). size_t struct_size; const char* channel; const uint8_t* message; const size_t message_size; // The response handle on which to invoke // |FlutterEngineSendPlatformMessageResponse| when the response is ready. This // field is ignored for messages being sent from the embedder to the // framework. If the embedder ever receives a message with a non-null response // handle, that handle must always be used with a // |FlutterEngineSendPlatformMessageResponse| call. If not, this is a memory // leak. It is not safe to send multiple responses on a single response // object. const FlutterPlatformMessageResponseHandle* response_handle; } FlutterPlatformMessage; typedef void (*FlutterPlatformMessageCallback)( const FlutterPlatformMessage* /* message*/, void* /* user data */); typedef struct { // The size of this struct. Must be sizeof(FlutterProjectArgs). size_t struct_size; // The path to the Flutter assets directory containing project assets. The // string can be collected after the call to |FlutterEngineRun| returns. The // string must be NULL terminated. const char* assets_path; // The path to the Dart file containing the |main| entry point. The string can // be collected after the call to |FlutterEngineRun| returns. The string must // be NULL terminated. const char* main_path; // The path to the |.packages| for the project. The string can be collected // after the call to |FlutterEngineRun| returns. The string must be NULL // terminated. const char* packages_path; // The path to the icudtl.dat file for the project. The string can be // collected after the call to |FlutterEngineRun| returns. The string must // be NULL terminated. const char* icu_data_path; // The command line argument count used to initialize the project. The string // can be collected after the call to |FlutterEngineRun| returns. The string // must be NULL terminated. int command_line_argc; // The command line arguments used to initialize the project. The strings can // be collected after the call to |FlutterEngineRun| returns. The strings must // be NULL terminated. const char* const* command_line_argv; // The callback invoked by the engine in order to give the embedder the chance // to respond to platform messages from the Dart application. The callback // will be invoked on the thread on which the |FlutterEngineRun| call is made. FlutterPlatformMessageCallback platform_message_callback; } FlutterProjectArgs; FLUTTER_EXPORT FlutterResult FlutterEngineRun(size_t version, const FlutterRendererConfig* config, const FlutterProjectArgs* args, void* user_data, FlutterEngine* engine_out); FLUTTER_EXPORT FlutterResult FlutterEngineShutdown(FlutterEngine engine); FLUTTER_EXPORT FlutterResult FlutterEngineSendWindowMetricsEvent( FlutterEngine engine, const FlutterWindowMetricsEvent* event); FLUTTER_EXPORT FlutterResult FlutterEngineSendPointerEvent(FlutterEngine engine, const FlutterPointerEvent* events, size_t events_count); FLUTTER_EXPORT FlutterResult FlutterEngineSendPlatformMessage( FlutterEngine engine, const FlutterPlatformMessage* message); FLUTTER_EXPORT FlutterResult FlutterEngineSendPlatformMessageResponse( FlutterEngine engine, const FlutterPlatformMessageResponseHandle* handle, const uint8_t* data, size_t data_length); // This API is only meant to be used by platforms that need to flush tasks on a // message loop not controlled by the Flutter engine. This API will be // deprecated soon. FLUTTER_EXPORT FlutterResult __FlutterEngineFlushPendingTasksNow(); #if defined(__cplusplus) } // extern "C" #endif #endif // FLUTTER_EMBEDDER_H_