diff --git a/docs/modernization/roadmap.md b/docs/modernization/roadmap.md index d4496874..e8a7807c 100644 --- a/docs/modernization/roadmap.md +++ b/docs/modernization/roadmap.md @@ -70,6 +70,12 @@ What is already real: - `pp_app_core` Latest slice: +- `src/platform_legacy/legacy_platform_services.*` now exposes an ownable + `create_platform_services()` entrypoint alongside the legacy fallback + accessor. +- `linux/src/main.cpp` now owns a local legacy `PlatformServices` instance and + binds it into `App` explicitly instead of binding the process-global legacy + accessor directly. - `src/app_events.cpp` no longer silently falls back to `pp::platform::legacy::platform_services()` when `App` has no bound platform services; the live app path now expects explicit platform-service ownership. diff --git a/docs/modernization/tasks.md b/docs/modernization/tasks.md index 493fbfda..a2e097c8 100644 --- a/docs/modernization/tasks.md +++ b/docs/modernization/tasks.md @@ -78,6 +78,12 @@ 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 exposes an ownable + `create_platform_services()` entrypoint while keeping the fallback singleton + for non-migrated platforms. +- `linux/src/main.cpp` now binds an owned legacy `PlatformServices` instance + into `App`, making Linux the first explicit per-entrypoint owner of that + legacy service implementation. - `src/app_events.cpp` no longer hides a fallback to `pp::platform::legacy::platform_services()`; touched app platform dispatch now expects an explicitly bound platform-services pointer. diff --git a/linux/src/main.cpp b/linux/src/main.cpp index 06324274..790b5739 100644 --- a/linux/src/main.cpp +++ b/linux/src/main.cpp @@ -55,6 +55,7 @@ void error_log(int code, const char * s) int main(int argc, char** args) { + auto platform_services = pp::platform::legacy::create_platform_services(); GLFWwindow* wnd = nullptr; glfwSetErrorCallback(error_log); if (!glfwInit()) @@ -121,7 +122,7 @@ int main(int argc, char** args) App::I = &app; pp::platform::legacy::set_legacy_glfw_window(wnd); - app.set_platform_services(&pp::platform::legacy::platform_services()); + app.set_platform_services(platform_services.get()); app.initLog(); app.create(); app.width = 800; diff --git a/src/platform_legacy/legacy_platform_services.cpp b/src/platform_legacy/legacy_platform_services.cpp index fa6fc42c..81fe9461 100644 --- a/src/platform_legacy/legacy_platform_services.cpp +++ b/src/platform_legacy/legacy_platform_services.cpp @@ -2,6 +2,8 @@ #include "platform_legacy/legacy_platform_services.h" #include "platform_legacy/legacy_platform_state.h" +#include + #include "legacy_ui_gl_dispatch.h" #include "log.h" #include "platform_apple/apple_platform_services.h" @@ -552,4 +554,9 @@ PlatformServices& platform_services() static LegacyPlatformServices services; return services; } + +std::unique_ptr create_platform_services() +{ + return std::make_unique(); +} } diff --git a/src/platform_legacy/legacy_platform_services.h b/src/platform_legacy/legacy_platform_services.h index 67cdfc43..24d7cdb3 100644 --- a/src/platform_legacy/legacy_platform_services.h +++ b/src/platform_legacy/legacy_platform_services.h @@ -1,9 +1,12 @@ #pragma once +#include + #include "platform_api/platform_services.h" namespace pp::platform::legacy { [[nodiscard]] PlatformServices& platform_services(); +[[nodiscard]] std::unique_ptr create_platform_services(); }