From e343557a3f71fbdeb22344df2b921ee3bd1d0b38 Mon Sep 17 00:00:00 2001 From: omigamedev Date: Wed, 17 Jun 2026 12:05:52 +0200 Subject: [PATCH] Own Web legacy platform services explicitly --- docs/modernization/debt.md | 9 +++ docs/modernization/roadmap.md | 9 +++ docs/modernization/tasks.md | 15 +++- .../legacy_platform_services.cpp | 33 +++++--- .../legacy_platform_services.h | 1 + src/platform_legacy/legacy_platform_state.cpp | 81 ------------------- src/platform_legacy/legacy_platform_state.h | 23 ------ webgl/src/main.cpp | 3 +- 8 files changed, 57 insertions(+), 117 deletions(-) diff --git a/docs/modernization/debt.md b/docs/modernization/debt.md index 1765df4e..fefd79f0 100644 --- a/docs/modernization/debt.md +++ b/docs/modernization/debt.md @@ -18,6 +18,15 @@ agent or engineer to remove them without reconstructing context from chat. ## Reductions +- 2026-06-17: `DEBT-0017`/`DEBT-0050`/`DEBT-0053`/`DEBT-0057` were narrowed + again. `src/platform_legacy/legacy_platform_services.*` now takes an + explicit `WebPlatformServices*` dependency through + `create_platform_services(...)`, `webgl/src/main.cpp` now threads its owned + Web service directly into that legacy adapter, and + `src/platform_legacy/legacy_platform_state.*` no longer carries the retained + `active_legacy_web_platform_services()` / `try_*legacy_web*` dispatch layer; + retained non-Windows adapter execution still exists, but the live WebGL path + no longer depends on a legacy Web fallback singleton-style bridge. - 2026-06-17: `DEBT-0017` was narrowed again. `src/platform_legacy/legacy_platform_services.*` no longer exposes the dead `pp::platform::legacy::platform_services()` fallback singleton; Linux, diff --git a/docs/modernization/roadmap.md b/docs/modernization/roadmap.md index cc3ba435..9b459769 100644 --- a/docs/modernization/roadmap.md +++ b/docs/modernization/roadmap.md @@ -70,6 +70,15 @@ What is already real: - `pp_app_core` Latest slice: +- `src/platform_legacy/legacy_platform_services.*` now takes an explicit + `WebPlatformServices*` dependency through `create_platform_services(...)` + instead of routing WebGL publish/flush/default-canvas/save-prepared-file + behavior through retained `try_*legacy_web*` fallback helpers. +- `webgl/src/main.cpp` now creates the owned Web service first and threads it + directly into its owned legacy `PlatformServices` instance. +- `src/platform_legacy/legacy_platform_state.*` is down to the retained Web + service factory only; the old `active_legacy_web_platform_services()` and + `try_*legacy_web*` dispatch layer are gone. - `src/platform_legacy/legacy_platform_services.*` no longer exposes the dead `pp::platform::legacy::platform_services()` singleton accessor. - Linux, WebGL, and Android were already on owned diff --git a/docs/modernization/tasks.md b/docs/modernization/tasks.md index da9f170b..3d8e34eb 100644 --- a/docs/modernization/tasks.md +++ b/docs/modernization/tasks.md @@ -78,6 +78,15 @@ Completed, blocked, and superseded task history moved to the queue is now ordered by code movement instead. Current slice: +- `src/platform_legacy/legacy_platform_services.*` now takes an explicit + `WebPlatformServices*` dependency through `create_platform_services(...)` + instead of routing WebGL publish/flush/default-canvas/save-prepared-file + behavior through retained `try_*legacy_web*` fallback helpers. +- `webgl/src/main.cpp` now creates the owned Web service first and threads it + directly into its owned legacy `PlatformServices` instance. +- `src/platform_legacy/legacy_platform_state.*` is down to the retained Web + service factory only; the old `active_legacy_web_platform_services()` and + `try_*legacy_web*` dispatch layer are gone. - `src/platform_legacy/legacy_platform_services.*` no longer exposes the dead `pp::platform::legacy::platform_services()` singleton accessor. - Linux, WebGL, and Android were already on owned @@ -194,9 +203,9 @@ Current slice: singleton. - `PanoPainter-OSX/main.cpp` and `PanoPainter/GameViewController.m` now seed Apple-owned storage paths directly. -- `src/platform_legacy/legacy_platform_state.*` now exposes - `create_legacy_web_platform_services()` plus an explicit binding hook for the - retained Web service surface. +- `src/platform_legacy/legacy_platform_state.*` now only exposes + `create_legacy_web_platform_services()` for the retained default Web service + implementation. - `webgl/src/main.cpp` now owns and binds the Web platform-services implementation explicitly instead of relying only on the retained fallback object in legacy platform state. diff --git a/src/platform_legacy/legacy_platform_services.cpp b/src/platform_legacy/legacy_platform_services.cpp index 04ca58d9..053624df 100644 --- a/src/platform_legacy/legacy_platform_services.cpp +++ b/src/platform_legacy/legacy_platform_services.cpp @@ -1,6 +1,5 @@ #include "pch.h" #include "platform_legacy/legacy_platform_services.h" -#include "platform_legacy/legacy_platform_state.h" #include @@ -54,6 +53,7 @@ public: #ifdef __ANDROID__ , android_storage_paths_(std::move(config.android_storage_paths)) #endif + , web_platform_services_(config.web_platform_services) { } @@ -272,8 +272,11 @@ public: void publish_exported_image(std::string_view path) override { const auto family = pp::platform::current_platform_family(); - if (pp::platform::legacy::try_publish_legacy_web_exported_image(family, path)) + if (family == pp::platform::PlatformFamily::webgl) + { + active_web_platform_services().publish_exported_image(path); return; + } if (!pp::platform::platform_publishes_exported_images(family)) { (void)path; @@ -289,8 +292,11 @@ public: void flush_persistent_storage() override { const auto family = pp::platform::current_platform_family(); - if (pp::platform::legacy::try_flush_legacy_web_persistent_storage(family)) + if (family == pp::platform::PlatformFamily::webgl) + { + active_web_platform_services().flush_persistent_storage(); return; + } if (!pp::platform::platform_flushes_persistent_storage(family)) return; } @@ -456,9 +462,8 @@ public: [[nodiscard]] int default_canvas_resolution() override { const auto family = pp::platform::current_platform_family(); - int resolution = 0; - if (pp::platform::legacy::try_default_legacy_web_canvas_resolution(family, resolution)) - return resolution; + if (family == pp::platform::PlatformFamily::webgl) + return active_web_platform_services().default_canvas_resolution(); return pp::platform::platform_default_canvas_resolution(family); } @@ -535,12 +540,14 @@ public: pp::platform::PreparedFileCallback callback) override { const auto family = pp::platform::current_platform_family(); - if (pp::platform::legacy::try_save_legacy_web_prepared_file( - family, + if (family == pp::platform::PlatformFamily::webgl) + { + active_web_platform_services().save_prepared_file( path, suggested_name, - std::move(callback))) + std::move(callback)); return; + } const std::string value(path); const std::string name(suggested_name); @@ -556,6 +563,13 @@ public: } private: + [[nodiscard]] pp::platform::WebPlatformServices& active_web_platform_services() const noexcept + { + if (web_platform_services_) + return *web_platform_services_; + return pp::platform::active_web_platform_services(); + } + static void invoke_legacy_glfw_shell_callback(const std::function& callback) { if (callback) @@ -566,6 +580,7 @@ private: #ifdef __ANDROID__ std::shared_ptr android_storage_paths_; #endif + pp::platform::WebPlatformServices* web_platform_services_ = nullptr; }; } diff --git a/src/platform_legacy/legacy_platform_services.h b/src/platform_legacy/legacy_platform_services.h index 98549d75..196dea30 100644 --- a/src/platform_legacy/legacy_platform_services.h +++ b/src/platform_legacy/legacy_platform_services.h @@ -16,6 +16,7 @@ struct LegacyGlfwPlatformShell { struct LegacyPlatformServicesConfig { LegacyGlfwPlatformShell glfw_shell; std::shared_ptr android_storage_paths; + pp::platform::WebPlatformServices* web_platform_services = nullptr; }; [[nodiscard]] std::unique_ptr create_platform_services( diff --git a/src/platform_legacy/legacy_platform_state.cpp b/src/platform_legacy/legacy_platform_state.cpp index c8832237..4e9263d5 100644 --- a/src/platform_legacy/legacy_platform_state.cpp +++ b/src/platform_legacy/legacy_platform_state.cpp @@ -50,90 +50,9 @@ public: } -[[nodiscard]] pp::platform::WebPlatformServices& active_legacy_web_platform_services() -{ - static RetainedWebPlatformServices services; - return pp::platform::resolve_web_platform_services(services); -} - [[nodiscard]] std::unique_ptr create_legacy_web_platform_services() { return std::make_unique(); } -[[nodiscard]] bool handles_legacy_web_platform_family(pp::platform::PlatformFamily family) noexcept -{ - return family == pp::platform::PlatformFamily::webgl; -} - -void publish_legacy_web_exported_image(std::string_view path) -{ - active_legacy_web_platform_services().publish_exported_image(path); -} - -[[nodiscard]] bool try_publish_legacy_web_exported_image( - pp::platform::PlatformFamily family, - std::string_view path) -{ - if (!handles_legacy_web_platform_family(family)) - return false; - - publish_legacy_web_exported_image(path); - return true; -} - -void flush_legacy_web_persistent_storage() -{ - active_legacy_web_platform_services().flush_persistent_storage(); -} - -[[nodiscard]] bool try_flush_legacy_web_persistent_storage(pp::platform::PlatformFamily family) -{ - if (!handles_legacy_web_platform_family(family)) - return false; - - flush_legacy_web_persistent_storage(); - return true; -} - -[[nodiscard]] int default_legacy_web_canvas_resolution() noexcept -{ - return active_legacy_web_platform_services().default_canvas_resolution(); -} - -[[nodiscard]] bool try_default_legacy_web_canvas_resolution( - pp::platform::PlatformFamily family, - int& resolution) noexcept -{ - if (!handles_legacy_web_platform_family(family)) - return false; - - resolution = default_legacy_web_canvas_resolution(); - return true; -} - -void save_legacy_web_prepared_file( - std::string_view path, - std::string_view suggested_name, - pp::platform::PreparedFileCallback callback) -{ - active_legacy_web_platform_services().save_prepared_file( - path, - suggested_name, - std::move(callback)); -} - -[[nodiscard]] bool try_save_legacy_web_prepared_file( - pp::platform::PlatformFamily family, - std::string_view path, - std::string_view suggested_name, - pp::platform::PreparedFileCallback callback) -{ - if (!handles_legacy_web_platform_family(family)) - return false; - - save_legacy_web_prepared_file(path, suggested_name, std::move(callback)); - return true; -} - } diff --git a/src/platform_legacy/legacy_platform_state.h b/src/platform_legacy/legacy_platform_state.h index d1bf4bf8..2e77ce48 100644 --- a/src/platform_legacy/legacy_platform_state.h +++ b/src/platform_legacy/legacy_platform_state.h @@ -2,33 +2,10 @@ #include -#include "platform_api/platform_policy.h" #include "platform_api/platform_services.h" namespace pp::platform::legacy { -[[nodiscard]] pp::platform::WebPlatformServices& active_legacy_web_platform_services(); [[nodiscard]] std::unique_ptr create_legacy_web_platform_services(); -[[nodiscard]] bool handles_legacy_web_platform_family(pp::platform::PlatformFamily family) noexcept; -void publish_legacy_web_exported_image(std::string_view path); -[[nodiscard]] bool try_publish_legacy_web_exported_image( - pp::platform::PlatformFamily family, - std::string_view path); -void flush_legacy_web_persistent_storage(); -[[nodiscard]] bool try_flush_legacy_web_persistent_storage( - pp::platform::PlatformFamily family); -[[nodiscard]] int default_legacy_web_canvas_resolution() noexcept; -[[nodiscard]] bool try_default_legacy_web_canvas_resolution( - pp::platform::PlatformFamily family, - int& resolution) noexcept; -void save_legacy_web_prepared_file( - std::string_view path, - std::string_view suggested_name, - pp::platform::PreparedFileCallback callback); -[[nodiscard]] bool try_save_legacy_web_prepared_file( - pp::platform::PlatformFamily family, - std::string_view path, - std::string_view suggested_name, - pp::platform::PreparedFileCallback callback); } diff --git a/webgl/src/main.cpp b/webgl/src/main.cpp index 9ded244a..9205094d 100644 --- a/webgl/src/main.cpp +++ b/webgl/src/main.cpp @@ -203,13 +203,14 @@ int main() if (glfwInit() != GL_TRUE) printf("Failed to init GLFW"); wnd = glfwCreateWindow(1024, 768, "PanoPainter", nullptr, nullptr); + g_web_platform_services = pp::platform::legacy::create_legacy_web_platform_services(); g_platform_services = pp::platform::legacy::create_platform_services({ .glfw_shell = { .acquire_render_context = [wnd] { glfwMakeContextCurrent(wnd); }, .present_render_context = [wnd] { glfwSwapBuffers(wnd); }, }, + .web_platform_services = g_web_platform_services.get(), }); - g_web_platform_services = pp::platform::legacy::create_legacy_web_platform_services(); glfwMakeContextCurrent(wnd); /*