Flutter Windows Embedder
flutter::FlutterEngine Class Reference

#include <flutter_engine.h>

Inheritance diagram for flutter::FlutterEngine:
flutter::PluginRegistry

Public Member Functions

 FlutterEngine (const DartProject &project)
 
virtual ~FlutterEngine ()
 
 FlutterEngine (FlutterEngine const &)=delete
 
FlutterEngineoperator= (FlutterEngine const &)=delete
 
bool Run ()
 
bool Run (const char *entry_point)
 
void ShutDown ()
 
std::chrono::nanoseconds ProcessMessages ()
 
void ReloadSystemFonts ()
 
void ReloadPlatformBrightness ()
 
FlutterDesktopPluginRegistrarRef GetRegistrarForPlugin (const std::string &plugin_name) override
 
BinaryMessengermessenger ()
 
void SetNextFrameCallback (std::function< void()> callback)
 
bool IsPlatformThread () const
 
void PostPlatformThreadTask (std::function< void()> callback)
 
std::optional< LRESULT > ProcessExternalWindowMessage (HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
 
bool GetGraphicsAdapter (IDXGIAdapter **adapter_out)
 
- Public Member Functions inherited from flutter::PluginRegistry
 PluginRegistry ()=default
 
virtual ~PluginRegistry ()=default
 
 PluginRegistry (PluginRegistry const &)=delete
 
PluginRegistryoperator= (PluginRegistry const &)=delete
 

Friends

class FlutterViewController
 

Detailed Description

Definition at line 28 of file flutter_engine.h.

Constructor & Destructor Documentation

◆ FlutterEngine() [1/2]

flutter::FlutterEngine::FlutterEngine ( const DartProject project)
explicit

Definition at line 15 of file flutter_engine.cc.

15  {
16  FlutterDesktopEngineProperties c_engine_properties = {};
17  c_engine_properties.assets_path = project.assets_path().c_str();
18  c_engine_properties.icu_data_path = project.icu_data_path().c_str();
19  c_engine_properties.aot_library_path = project.aot_library_path().c_str();
20  c_engine_properties.dart_entrypoint = project.dart_entrypoint().c_str();
21  c_engine_properties.gpu_preference =
22  static_cast<FlutterDesktopGpuPreference>(project.gpu_preference());
23  c_engine_properties.ui_thread_policy =
24  static_cast<FlutterDesktopUIThreadPolicy>(project.ui_thread_policy());
25  c_engine_properties.accessibility_mode =
27  project.accessibility_mode());
28  c_engine_properties.impeller_switch =
29  static_cast<FlutterDesktopImpellerSwitch>(project.impeller_switch());
30  c_engine_properties.enable_flutter_gpu = project.enable_flutter_gpu();
31 
32  const std::vector<std::string>& entrypoint_args =
33  project.dart_entrypoint_arguments();
34  std::vector<const char*> entrypoint_argv;
35  std::transform(
36  entrypoint_args.begin(), entrypoint_args.end(),
37  std::back_inserter(entrypoint_argv),
38  [](const std::string& arg) -> const char* { return arg.c_str(); });
39 
40  c_engine_properties.dart_entrypoint_argc =
41  static_cast<int>(entrypoint_argv.size());
42  c_engine_properties.dart_entrypoint_argv =
43  entrypoint_argv.empty() ? nullptr : entrypoint_argv.data();
44 
45  engine_ = FlutterDesktopEngineCreate(&c_engine_properties);
46 
47  auto core_messenger = FlutterDesktopEngineGetMessenger(engine_);
48  messenger_ = std::make_unique<BinaryMessengerImpl>(core_messenger);
49 }
FlutterDesktopEngineRef FlutterDesktopEngineCreate(const FlutterDesktopEngineProperties *engine_properties)
FlutterDesktopMessengerRef FlutterDesktopEngineGetMessenger(FlutterDesktopEngineRef engine)
FlutterDesktopUIThreadPolicy
FlutterDesktopGpuPreference
FlutterDesktopImpellerSwitch
FlutterDesktopAccessibilityMode
FlutterDesktopAccessibilityMode accessibility_mode
FlutterDesktopImpellerSwitch impeller_switch
FlutterDesktopUIThreadPolicy ui_thread_policy
FlutterDesktopGpuPreference gpu_preference

References flutter::DartProject::accessibility_mode(), FlutterDesktopEngineProperties::accessibility_mode, FlutterDesktopEngineProperties::aot_library_path, FlutterDesktopEngineProperties::assets_path, flutter::DartProject::dart_entrypoint(), FlutterDesktopEngineProperties::dart_entrypoint, FlutterDesktopEngineProperties::dart_entrypoint_argc, flutter::DartProject::dart_entrypoint_arguments(), FlutterDesktopEngineProperties::dart_entrypoint_argv, flutter::DartProject::enable_flutter_gpu(), FlutterDesktopEngineProperties::enable_flutter_gpu, FlutterDesktopEngineCreate(), FlutterDesktopEngineGetMessenger(), flutter::DartProject::gpu_preference(), FlutterDesktopEngineProperties::gpu_preference, FlutterDesktopEngineProperties::icu_data_path, flutter::DartProject::impeller_switch(), FlutterDesktopEngineProperties::impeller_switch, flutter::DartProject::ui_thread_policy(), and FlutterDesktopEngineProperties::ui_thread_policy.

◆ ~FlutterEngine()

flutter::FlutterEngine::~FlutterEngine ( )
virtual

Definition at line 51 of file flutter_engine.cc.

51  {
52  ShutDown();
53 }

References ShutDown().

◆ FlutterEngine() [2/2]

flutter::FlutterEngine::FlutterEngine ( FlutterEngine const &  )
delete

Member Function Documentation

◆ GetGraphicsAdapter()

bool flutter::FlutterEngine::GetGraphicsAdapter ( IDXGIAdapter **  adapter_out)
inline

Definition at line 110 of file flutter_engine.h.

110  {
111  return FlutterDesktopEngineGetGraphicsAdapter(engine_, adapter_out);
112  }
bool FlutterDesktopEngineGetGraphicsAdapter(FlutterDesktopEngineRef engine, IDXGIAdapter **adapter_out)

References FlutterDesktopEngineGetGraphicsAdapter().

◆ GetRegistrarForPlugin()

FlutterDesktopPluginRegistrarRef flutter::FlutterEngine::GetRegistrarForPlugin ( const std::string &  plugin_name)
overridevirtual

Implements flutter::PluginRegistry.

Definition at line 91 of file flutter_engine.cc.

92  {
93  if (!engine_) {
94  std::cerr << "Cannot get plugin registrar on an engine that isn't running; "
95  "call Run first."
96  << std::endl;
97  return nullptr;
98  }
99  return FlutterDesktopEngineGetPluginRegistrar(engine_, plugin_name.c_str());
100 }
FlutterDesktopPluginRegistrarRef FlutterDesktopEngineGetPluginRegistrar(FlutterDesktopEngineRef engine, const char *plugin_name)

References FlutterDesktopEngineGetPluginRegistrar().

◆ IsPlatformThread()

bool flutter::FlutterEngine::IsPlatformThread ( ) const

Definition at line 114 of file flutter_engine.cc.

114  {
115  if (!engine_) {
116  std::cerr
117  << "Cannot check platform thread on an engine that failed creation."
118  << std::endl;
119  return false;
120  }
121  return FlutterDesktopEngineIsPlatformThread(engine_);
122 }
bool FlutterDesktopEngineIsPlatformThread(FlutterDesktopEngineRef engine)

References FlutterDesktopEngineIsPlatformThread().

◆ messenger()

BinaryMessenger* flutter::FlutterEngine::messenger ( )
inline

Definition at line 80 of file flutter_engine.h.

80 { return messenger_.get(); }

Referenced by flutter::TEST().

◆ operator=()

FlutterEngine& flutter::FlutterEngine::operator= ( FlutterEngine const &  )
delete

◆ PostPlatformThreadTask()

void flutter::FlutterEngine::PostPlatformThreadTask ( std::function< void()>  callback)

Definition at line 124 of file flutter_engine.cc.

124  {
125  if (!callback) {
126  return;
127  }
129  engine_,
130  /*callback=*/
131  [](void* user_data) {
132  std::unique_ptr<std::function<void()>> cb{
133  static_cast<std::function<void()>*>(user_data)};
134  (*cb)();
135  },
136  /*on_cancel=*/
137  [](void* user_data) {
138  delete static_cast<std::function<void()>*>(user_data);
139  },
140  /*user_data=*/new std::function<void()>(std::move(callback)));
141 }
void FlutterDesktopEnginePostPlatformThreadTask(FlutterDesktopEngineRef engine, VoidCallback callback, VoidCallback on_cancel, void *user_data)
FlutterDesktopBinaryReply callback

References callback, FlutterDesktopEnginePostPlatformThreadTask(), and user_data.

◆ ProcessExternalWindowMessage()

std::optional< LRESULT > flutter::FlutterEngine::ProcessExternalWindowMessage ( HWND  hwnd,
UINT  message,
WPARAM  wparam,
LPARAM  lparam 
)

Definition at line 143 of file flutter_engine.cc.

147  {
148  LRESULT result;
150  engine_, hwnd, message, wparam, lparam, &result)) {
151  return result;
152  }
153  return std::nullopt;
154 }
bool FlutterDesktopEngineProcessExternalWindowMessage(FlutterDesktopEngineRef engine, HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam, LRESULT *result)
Win32Message message

References FlutterDesktopEngineProcessExternalWindowMessage(), and message.

Referenced by flutter::TEST().

◆ ProcessMessages()

std::chrono::nanoseconds flutter::FlutterEngine::ProcessMessages ( )

Definition at line 83 of file flutter_engine.cc.

83  {
84  return std::chrono::nanoseconds(FlutterDesktopEngineProcessMessages(engine_));
85 }
uint64_t FlutterDesktopEngineProcessMessages(FlutterDesktopEngineRef engine)

References FlutterDesktopEngineProcessMessages().

Referenced by flutter::TEST().

◆ ReloadPlatformBrightness()

void flutter::FlutterEngine::ReloadPlatformBrightness ( )

◆ ReloadSystemFonts()

void flutter::FlutterEngine::ReloadSystemFonts ( )

Definition at line 87 of file flutter_engine.cc.

87  {
89 }
void FlutterDesktopEngineReloadSystemFonts(FlutterDesktopEngineRef engine)

References FlutterDesktopEngineReloadSystemFonts().

Referenced by flutter::TEST().

◆ Run() [1/2]

bool flutter::FlutterEngine::Run ( )

Definition at line 55 of file flutter_engine.cc.

55  {
56  return Run(nullptr);
57 }

Referenced by flutter::TEST(), and flutter::testing::TEST_F().

◆ Run() [2/2]

bool flutter::FlutterEngine::Run ( const char *  entry_point)

Definition at line 59 of file flutter_engine.cc.

59  {
60  if (!engine_) {
61  std::cerr << "Cannot run an engine that failed creation." << std::endl;
62  return false;
63  }
64  if (run_succeeded_) {
65  std::cerr << "Cannot run an engine more than once." << std::endl;
66  return false;
67  }
68  bool run_succeeded = FlutterDesktopEngineRun(engine_, entry_point);
69  if (!run_succeeded) {
70  std::cerr << "Failed to start engine." << std::endl;
71  }
72  run_succeeded_ = true;
73  return run_succeeded;
74 }
bool FlutterDesktopEngineRun(FlutterDesktopEngineRef engine, const char *entry_point)

References FlutterDesktopEngineRun().

◆ SetNextFrameCallback()

void flutter::FlutterEngine::SetNextFrameCallback ( std::function< void()>  callback)

Definition at line 102 of file flutter_engine.cc.

102  {
103  next_frame_callback_ = std::move(callback);
105  engine_,
106  [](void* user_data) {
107  FlutterEngine* self = static_cast<FlutterEngine*>(user_data);
108  self->next_frame_callback_();
109  self->next_frame_callback_ = nullptr;
110  },
111  this);
112 }
FlutterEngine(const DartProject &project)
void FlutterDesktopEngineSetNextFrameCallback(FlutterDesktopEngineRef engine, VoidCallback callback, void *user_data)

References callback, FlutterDesktopEngineSetNextFrameCallback(), and user_data.

Referenced by flutter::TEST().

◆ ShutDown()

void flutter::FlutterEngine::ShutDown ( )

Definition at line 76 of file flutter_engine.cc.

76  {
77  if (engine_ && owns_engine_) {
79  }
80  engine_ = nullptr;
81 }
bool FlutterDesktopEngineDestroy(FlutterDesktopEngineRef engine_ref)

References FlutterDesktopEngineDestroy().

Referenced by flutter::TEST(), and ~FlutterEngine().

Friends And Related Function Documentation

◆ FlutterViewController

friend class FlutterViewController
friend

Definition at line 116 of file flutter_engine.h.


The documentation for this class was generated from the following files: