@lynx-js/lynx-library-headers 0.0.1-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/README.md +53 -0
  2. package/include/base/include/value/lynx_api_types.h +57 -0
  3. package/include/base/include/value/lynx_value_api.h +204 -0
  4. package/include/base/include/value/lynx_value_types.h +73 -0
  5. package/include/capi/lynx_env_capi.h +47 -0
  6. package/include/capi/lynx_event_reporter_service_capi.h +67 -0
  7. package/include/capi/lynx_export.h +27 -0
  8. package/include/capi/lynx_extension_module_capi.h +148 -0
  9. package/include/capi/lynx_extension_module_types_capi.h +17 -0
  10. package/include/capi/lynx_generic_resource_fetcher_capi.h +124 -0
  11. package/include/capi/lynx_group_capi.h +42 -0
  12. package/include/capi/lynx_http_service_capi.h +113 -0
  13. package/include/capi/lynx_load_meta_capi.h +52 -0
  14. package/include/capi/lynx_log_capi.h +69 -0
  15. package/include/capi/lynx_memory_capi.h +28 -0
  16. package/include/capi/lynx_native_module_capi.h +51 -0
  17. package/include/capi/lynx_native_view_capi.h +163 -0
  18. package/include/capi/lynx_resource_request_capi.h +71 -0
  19. package/include/capi/lynx_resource_response_capi.h +92 -0
  20. package/include/capi/lynx_runtime_lifecycle_observer_capi.h +62 -0
  21. package/include/capi/lynx_security_service_capi.h +52 -0
  22. package/include/capi/lynx_service_center_capi.h +50 -0
  23. package/include/capi/lynx_template_bundle_capi.h +39 -0
  24. package/include/capi/lynx_template_data_capi.h +33 -0
  25. package/include/capi/lynx_trace_capi.h +62 -0
  26. package/include/capi/lynx_trail_service_capi.h +35 -0
  27. package/include/capi/lynx_types.h +750 -0
  28. package/include/capi/lynx_update_meta_capi.h +33 -0
  29. package/include/capi/lynx_view_builder_capi.h +113 -0
  30. package/include/capi/lynx_view_capi.h +174 -0
  31. package/include/capi/lynx_view_client_capi.h +81 -0
  32. package/include/capi/lynx_vsync_monitor_capi.h +38 -0
  33. package/include/capi/lynx_windowless_renderer_capi.h +213 -0
  34. package/include/js_native_api.h +608 -0
  35. package/include/js_native_api_types.h +202 -0
  36. package/include/lynx/base/include/value/lynx_api_types.h +57 -0
  37. package/include/lynx/base/include/value/lynx_value_api.h +204 -0
  38. package/include/lynx/base/include/value/lynx_value_types.h +73 -0
  39. package/include/lynx/extension.h +6 -0
  40. package/include/lynx/platform/embedder/public/capi/lynx_env_capi.h +47 -0
  41. package/include/lynx/platform/embedder/public/capi/lynx_event_reporter_service_capi.h +67 -0
  42. package/include/lynx/platform/embedder/public/capi/lynx_export.h +27 -0
  43. package/include/lynx/platform/embedder/public/capi/lynx_extension_module_capi.h +148 -0
  44. package/include/lynx/platform/embedder/public/capi/lynx_extension_module_types_capi.h +17 -0
  45. package/include/lynx/platform/embedder/public/capi/lynx_generic_resource_fetcher_capi.h +124 -0
  46. package/include/lynx/platform/embedder/public/capi/lynx_group_capi.h +42 -0
  47. package/include/lynx/platform/embedder/public/capi/lynx_http_service_capi.h +113 -0
  48. package/include/lynx/platform/embedder/public/capi/lynx_load_meta_capi.h +52 -0
  49. package/include/lynx/platform/embedder/public/capi/lynx_log_capi.h +69 -0
  50. package/include/lynx/platform/embedder/public/capi/lynx_memory_capi.h +28 -0
  51. package/include/lynx/platform/embedder/public/capi/lynx_native_module_capi.h +51 -0
  52. package/include/lynx/platform/embedder/public/capi/lynx_native_view_capi.h +163 -0
  53. package/include/lynx/platform/embedder/public/capi/lynx_resource_request_capi.h +71 -0
  54. package/include/lynx/platform/embedder/public/capi/lynx_resource_response_capi.h +92 -0
  55. package/include/lynx/platform/embedder/public/capi/lynx_runtime_lifecycle_observer_capi.h +62 -0
  56. package/include/lynx/platform/embedder/public/capi/lynx_security_service_capi.h +52 -0
  57. package/include/lynx/platform/embedder/public/capi/lynx_service_center_capi.h +50 -0
  58. package/include/lynx/platform/embedder/public/capi/lynx_template_bundle_capi.h +39 -0
  59. package/include/lynx/platform/embedder/public/capi/lynx_template_data_capi.h +33 -0
  60. package/include/lynx/platform/embedder/public/capi/lynx_trace_capi.h +62 -0
  61. package/include/lynx/platform/embedder/public/capi/lynx_trail_service_capi.h +35 -0
  62. package/include/lynx/platform/embedder/public/capi/lynx_types.h +750 -0
  63. package/include/lynx/platform/embedder/public/capi/lynx_update_meta_capi.h +33 -0
  64. package/include/lynx/platform/embedder/public/capi/lynx_view_builder_capi.h +113 -0
  65. package/include/lynx/platform/embedder/public/capi/lynx_view_capi.h +174 -0
  66. package/include/lynx/platform/embedder/public/capi/lynx_view_client_capi.h +81 -0
  67. package/include/lynx/platform/embedder/public/capi/lynx_vsync_monitor_capi.h +38 -0
  68. package/include/lynx/platform/embedder/public/capi/lynx_windowless_renderer_capi.h +213 -0
  69. package/include/lynx/platform/embedder/public/lynx_env.h +104 -0
  70. package/include/lynx/platform/embedder/public/lynx_event_reporter_service.h +96 -0
  71. package/include/lynx/platform/embedder/public/lynx_event_simulation_proxy.h +31 -0
  72. package/include/lynx/platform/embedder/public/lynx_extension_module.h +521 -0
  73. package/include/lynx/platform/embedder/public/lynx_generic_resource_fetcher.h +178 -0
  74. package/include/lynx/platform/embedder/public/lynx_group.h +70 -0
  75. package/include/lynx/platform/embedder/public/lynx_http_service.h +211 -0
  76. package/include/lynx/platform/embedder/public/lynx_load_meta.h +120 -0
  77. package/include/lynx/platform/embedder/public/lynx_native_module.h +9 -0
  78. package/include/lynx/platform/embedder/public/lynx_native_view.h +201 -0
  79. package/include/lynx/platform/embedder/public/lynx_resource_request.h +56 -0
  80. package/include/lynx/platform/embedder/public/lynx_resource_response.h +63 -0
  81. package/include/lynx/platform/embedder/public/lynx_runtime_lifecycle_observer.h +102 -0
  82. package/include/lynx/platform/embedder/public/lynx_security_service.h +78 -0
  83. package/include/lynx/platform/embedder/public/lynx_service_center.h +64 -0
  84. package/include/lynx/platform/embedder/public/lynx_template_bundle.h +65 -0
  85. package/include/lynx/platform/embedder/public/lynx_template_data.h +104 -0
  86. package/include/lynx/platform/embedder/public/lynx_trail_service.h +81 -0
  87. package/include/lynx/platform/embedder/public/lynx_update_meta.h +56 -0
  88. package/include/lynx/platform/embedder/public/lynx_value.h +270 -0
  89. package/include/lynx/platform/embedder/public/lynx_view.h +364 -0
  90. package/include/lynx/platform/embedder/public/lynx_view_client.h +226 -0
  91. package/include/lynx/platform/embedder/public/lynx_vsync_monitor.h +70 -0
  92. package/include/lynx/platform/embedder/public/lynx_windowless_renderer.h +302 -0
  93. package/include/lynx/registration.h +178 -0
  94. package/include/lynx_env.h +104 -0
  95. package/include/lynx_event_reporter_service.h +96 -0
  96. package/include/lynx_event_simulation_proxy.h +31 -0
  97. package/include/lynx_extension.h +10 -0
  98. package/include/lynx_extension_module.h +521 -0
  99. package/include/lynx_generic_resource_fetcher.h +178 -0
  100. package/include/lynx_group.h +70 -0
  101. package/include/lynx_http_service.h +211 -0
  102. package/include/lynx_load_meta.h +120 -0
  103. package/include/lynx_native_module.h +9 -0
  104. package/include/lynx_native_view.h +201 -0
  105. package/include/lynx_resource_request.h +56 -0
  106. package/include/lynx_resource_response.h +63 -0
  107. package/include/lynx_runtime_lifecycle_observer.h +102 -0
  108. package/include/lynx_security_service.h +78 -0
  109. package/include/lynx_service_center.h +64 -0
  110. package/include/lynx_template_bundle.h +65 -0
  111. package/include/lynx_template_data.h +104 -0
  112. package/include/lynx_trail_service.h +81 -0
  113. package/include/lynx_update_meta.h +56 -0
  114. package/include/lynx_value.h +270 -0
  115. package/include/lynx_view.h +364 -0
  116. package/include/lynx_view_client.h +226 -0
  117. package/include/lynx_vsync_monitor.h +70 -0
  118. package/include/lynx_windowless_renderer.h +302 -0
  119. package/include/napi-inl.deprecated.h +186 -0
  120. package/include/napi-inl.h +6607 -0
  121. package/include/napi.h +3208 -0
  122. package/include/node_api.h +276 -0
  123. package/include/node_api_types.h +59 -0
  124. package/include/third_party/weak-node-api/headers/js_native_api.h +608 -0
  125. package/include/third_party/weak-node-api/headers/js_native_api_types.h +202 -0
  126. package/include/third_party/weak-node-api/headers/napi-inl.deprecated.h +186 -0
  127. package/include/third_party/weak-node-api/headers/napi-inl.h +6607 -0
  128. package/include/third_party/weak-node-api/headers/napi.h +3208 -0
  129. package/include/third_party/weak-node-api/headers/node_api.h +276 -0
  130. package/include/third_party/weak-node-api/headers/node_api_types.h +59 -0
  131. package/include/third_party/weak-node-api/headers/weak_napi_defines.h +331 -0
  132. package/include/third_party/weak-node-api/headers/weak_napi_undefs.h +282 -0
  133. package/include/weak_napi_defines.h +331 -0
  134. package/include/weak_napi_undefs.h +282 -0
  135. package/package.json +29 -0
@@ -0,0 +1,226 @@
1
+ // Copyright 2025 The Lynx Authors. All rights reserved.
2
+ // Licensed under the Apache License Version 2.0 that can be found in the
3
+ // LICENSE file in the root directory of this source tree.
4
+ #ifndef PLATFORM_EMBEDDER_PUBLIC_LYNX_VIEW_CLIENT_H_
5
+ #define PLATFORM_EMBEDDER_PUBLIC_LYNX_VIEW_CLIENT_H_
6
+
7
+ #include "capi/lynx_view_client_capi.h"
8
+
9
+ namespace lynx {
10
+ namespace pub {
11
+
12
+ /**
13
+ * @apidoc
14
+ * @brief A client that provides callbacks for `LynxView`'s lifecycle and other
15
+ * events.
16
+ */
17
+ class LynxViewClient {
18
+ public:
19
+ static LynxViewClient* Unwrap(lynx_view_client_t* client) {
20
+ return static_cast<LynxViewClient*>(lynx_view_client_get_user_data(client));
21
+ }
22
+
23
+ LynxViewClient() : client_(lynx_view_client_create(this)) {
24
+ // Bind callbacks to lynx_view_client_t.
25
+ lynx_view_client_bind_on_page_start(
26
+ client_, [](lynx_view_client_t* client, const char* url) {
27
+ auto* wrapper = LynxViewClient::Unwrap(client);
28
+ if (wrapper) {
29
+ wrapper->OnPageStart(url);
30
+ }
31
+ });
32
+ lynx_view_client_bind_on_load_success(
33
+ client_, [](lynx_view_client_t* client) {
34
+ auto* wrapper = LynxViewClient::Unwrap(client);
35
+ if (wrapper) {
36
+ wrapper->OnLoadSuccess();
37
+ }
38
+ });
39
+ lynx_view_client_bind_on_first_screen(
40
+ client_, [](lynx_view_client_t* client) {
41
+ auto* wrapper = LynxViewClient::Unwrap(client);
42
+ if (wrapper) {
43
+ wrapper->OnFirstScreen();
44
+ }
45
+ });
46
+ lynx_view_client_bind_on_page_updated(
47
+ client_, [](lynx_view_client_t* client) {
48
+ auto* wrapper = LynxViewClient::Unwrap(client);
49
+ if (wrapper) {
50
+ wrapper->OnPageUpdated();
51
+ }
52
+ });
53
+ lynx_view_client_bind_on_data_updated(
54
+ client_, [](lynx_view_client_t* client) {
55
+ auto* wrapper = LynxViewClient::Unwrap(client);
56
+ if (wrapper) {
57
+ wrapper->OnDataUpdated();
58
+ }
59
+ });
60
+ lynx_view_client_bind_on_destroy(client_, [](lynx_view_client_t* client) {
61
+ auto* wrapper = LynxViewClient::Unwrap(client);
62
+ if (wrapper) {
63
+ wrapper->OnDestroy();
64
+ }
65
+ });
66
+ lynx_view_client_bind_on_runtime_ready(
67
+ client_, [](lynx_view_client_t* client) {
68
+ auto* wrapper = LynxViewClient::Unwrap(client);
69
+ if (wrapper) {
70
+ wrapper->OnRuntimeReady();
71
+ }
72
+ });
73
+ lynx_view_client_bind_on_received_error(
74
+ client_,
75
+ [](lynx_view_client_t* client, int error_code, const char* message) {
76
+ auto* wrapper = LynxViewClient::Unwrap(client);
77
+ if (wrapper) {
78
+ wrapper->OnReceivedError(error_code, message);
79
+ }
80
+ });
81
+ lynx_view_client_bind_on_timing_setup(
82
+ client_, [](lynx_view_client_t* client, const char* timing_info) {
83
+ auto* wrapper = LynxViewClient::Unwrap(client);
84
+ if (wrapper) {
85
+ wrapper->OnTimingSetup(timing_info);
86
+ }
87
+ });
88
+ lynx_view_client_bind_on_timing_update(
89
+ client_, [](lynx_view_client_t* client, const char* timing_info,
90
+ const char* update_timing, const char* update_flag) {
91
+ auto* wrapper = LynxViewClient::Unwrap(client);
92
+ if (wrapper) {
93
+ wrapper->OnTimingUpdate(timing_info, update_timing, update_flag);
94
+ }
95
+ });
96
+ lynx_view_client_bind_on_enter_foreground(
97
+ client_, [](lynx_view_client_t* client) {
98
+ auto* wrapper = LynxViewClient::Unwrap(client);
99
+ if (wrapper) {
100
+ wrapper->OnEnterForeground();
101
+ }
102
+ });
103
+ lynx_view_client_bind_on_enter_background(
104
+ client_, [](lynx_view_client_t* client) {
105
+ auto* wrapper = LynxViewClient::Unwrap(client);
106
+ if (wrapper) {
107
+ wrapper->OnEnterBackground();
108
+ }
109
+ });
110
+ lynx_view_client_bind_on_frame_timing(
111
+ client_, [](lynx_view_client_t* client, int64_t frame_start_time_in_ns,
112
+ int64_t frame_finish_time_in_ns) {
113
+ auto* wrapper = LynxViewClient::Unwrap(client);
114
+ if (wrapper) {
115
+ wrapper->OnFrameTiming(frame_start_time_in_ns,
116
+ frame_finish_time_in_ns);
117
+ }
118
+ });
119
+ }
120
+ virtual ~LynxViewClient() { lynx_view_client_release(client_); }
121
+
122
+ /**
123
+ * @apidoc
124
+ * @brief Called when page start loading.
125
+ * @param url The page URL
126
+ */
127
+ virtual void OnPageStart(const char* url) {}
128
+
129
+ /**
130
+ * @apidoc
131
+ * @brief Called when page load finish.
132
+ */
133
+ virtual void OnLoadSuccess() {}
134
+
135
+ /**
136
+ * @apidoc
137
+ * @brief Called when first screen layout completed.
138
+ */
139
+ virtual void OnFirstScreen() {}
140
+
141
+ /**
142
+ * @apidoc
143
+ * @brief Called when page update.
144
+ */
145
+ virtual void OnPageUpdated() {}
146
+
147
+ /**
148
+ * @apidoc
149
+ * @brief Called when data update, but the view may not be updated.
150
+ */
151
+ virtual void OnDataUpdated() {}
152
+
153
+ /**
154
+ * @apidoc
155
+ * @brief Called after the page is destroyed.
156
+ * @note The callback executed in the main thread.
157
+ */
158
+ virtual void OnDestroy() {}
159
+
160
+ /**
161
+ * @apidoc
162
+ * @brief Called when JS environment preparation completed.
163
+ * @note The callback is in an asynchronous thread.
164
+ */
165
+ virtual void OnRuntimeReady() {}
166
+
167
+ /**
168
+ * @apidoc
169
+ * @brief Called when error received.
170
+ * @param error_code The type of the error.
171
+ * @param message The error message.
172
+ */
173
+ virtual void OnReceivedError(int error_code, const char* message) {}
174
+
175
+ /**
176
+ * @apidoc
177
+ * @brief Called when timing setup.
178
+ * @param timing_info The timing info.
179
+ */
180
+ virtual void OnTimingSetup(const char* timing_info) {}
181
+
182
+ /**
183
+ * @apidoc
184
+ * @brief Called when timing update.
185
+ * @param timing_info The timing info.
186
+ * @param update_timing The update timing.
187
+ * @param update_flag The update flag.
188
+ */
189
+ virtual void OnTimingUpdate(const char* timing_info,
190
+ const char* update_timing,
191
+ const char* update_flag) {}
192
+
193
+ /**
194
+ * @apidoc
195
+ * @brief Called when the view enters the foreground.
196
+ */
197
+ virtual void OnEnterForeground() {}
198
+
199
+ /**
200
+ * @apidoc
201
+ * @brief Called when the view enters the background.
202
+ */
203
+ virtual void OnEnterBackground() {}
204
+
205
+ /**
206
+ * @apidoc
207
+ * @brief Called when frame timing is received.
208
+ * @param frame_start_time_in_ns The frame start time in ns.
209
+ * @param frame_finish_time_in_ns The frame finish time in ns.
210
+ */
211
+ virtual void OnFrameTiming(int64_t frame_start_time_in_ns,
212
+ int64_t frame_finish_time_in_ns) {}
213
+
214
+ lynx_view_client_t* Impl() { return client_; }
215
+
216
+ LynxViewClient(const LynxViewClient&) = delete;
217
+ LynxViewClient& operator=(const LynxViewClient&) = delete;
218
+
219
+ private:
220
+ lynx_view_client_t* client_;
221
+ };
222
+
223
+ } // namespace pub
224
+ } // namespace lynx
225
+
226
+ #endif // PLATFORM_EMBEDDER_PUBLIC_LYNX_VIEW_CLIENT_H_
@@ -0,0 +1,70 @@
1
+ // Copyright 2025 The Lynx Authors. All rights reserved.
2
+ // Licensed under the Apache License Version 2.0 that can be found in the
3
+ // LICENSE file in the root directory of this source tree.
4
+ #ifndef PLATFORM_EMBEDDER_PUBLIC_LYNX_VSYNC_MONITOR_H_
5
+ #define PLATFORM_EMBEDDER_PUBLIC_LYNX_VSYNC_MONITOR_H_
6
+
7
+ #include <functional>
8
+ #include <memory>
9
+
10
+ #include "capi/lynx_vsync_monitor_capi.h"
11
+
12
+ namespace lynx {
13
+ namespace pub {
14
+ class LynxVSyncMonitor : public std::enable_shared_from_this<LynxVSyncMonitor> {
15
+ public:
16
+ explicit LynxVSyncMonitor(lynx_vsync_monitor_t* c_monitor)
17
+ : c_monitor_(c_monitor) {}
18
+ virtual ~LynxVSyncMonitor() = default;
19
+ /**
20
+ * @apidoc
21
+ * @brief Synchronize a Vsync signal
22
+ * @param callback OnVsync signal callback.
23
+ */
24
+ virtual void RequestVSync(std::function<void(int64_t, int64_t)> callback) = 0;
25
+
26
+ lynx_vsync_monitor_t* GetCMonitor() { return c_monitor_; }
27
+
28
+ void InitIfNeed() {
29
+ if (c_monitor_) {
30
+ return;
31
+ }
32
+ c_monitor_ = lynx_vsync_monitor_create_with_finalizer(
33
+ new std::weak_ptr<LynxVSyncMonitor>(weak_from_this()),
34
+ [](lynx_vsync_monitor_t* monitor, void* user_data) {
35
+ std::weak_ptr<LynxVSyncMonitor>* weak_ptr =
36
+ reinterpret_cast<std::weak_ptr<LynxVSyncMonitor>*>(user_data);
37
+ delete weak_ptr;
38
+ });
39
+ BindFunction();
40
+ }
41
+
42
+ private:
43
+ void BindFunction() {
44
+ lynx_vsync_monitor_bind_request_vsync_func(
45
+ c_monitor_,
46
+ [](lynx_vsync_monitor_t* c_monitor,
47
+ lynx_vsync_monitor_on_vsync_callback callback, void* user_data) {
48
+ auto* weak_monitor =
49
+ reinterpret_cast<std::weak_ptr<LynxVSyncMonitor>*>(
50
+ lynx_vsync_monitor_get_user_data(c_monitor));
51
+ std::shared_ptr<LynxVSyncMonitor> shared_monitor =
52
+ weak_monitor ? weak_monitor->lock() : nullptr;
53
+ if (!shared_monitor) {
54
+ return;
55
+ }
56
+ shared_monitor->RequestVSync(
57
+ [callback, user_data](int64_t frame_start_time,
58
+ int64_t frame_target_time) {
59
+ callback(user_data, frame_start_time, frame_target_time);
60
+ });
61
+ });
62
+ }
63
+
64
+ lynx_vsync_monitor_t* c_monitor_ = nullptr;
65
+ };
66
+
67
+ } // namespace pub
68
+ } // namespace lynx
69
+
70
+ #endif // PLATFORM_EMBEDDER_PUBLIC_LYNX_VSYNC_MONITOR_H_
@@ -0,0 +1,302 @@
1
+ // Copyright 2025 The Lynx Authors. All rights reserved.
2
+ // Licensed under the Apache License Version 2.0 that can be found in the
3
+ // LICENSE file in the root directory of this source tree.
4
+ #ifndef PLATFORM_EMBEDDER_PUBLIC_LYNX_WINDOWLESS_RENDERER_H_
5
+ #define PLATFORM_EMBEDDER_PUBLIC_LYNX_WINDOWLESS_RENDERER_H_
6
+
7
+ #include <cstdbool>
8
+ #include <memory>
9
+
10
+ #include "capi/lynx_types.h"
11
+ #include "capi/lynx_windowless_renderer_capi.h"
12
+
13
+ namespace lynx {
14
+ namespace pub {
15
+
16
+ class LynxWindowlessRenderer
17
+ : public std::enable_shared_from_this<LynxWindowlessRenderer> {
18
+ public:
19
+ explicit LynxWindowlessRenderer(lynx_windowless_renderer_type_e type)
20
+ : type_(type) {}
21
+
22
+ void InitIfNeeded() {
23
+ if (windowless_renderer_) {
24
+ return;
25
+ }
26
+ windowless_renderer_ = lynx_windowless_renderer_create_with_finalizer(
27
+ type_, new std::weak_ptr<LynxWindowlessRenderer>(weak_from_this()),
28
+ [](lynx_windowless_renderer_t* renderer, void* user_data) {
29
+ std::weak_ptr<LynxWindowlessRenderer>* weak_ptr =
30
+ reinterpret_cast<std::weak_ptr<LynxWindowlessRenderer>*>(
31
+ user_data);
32
+ delete weak_ptr;
33
+ });
34
+ if (type_ == kRendererTypeSoftware) {
35
+ lynx_windowless_renderer_bind_on_software_present(
36
+ windowless_renderer_,
37
+ [](lynx_windowless_renderer_t* renderer, const void* allocation,
38
+ size_t row_bytes, size_t height) -> bool {
39
+ std::shared_ptr<LynxWindowlessRenderer> renderer_wrapper =
40
+ LynxWindowlessRenderer::Unwrap(
41
+ lynx_windowless_renderer_get_user_data(renderer));
42
+ if (renderer_wrapper) {
43
+ return renderer_wrapper->OnSoftwarePresent(allocation, row_bytes,
44
+ height);
45
+ }
46
+ return false;
47
+ });
48
+ } else if (type_ == kRendererTypeGL || type_ == kRendererTypeGLDirect) {
49
+ lynx_windowless_renderer_bind_on_gl_make_current(
50
+ windowless_renderer_,
51
+ [](lynx_windowless_renderer_t* renderer) -> bool {
52
+ std::shared_ptr<LynxWindowlessRenderer> renderer_wrapper =
53
+ LynxWindowlessRenderer::Unwrap(
54
+ lynx_windowless_renderer_get_user_data(renderer));
55
+ if (renderer_wrapper) {
56
+ return renderer_wrapper->OnGLMakeCurrent();
57
+ }
58
+ return false;
59
+ });
60
+ lynx_windowless_renderer_bind_on_gl_clear_current(
61
+ windowless_renderer_,
62
+ [](lynx_windowless_renderer_t* renderer) -> bool {
63
+ std::shared_ptr<LynxWindowlessRenderer> renderer_wrapper =
64
+ LynxWindowlessRenderer::Unwrap(
65
+ lynx_windowless_renderer_get_user_data(renderer));
66
+ if (renderer_wrapper) {
67
+ return renderer_wrapper->OnGLClearCurrent();
68
+ }
69
+ return false;
70
+ });
71
+
72
+ lynx_windowless_renderer_bind_on_gl_present(
73
+ windowless_renderer_,
74
+ [](lynx_windowless_renderer_t* renderer) -> bool {
75
+ std::shared_ptr<LynxWindowlessRenderer> renderer_wrapper =
76
+ LynxWindowlessRenderer::Unwrap(
77
+ lynx_windowless_renderer_get_user_data(renderer));
78
+ if (renderer_wrapper) {
79
+ return renderer_wrapper->OnGLPresent();
80
+ }
81
+ return false;
82
+ });
83
+ lynx_windowless_renderer_bind_on_gl_create_fbo(
84
+ windowless_renderer_,
85
+ [](lynx_windowless_renderer_t* renderer, int width,
86
+ int height) -> uint32_t {
87
+ std::shared_ptr<LynxWindowlessRenderer> renderer_wrapper =
88
+ LynxWindowlessRenderer::Unwrap(
89
+ lynx_windowless_renderer_get_user_data(renderer));
90
+ if (renderer_wrapper) {
91
+ return renderer_wrapper->OnGLCreateFBO(width, height);
92
+ }
93
+ return 0;
94
+ });
95
+ lynx_windowless_renderer_bind_on_gl_proc_resolver(
96
+ windowless_renderer_,
97
+ [](lynx_windowless_renderer_t* renderer, const char* name) -> void* {
98
+ std::shared_ptr<LynxWindowlessRenderer> renderer_wrapper =
99
+ LynxWindowlessRenderer::Unwrap(
100
+ lynx_windowless_renderer_get_user_data(renderer));
101
+ if (renderer_wrapper) {
102
+ return renderer_wrapper->OnGLProcResolver(name);
103
+ }
104
+ return nullptr;
105
+ });
106
+ } else if (type_ == kRendererTypeAccelerated) {
107
+ lynx_windowless_renderer_bind_on_accelerated_present(
108
+ windowless_renderer_,
109
+ [](lynx_windowless_renderer_t* renderer) -> bool {
110
+ std::shared_ptr<LynxWindowlessRenderer> renderer_wrapper =
111
+ LynxWindowlessRenderer::Unwrap(
112
+ lynx_windowless_renderer_get_user_data(renderer));
113
+ if (renderer_wrapper) {
114
+ return renderer_wrapper->OnAcceleratedPresent();
115
+ }
116
+ return false;
117
+ });
118
+ }
119
+
120
+ lynx_windowless_renderer_bind_on_post_task(
121
+ windowless_renderer_,
122
+ [](lynx_windowless_renderer_t* renderer, lynx_task_t task,
123
+ uint64_t interval_nanoseconds) {
124
+ std::shared_ptr<LynxWindowlessRenderer> renderer_wrapper =
125
+ LynxWindowlessRenderer::Unwrap(
126
+ lynx_windowless_renderer_get_user_data(renderer));
127
+ if (renderer_wrapper) {
128
+ renderer_wrapper->OnPostTask(task, interval_nanoseconds);
129
+ }
130
+ });
131
+ lynx_windowless_renderer_bind_get_clipboard_data(
132
+ windowless_renderer_,
133
+ [](lynx_windowless_renderer_t* renderer) -> const char* {
134
+ std::shared_ptr<LynxWindowlessRenderer> renderer_wrapper =
135
+ LynxWindowlessRenderer::Unwrap(
136
+ lynx_windowless_renderer_get_user_data(renderer));
137
+ if (renderer_wrapper) {
138
+ return renderer_wrapper->GetClipboardData();
139
+ }
140
+ return "";
141
+ });
142
+ lynx_windowless_renderer_bind_set_clipboard_data(
143
+ windowless_renderer_,
144
+ [](lynx_windowless_renderer_t* renderer, const char* data) -> void {
145
+ std::shared_ptr<LynxWindowlessRenderer> renderer_wrapper =
146
+ LynxWindowlessRenderer::Unwrap(
147
+ lynx_windowless_renderer_get_user_data(renderer));
148
+ if (renderer_wrapper) {
149
+ renderer_wrapper->SetClipboardData(data);
150
+ }
151
+ });
152
+ lynx_windowless_renderer_bind_activate_system_cursor(
153
+ windowless_renderer_,
154
+ [](lynx_windowless_renderer_t* renderer, lynx_cursor_type_e cursor_type,
155
+ const char* path) -> void {
156
+ std::shared_ptr<LynxWindowlessRenderer> renderer_wrapper =
157
+ LynxWindowlessRenderer::Unwrap(
158
+ lynx_windowless_renderer_get_user_data(renderer));
159
+ if (renderer_wrapper) {
160
+ renderer_wrapper->ActivateSystemCursor(cursor_type, path);
161
+ }
162
+ });
163
+ lynx_windowless_renderer_bind_show_text_input(
164
+ windowless_renderer_,
165
+ [](lynx_windowless_renderer_t* renderer, bool show) -> void {
166
+ std::shared_ptr<LynxWindowlessRenderer> renderer_wrapper =
167
+ LynxWindowlessRenderer::Unwrap(
168
+ lynx_windowless_renderer_get_user_data(renderer));
169
+ if (renderer_wrapper) {
170
+ renderer_wrapper->ShowTextInput(show);
171
+ }
172
+ });
173
+ lynx_windowless_renderer_bind_update_caret_position(
174
+ windowless_renderer_,
175
+ [](lynx_windowless_renderer_t* renderer, float x, float y, float w,
176
+ float h) -> void {
177
+ std::shared_ptr<LynxWindowlessRenderer> renderer_wrapper =
178
+ LynxWindowlessRenderer::Unwrap(
179
+ lynx_windowless_renderer_get_user_data(renderer));
180
+ if (renderer_wrapper) {
181
+ renderer_wrapper->UpdateCaretPosition(x, y, w, h);
182
+ }
183
+ });
184
+ lynx_windowless_renderer_bind_set_cursor_position(
185
+ windowless_renderer_,
186
+ [](lynx_windowless_renderer_t* renderer, int position) -> void {
187
+ std::shared_ptr<LynxWindowlessRenderer> renderer_wrapper =
188
+ LynxWindowlessRenderer::Unwrap(
189
+ lynx_windowless_renderer_get_user_data(renderer));
190
+ if (renderer_wrapper) {
191
+ renderer_wrapper->SetCursorPosition(position);
192
+ }
193
+ });
194
+ lynx_windowless_renderer_bind_set_marked_text_rect(
195
+ windowless_renderer_,
196
+ [](lynx_windowless_renderer_t* renderer, float x, float y, float w,
197
+ float h) -> void {
198
+ std::shared_ptr<LynxWindowlessRenderer> renderer_wrapper =
199
+ LynxWindowlessRenderer::Unwrap(
200
+ lynx_windowless_renderer_get_user_data(renderer));
201
+ if (renderer_wrapper) {
202
+ renderer_wrapper->SetMarkedTextRect(x, y, w, h);
203
+ }
204
+ });
205
+ lynx_windowless_renderer_bind_set_editable_transform(
206
+ windowless_renderer_,
207
+ [](lynx_windowless_renderer_t* renderer,
208
+ const float transform[16]) -> void {
209
+ std::shared_ptr<LynxWindowlessRenderer> renderer_wrapper =
210
+ LynxWindowlessRenderer::Unwrap(
211
+ lynx_windowless_renderer_get_user_data(renderer));
212
+ if (renderer_wrapper) {
213
+ renderer_wrapper->SetEditableTransform(transform);
214
+ }
215
+ });
216
+ }
217
+
218
+ virtual ~LynxWindowlessRenderer() {
219
+ if (windowless_renderer_) {
220
+ lynx_windowless_renderer_release(windowless_renderer_);
221
+ }
222
+ }
223
+
224
+ /* ----- Callbacks for Software renderer type ----- */
225
+ virtual bool OnSoftwarePresent(const void* allocation, size_t row_bytes,
226
+ size_t height) {
227
+ return false;
228
+ }
229
+ /* ----- Callbacks for Software renderer type ----- */
230
+
231
+ /* ----- Callbacks for GL renderer type ----- */
232
+ virtual bool OnGLMakeCurrent() { return false; }
233
+ virtual bool OnGLClearCurrent() { return false; }
234
+ virtual bool OnGLPresent() { return false; }
235
+ virtual uint32_t OnGLCreateFBO(int width, int height) { return 0; }
236
+ virtual void* OnGLProcResolver(const char* name) { return nullptr; }
237
+ /* ----- Callbacks for GL renderer type ----- */
238
+
239
+ /* ----- Callbacks for shared texture renderer type ----- */
240
+ virtual bool OnAcceleratedPresent() { return false; }
241
+ /* ----- Callbacks for shared texture renderer type ----- */
242
+
243
+ virtual void OnPostTask(lynx_task_t task, uint64_t interval_nanoseconds) {}
244
+
245
+ void RunTask(lynx_task_t task) {
246
+ if (windowless_renderer_) {
247
+ lynx_windowless_renderer_run_task(windowless_renderer_, task);
248
+ }
249
+ }
250
+
251
+ bool GetAcceleratedPaintInfo(lynx_accelerated_paint_info_t* paint_info) {
252
+ if (windowless_renderer_) {
253
+ return lynx_windowless_renderer_get_accelerated_paint_info(
254
+ windowless_renderer_, paint_info);
255
+ }
256
+ return false;
257
+ }
258
+
259
+ void SendPointerEvent(lynx_pointer_event_t* event) {
260
+ if (windowless_renderer_) {
261
+ lynx_windowless_renderer_send_pointer_event(windowless_renderer_, event);
262
+ }
263
+ }
264
+
265
+ void SendKeyEvent(lynx_key_event_t* event) {
266
+ if (windowless_renderer_) {
267
+ lynx_windowless_renderer_send_key_event(windowless_renderer_, event);
268
+ }
269
+ }
270
+
271
+ /* ----- Callbacks for platform function ----- */
272
+ virtual const char* GetClipboardData() { return ""; }
273
+ virtual void SetClipboardData(const char* data) {}
274
+ virtual void ActivateSystemCursor(lynx_cursor_type_e cursor_type,
275
+ const char* path) {}
276
+ virtual void ShowTextInput(bool show) {}
277
+ virtual void UpdateCaretPosition(float x, float y, float width,
278
+ float height) {}
279
+ virtual void SetCursorPosition(int position) {}
280
+ virtual void SetMarkedTextRect(float x, float y, float width, float height) {}
281
+ virtual void SetEditableTransform(const float transform[16]) {}
282
+ /* ----- Callbacks for platform function ----- */
283
+
284
+ lynx_windowless_renderer_t* Impl() { return windowless_renderer_; }
285
+
286
+ static std::shared_ptr<LynxWindowlessRenderer> Unwrap(void* user_data) {
287
+ std::weak_ptr<LynxWindowlessRenderer>* weak_ptr =
288
+ reinterpret_cast<std::weak_ptr<LynxWindowlessRenderer>*>(user_data);
289
+ std::shared_ptr<LynxWindowlessRenderer> shared_renderer =
290
+ weak_ptr ? weak_ptr->lock() : nullptr;
291
+ return shared_renderer;
292
+ }
293
+
294
+ protected:
295
+ lynx_windowless_renderer_type_e type_;
296
+ lynx_windowless_renderer_t* windowless_renderer_ = nullptr;
297
+ };
298
+
299
+ } // namespace pub
300
+ } // namespace lynx
301
+
302
+ #endif // PLATFORM_EMBEDDER_PUBLIC_LYNX_WINDOWLESS_RENDERER_H_