Own Android platform services and narrow legacy fallback
This commit is contained in:
@@ -9,9 +9,7 @@
|
||||
#include "platform_api/platform_policy.h"
|
||||
#include "renderer_gl/opengl_capabilities.h"
|
||||
|
||||
#ifdef __ANDROID__
|
||||
#include "main.h"
|
||||
#elif __LINUX__
|
||||
#ifdef __LINUX__
|
||||
#include <tinyfiledialogs.h>
|
||||
#include "platform_linux/linux_platform_services.h"
|
||||
std::string linux_home_path();
|
||||
@@ -33,10 +31,6 @@ class LegacyPlatformServices final : public pp::platform::PlatformServices {
|
||||
public:
|
||||
explicit LegacyPlatformServices(pp::platform::legacy::LegacyPlatformServicesConfig config = {})
|
||||
: glfw_shell_(std::move(config.glfw_shell))
|
||||
, android_bridge_(std::move(config.android_bridge))
|
||||
#ifdef __ANDROID__
|
||||
, android_storage_paths_(std::move(config.android_storage_paths))
|
||||
#endif
|
||||
, web_platform_services_(config.web_platform_services)
|
||||
{
|
||||
}
|
||||
@@ -72,8 +66,6 @@ public:
|
||||
data_path + "/frames",
|
||||
{},
|
||||
};
|
||||
#elif defined(__ANDROID__)
|
||||
return android_storage_paths_ ? *android_storage_paths_ : pp::platform::PlatformStoragePaths {};
|
||||
#else
|
||||
return {};
|
||||
#endif
|
||||
@@ -85,34 +77,18 @@ public:
|
||||
|
||||
void trigger_crash_test() override
|
||||
{
|
||||
#if defined(__ANDROID__)
|
||||
int *x = nullptr; *x = 42;
|
||||
LOG("%d", *x);
|
||||
#endif
|
||||
}
|
||||
|
||||
[[nodiscard]] std::string clipboard_text() override
|
||||
{
|
||||
#ifdef __ANDROID__
|
||||
if (android_bridge_.clipboard_text)
|
||||
return android_bridge_.clipboard_text();
|
||||
return {};
|
||||
#else
|
||||
return {};
|
||||
#endif
|
||||
}
|
||||
|
||||
[[nodiscard]] bool set_clipboard_text(std::string_view text) override
|
||||
{
|
||||
const std::string value(text);
|
||||
#ifdef __ANDROID__
|
||||
if (android_bridge_.set_clipboard_text)
|
||||
return android_bridge_.set_clipboard_text(value);
|
||||
return false;
|
||||
#else
|
||||
(void)value;
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
void set_cursor_visible(bool visible) override
|
||||
@@ -122,54 +98,31 @@ public:
|
||||
|
||||
void set_virtual_keyboard_visible(bool visible) override
|
||||
{
|
||||
#ifdef __ANDROID__
|
||||
if (android_bridge_.set_virtual_keyboard_visible)
|
||||
android_bridge_.set_virtual_keyboard_visible(visible);
|
||||
#else
|
||||
(void)visible;
|
||||
#endif
|
||||
}
|
||||
|
||||
void attach_ui_thread() override
|
||||
{
|
||||
#ifdef __ANDROID__
|
||||
if (android_bridge_.attach_ui_thread)
|
||||
android_bridge_.attach_ui_thread();
|
||||
#endif
|
||||
}
|
||||
|
||||
void detach_ui_thread() override
|
||||
{
|
||||
#ifdef __ANDROID__
|
||||
if (android_bridge_.detach_ui_thread)
|
||||
android_bridge_.detach_ui_thread();
|
||||
#endif
|
||||
}
|
||||
|
||||
void acquire_render_context() override
|
||||
{
|
||||
#if __ANDROID__
|
||||
if (android_bridge_.acquire_render_context)
|
||||
android_bridge_.acquire_render_context();
|
||||
#elif __LINUX__ || __WEB__
|
||||
#if __LINUX__ || __WEB__
|
||||
invoke_legacy_glfw_shell_callback(glfw_shell_.acquire_render_context);
|
||||
#endif
|
||||
}
|
||||
|
||||
void release_render_context() override
|
||||
{
|
||||
#if __ANDROID__
|
||||
if (android_bridge_.release_render_context)
|
||||
android_bridge_.release_render_context();
|
||||
#endif
|
||||
}
|
||||
|
||||
void present_render_context() override
|
||||
{
|
||||
#if __ANDROID__
|
||||
if (android_bridge_.present_render_context)
|
||||
android_bridge_.present_render_context();
|
||||
#elif __LINUX__ || __WEB__
|
||||
#if __LINUX__ || __WEB__
|
||||
invoke_legacy_glfw_shell_callback(glfw_shell_.present_render_context);
|
||||
#endif
|
||||
}
|
||||
@@ -279,10 +232,7 @@ public:
|
||||
|
||||
void pick_image(pp::platform::PickedPathCallback callback) override
|
||||
{
|
||||
#ifdef __ANDROID__
|
||||
if (android_bridge_.pick_file)
|
||||
android_bridge_.pick_file(std::move(callback));
|
||||
#elif __LINUX__
|
||||
#ifdef __LINUX__
|
||||
if (auto p = tinyfd_openFileDialog("Open File", "", 0, nullptr, nullptr, false))
|
||||
invoke_picked_path_if_selected(p, callback);
|
||||
#elif __WEB__
|
||||
@@ -294,10 +244,7 @@ public:
|
||||
|
||||
void pick_file(std::vector<std::string> file_types, pp::platform::PickedPathCallback callback) override
|
||||
{
|
||||
#ifdef __ANDROID__
|
||||
if (android_bridge_.pick_file)
|
||||
android_bridge_.pick_file(std::move(callback));
|
||||
#elif __LINUX__
|
||||
#ifdef __LINUX__
|
||||
if (auto p = tinyfd_openFileDialog("Open File", "", 0, nullptr, nullptr, false))
|
||||
invoke_picked_path_if_selected(p, callback);
|
||||
#elif __WEB__
|
||||
@@ -310,13 +257,8 @@ public:
|
||||
|
||||
void pick_save_file(std::vector<std::string> file_types, pp::platform::PickedPathCallback callback) override
|
||||
{
|
||||
#if __ANDROID__
|
||||
if (android_bridge_.pick_save_file)
|
||||
android_bridge_.pick_save_file(std::move(callback));
|
||||
#else
|
||||
(void)file_types;
|
||||
(void)callback;
|
||||
#endif
|
||||
}
|
||||
|
||||
void pick_directory(pp::platform::PickedPathCallback callback) override
|
||||
@@ -472,10 +414,6 @@ private:
|
||||
}
|
||||
|
||||
pp::platform::legacy::LegacyGlfwPlatformShell glfw_shell_;
|
||||
pp::platform::legacy::LegacyAndroidPlatformBridge android_bridge_;
|
||||
#ifdef __ANDROID__
|
||||
std::shared_ptr<pp::platform::PlatformStoragePaths> android_storage_paths_;
|
||||
#endif
|
||||
pp::platform::WebPlatformServices* web_platform_services_ = nullptr;
|
||||
};
|
||||
|
||||
|
||||
@@ -13,23 +13,8 @@ struct LegacyGlfwPlatformShell {
|
||||
std::function<void()> request_app_close;
|
||||
};
|
||||
|
||||
struct LegacyAndroidPlatformBridge {
|
||||
std::function<std::string()> clipboard_text;
|
||||
std::function<bool(std::string_view text)> set_clipboard_text;
|
||||
std::function<void(bool visible)> set_virtual_keyboard_visible;
|
||||
std::function<void()> attach_ui_thread;
|
||||
std::function<void()> detach_ui_thread;
|
||||
std::function<void()> acquire_render_context;
|
||||
std::function<void()> release_render_context;
|
||||
std::function<void()> present_render_context;
|
||||
std::function<void(PickedPathCallback callback)> pick_file;
|
||||
std::function<void(PickedPathCallback callback)> pick_save_file;
|
||||
};
|
||||
|
||||
struct LegacyPlatformServicesConfig {
|
||||
LegacyGlfwPlatformShell glfw_shell;
|
||||
LegacyAndroidPlatformBridge android_bridge;
|
||||
std::shared_ptr<pp::platform::PlatformStoragePaths> android_storage_paths;
|
||||
pp::platform::WebPlatformServices* web_platform_services = nullptr;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user