X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;ds=sidebyside;f=flempires%2Flinux%2Fmain.cc;fp=flempires%2Flinux%2Fmain.cc;h=47b0343b5038aaaa4167a0884267092c6af775e1;hb=5a60d2577ec9346fcaacd04260fc4a4c27696e92;hp=0000000000000000000000000000000000000000;hpb=b9c184f2a7fd491e736c32b02baa38b18f906eb9;p=lmno.games diff --git a/flempires/linux/main.cc b/flempires/linux/main.cc new file mode 100644 index 0000000..47b0343 --- /dev/null +++ b/flempires/linux/main.cc @@ -0,0 +1,67 @@ +#include +#include +#include + +#include +#include +#include +#include + +#include "flutter/generated_plugin_registrant.h" +#include "window_configuration.h" + +namespace { + +// Returns the path of the directory containing this executable, or an empty +// string if the directory cannot be found. +std::string GetExecutableDirectory() { + char buffer[PATH_MAX + 1]; + ssize_t length = readlink("/proc/self/exe", buffer, sizeof(buffer)); + if (length > PATH_MAX) { + std::cerr << "Couldn't locate executable" << std::endl; + return ""; + } + std::string executable_path(buffer, length); + size_t last_separator_position = executable_path.find_last_of('/'); + if (last_separator_position == std::string::npos) { + std::cerr << "Unabled to find parent directory of " << executable_path + << std::endl; + return ""; + } + return executable_path.substr(0, last_separator_position); +} + +} // namespace + +int main(int argc, char **argv) { + // Resources are located relative to the executable. + std::string base_directory = GetExecutableDirectory(); + if (base_directory.empty()) { + base_directory = "."; + } + std::string data_directory = base_directory + "/data"; + std::string assets_path = data_directory + "/flutter_assets"; + std::string icu_data_path = data_directory + "/icudtl.dat"; + + // Arguments for the Flutter Engine. + std::vector arguments; + + flutter::FlutterWindowController flutter_controller(icu_data_path); + flutter::WindowProperties window_properties = {}; + window_properties.title = kFlutterWindowTitle; + window_properties.width = kFlutterWindowWidth; + window_properties.height = kFlutterWindowHeight; + + // Start the engine. + if (!flutter_controller.CreateWindow(window_properties, assets_path, + arguments)) { + return EXIT_FAILURE; + } + RegisterPlugins(&flutter_controller); + + // Run until the window is closed. + while (flutter_controller.RunEventLoopWithTimeout( + std::chrono::milliseconds::max())) { + } + return EXIT_SUCCESS; +}