#pragma once #include "platform_api/platform_policy.h" #include "platform_api/platform_services.h" #include #include #include #include namespace pp::platform::apple { struct AppleDocumentPickerBridge { std::function pick_image; std::function file_types, PickedPathCallback callback)> pick_file; std::function file_types, PickedPathCallback callback)> pick_save_file; std::function pick_directory; std::function format_working_directory_path; std::function clipboard_text; std::function set_clipboard_text; std::function set_virtual_keyboard_visible; std::function display_file; std::function share_file; std::function set_cursor_visible; std::function trigger_crash_test; std::function request_app_close; std::function start_sonarpen; std::function acquire_render_context; std::function release_render_context; std::function present_render_context; std::function bind_main_render_target; std::function save_prepared_file; std::function save_ui_state; }; class AppleDocumentPlatformServices { public: explicit AppleDocumentPlatformServices( PlatformFamily family, AppleDocumentPickerBridge bridge = {}); [[nodiscard]] std::vector document_browse_roots( std::string_view work_path, std::string_view data_path) const; void pick_image(PickedPathCallback callback) const; void pick_file(std::vector file_types, PickedPathCallback callback) const; void pick_save_file(std::vector file_types, PickedPathCallback callback) const; void pick_directory(PickedPathCallback callback) const; [[nodiscard]] bool supports_working_directory_picker() const; [[nodiscard]] std::string format_working_directory_path(std::string_view path) const; [[nodiscard]] std::string clipboard_text() const; [[nodiscard]] bool set_clipboard_text(std::string_view text) const; void set_virtual_keyboard_visible(bool visible) const; void display_file(std::string_view path) const; void share_file(std::string_view path) const; void set_cursor_visible(bool visible) const; void trigger_crash_test() const; void request_app_close() const; void start_sonarpen() const; void acquire_render_context() const; void release_render_context() const; void present_render_context() const; void bind_main_render_target() const; void save_prepared_file( std::string_view path, std::string_view suggested_name, PreparedFileCallback callback) const; void save_ui_state() const; private: PlatformFamily family_; AppleDocumentPickerBridge bridge_; }; }