 |
Flutter Windows Embedder
|
|
Go to the documentation of this file.
19 #include "flutter/shell/platform/embedder/embedder.h"
28 static_assert(FLUTTER_ENGINE_VERSION == 1,
"");
68 std::unique_ptr<flutter::WindowBindingHandler> window_wrapper =
69 std::make_unique<flutter::FlutterWindow>(width, height);
71 auto state = std::make_unique<FlutterDesktopViewControllerState>();
73 std::make_unique<flutter::FlutterWindowsView>(std::move(window_wrapper));
75 state->view->SetEngine(
77 state->view->CreateRenderSurface();
78 if (!state->view->GetEngine()->running()) {
79 if (!state->view->GetEngine()->Run()) {
85 state->view->SendInitialBounds();
86 state->view->SendInitialAccessibilityFeatures();
87 return state.release();
107 controller->
view->ForceRedraw();
117 std::optional<LRESULT> delegate_result =
118 controller->
view->GetEngine()
119 ->window_proc_delegate_manager()
120 ->OnTopLevelWindowProc(hwnd,
message, wparam, lparam);
121 if (delegate_result) {
122 *result = *delegate_result;
124 return delegate_result.has_value();
130 auto engine = std::make_unique<flutter::FlutterWindowsEngine>(project);
138 result = engine->
Stop();
145 const char* entry_point) {
146 std::string_view entry_point_view{
""};
147 if (entry_point !=
nullptr) {
148 entry_point_view = entry_point;
155 return std::chrono::nanoseconds::max().count();
164 const char* plugin_name) {
196 if (surface_manager) {
197 Microsoft::WRL::ComPtr<ID3D11Device> d3d_device;
198 Microsoft::WRL::ComPtr<IDXGIDevice> dxgi_device;
199 if (surface_manager->GetDevice(d3d_device.GetAddressOf()) &&
200 SUCCEEDED(d3d_device.As(&dxgi_device))) {
201 IDXGIAdapter* adapter;
202 if (SUCCEEDED(dxgi_device->GetAdapter(&adapter))) {
217 std::optional<LRESULT> lresult =
220 if (result && lresult.has_value()) {
221 *result = lresult.value();
223 return lresult.has_value();
256 if (freopen_s(&unused,
"CONOUT$",
"w", stdout)) {
257 _dup2(_fileno(stdout), 1);
259 if (freopen_s(&unused,
"CONOUT$",
"w", stderr)) {
260 _dup2(_fileno(stdout), 2);
262 std::ios::sync_with_stdio();
281 const size_t message_size,
285 <<
"Messenger must reference a running engine to send a message";
295 const size_t message_size) {
297 message_size,
nullptr,
nullptr);
304 size_t data_length) {
306 <<
"Messenger must reference a running engine to send a response";
318 <<
"Messenger must reference a running engine to set a callback";
371 registrar->UnregisterTexture(
FlutterDesktopViewRef FlutterDesktopViewControllerGetView(FlutterDesktopViewControllerRef controller)
FlutterDesktopPluginRegistrarRef GetRegistrar()
static flutter::FlutterWindowsTextureRegistrar * TextureRegistrarFromHandle(FlutterDesktopTextureRegistrarRef ref)
HWND FlutterDesktopViewGetHWND(FlutterDesktopViewRef view)
FlutterDesktopTextureRegistrarRef FlutterDesktopEngineGetTextureRegistrar(FlutterDesktopEngineRef engine)
FlutterDesktopViewRef FlutterDesktopPluginRegistrarGetView(FlutterDesktopPluginRegistrarRef registrar)
FlutterDesktopMessengerRef FlutterDesktopEngineGetMessenger(FlutterDesktopEngineRef engine)
void FlutterDesktopPluginRegistrarRegisterTopLevelWindowProcDelegate(FlutterDesktopPluginRegistrarRef registrar, FlutterDesktopWindowProcCallback delegate, void *user_data)
static FlutterDesktopViewRef HandleForView(flutter::FlutterWindowsView *view)
void FlutterDesktopMessengerUnlock(FlutterDesktopMessengerRef messenger)
bool FlutterDesktopMessengerSend(FlutterDesktopMessengerRef messenger, const char *channel, const uint8_t *message, const size_t message_size)
void(* FlutterDesktopBinaryReply)(const uint8_t *data, size_t data_size, void *user_data)
static FlutterDesktopTextureRegistrarRef HandleForTextureRegistrar(flutter::FlutterWindowsTextureRegistrar *registrar)
FlutterDesktopEngineRef FlutterDesktopViewControllerGetEngine(FlutterDesktopViewControllerRef controller)
void SetNextFrameCallback(fml::closure callback)
UINT GetDpiForMonitor(HMONITOR monitor)
bool MarkTextureFrameAvailable(int64_t texture_id)
WindowProcDelegateManager * window_proc_delegate_manager()
void RegisterTopLevelWindowProcDelegate(FlutterDesktopWindowProcCallback delegate, void *user_data)
struct _FlutterPlatformMessageResponseHandle FlutterDesktopMessageResponseHandle
bool FlutterDesktopEngineProcessExternalWindowMessage(FlutterDesktopEngineRef engine, HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam, LRESULT *result)
void FlutterDesktopPluginRegistrarSetDestructionHandler(FlutterDesktopPluginRegistrarRef registrar, FlutterDesktopOnPluginRegistrarDestroyed callback)
FlutterDesktopPluginRegistrarRef FlutterDesktopEngineGetPluginRegistrar(FlutterDesktopEngineRef engine, const char *plugin_name)
UINT GetDpiForHWND(HWND hwnd)
bool FlutterDesktopViewControllerHandleTopLevelWindowProc(FlutterDesktopViewControllerRef controller, HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam, LRESULT *result)
static flutter::FlutterWindowsEngine * EngineFromHandle(FlutterDesktopEngineRef ref)
FlutterDesktopMessengerRef FlutterDesktopPluginRegistrarGetMessenger(FlutterDesktopPluginRegistrarRef registrar)
FlutterDesktopMessengerRef ToRef()
Convert to FlutterDesktopMessengerRef.
bool SendPlatformMessage(const char *channel, const uint8_t *message, const size_t message_size, const FlutterDesktopBinaryReply reply, void *user_data)
void FlutterDesktopResyncOutputStreams()
FlutterDesktopMessengerRef messenger()
std::optional< LRESULT > ProcessExternalWindowMessage(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
void FlutterDesktopViewControllerForceRedraw(FlutterDesktopViewControllerRef controller)
FlutterDesktopMessengerRef FlutterDesktopMessengerLock(FlutterDesktopMessengerRef messenger)
struct FlutterDesktopView * FlutterDesktopViewRef
struct FlutterDesktopEngine * FlutterDesktopEngineRef
void UnregisterTopLevelWindowProcDelegate(FlutterDesktopWindowProcCallback delegate)
FlutterWindowsTextureRegistrar * texture_registrar()
FlutterDesktopTextureRegistrarRef FlutterDesktopRegistrarGetTextureRegistrar(FlutterDesktopPluginRegistrarRef registrar)
void AddPluginRegistrarDestructionCallback(FlutterDesktopOnPluginRegistrarDestroyed callback, FlutterDesktopPluginRegistrarRef registrar)
struct FlutterDesktopTextureRegistrar * FlutterDesktopTextureRegistrarRef
UINT FlutterDesktopGetDpiForMonitor(HMONITOR monitor)
uint64_t FlutterDesktopEngineProcessMessages(FlutterDesktopEngineRef engine)
flutter::FlutterWindowsEngine * engine
void FlutterDesktopTextureRegistrarUnregisterExternalTexture(FlutterDesktopTextureRegistrarRef texture_registrar, int64_t texture_id, void(*callback)(void *user_data), void *user_data)
void SendPlatformMessageResponse(const FlutterDesktopMessageResponseHandle *handle, const uint8_t *data, size_t data_length)
void FlutterDesktopViewControllerDestroy(FlutterDesktopViewControllerRef controller)
flutter::FlutterWindowsEngine * GetEngine() const
Getter for the engine field.
FlutterDesktopViewControllerRef FlutterDesktopViewControllerCreate(int width, int height, FlutterDesktopEngineRef engine)
void SetMessageCallback(const std::string &channel, FlutterDesktopMessageCallback callback, void *user_data)
void FlutterDesktopPluginRegistrarUnregisterTopLevelWindowProcDelegate(FlutterDesktopPluginRegistrarRef registrar, FlutterDesktopWindowProcCallback delegate)
void(* FlutterDesktopOnPluginRegistrarDestroyed)(FlutterDesktopPluginRegistrarRef)
IncomingMessageDispatcher * message_dispatcher()
FlutterDesktopMessenger * AddRef()
bool FlutterDesktopTextureRegistrarMarkExternalTextureFrameAvailable(FlutterDesktopTextureRegistrarRef texture_registrar, int64_t texture_id)
bool FlutterDesktopEngineDestroy(FlutterDesktopEngineRef engine_ref)
AngleSurfaceManager * surface_manager()
FlutterDesktopEngineRef FlutterDesktopEngineCreate(const FlutterDesktopEngineProperties *engine_properties)
struct FlutterDesktopMessenger * FlutterDesktopMessengerRef
void FlutterDesktopMessengerSendResponse(FlutterDesktopMessengerRef messenger, const FlutterDesktopMessageResponseHandle *handle, const uint8_t *data, size_t data_length)
bool FlutterDesktopMessengerIsAvailable(FlutterDesktopMessengerRef messenger)
static FlutterDesktopEngineRef HandleForEngine(flutter::FlutterWindowsEngine *engine)
static flutter::FlutterWindowsView * ViewFromHandle(FlutterDesktopViewRef ref)
FlutterWindowsView * view()
void(* VoidCallback)(void *)
static FlutterDesktopMessenger * FromRef(FlutterDesktopMessengerRef ref)
Convert from FlutterDesktopMessengerRef.
void FlutterDesktopEngineSetNextFrameCallback(FlutterDesktopEngineRef engine, VoidCallback callback, void *user_data)
std::unique_ptr< flutter::FlutterWindowsView > view
void FlutterDesktopMessengerRelease(FlutterDesktopMessengerRef messenger)
virtual PlatformWindow GetPlatformWindow() const
int64_t FlutterDesktopTextureRegistrarRegisterExternalTexture(FlutterDesktopTextureRegistrarRef texture_registrar, const FlutterDesktopTextureInfo *texture_info)
void FlutterDesktopMessengerSetCallback(FlutterDesktopMessengerRef messenger, const char *channel, FlutterDesktopMessageCallback callback, void *user_data)
IDXGIAdapter * FlutterDesktopViewGetGraphicsAdapter(FlutterDesktopViewRef view)
void(* FlutterDesktopMessageCallback)(FlutterDesktopMessengerRef, const FlutterDesktopMessage *, void *)
UINT FlutterDesktopGetDpiForHWND(HWND hwnd)
bool FlutterDesktopEngineRun(FlutterDesktopEngineRef engine, const char *entry_point)
FlutterWindowsEngine * GetEngine()
bool(* FlutterDesktopWindowProcCallback)(HWND, UINT, WPARAM, LPARAM, void *, LRESULT *result)
int64_t RegisterTexture(const FlutterDesktopTextureInfo *texture_info)
bool FlutterDesktopMessengerSendWithReply(FlutterDesktopMessengerRef messenger, const char *channel, const uint8_t *message, const size_t message_size, const FlutterDesktopBinaryReply reply, void *user_data)
void FlutterDesktopEngineReloadSystemFonts(FlutterDesktopEngineRef engine)
FlutterDesktopBinaryReply callback
FlutterDesktopMessengerRef FlutterDesktopMessengerAddRef(FlutterDesktopMessengerRef messenger)