Own Android platform services and narrow legacy fallback

This commit is contained in:
2026-06-17 14:53:49 +02:00
parent 74abddd81e
commit 1e9235cb6a
11 changed files with 417 additions and 109 deletions

View File

@@ -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;
};

View File

@@ -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;
};