1/*
2 * Copyright (c) 2021-2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16/**
17 * @addtogroup OH_NativeXComponent Native XComponent
18 * @{
19 *
20 * @brief Describes the surface and touch event held by the ArkUI XComponent, which can be used for the EGL/OpenGL ES\n
21 *        and media data input and displayed on the ArkUI XComponent.
22 *
23 * @since 8
24 * @version 1.0
25 */
26
27/**
28 * @file native_interface_xcomponent.h
29 *
30 * @brief Declares APIs for accessing a Native XComponent.
31 *
32 * @kit ArkUI
33 * @since 8
34 * @version 1.0
35 */
36
37#ifndef _NATIVE_INTERFACE_XCOMPONENT_H_
38#define _NATIVE_INTERFACE_XCOMPONENT_H_
39
40#include <stdbool.h>
41#include <stdint.h>
42#ifdef __cplusplus
43#include <vector>
44#endif
45
46#include "arkui/native_interface_accessibility.h"
47#include "arkui/native_type.h"
48#include "arkui/ui_input_event.h"
49
50#include "native_xcomponent_key_event.h"
51
52#ifdef __cplusplus
53extern "C" {
54#endif
55
56#define OH_NATIVE_XCOMPONENT_OBJ ("__NATIVE_XCOMPONENT_OBJ__")
57#define OH_NATIVE_XCOMPONENT_MAX_TOUCH_POINTS_NUMBER 10
58
59const uint32_t OH_XCOMPONENT_ID_LEN_MAX = 128;
60const uint32_t OH_MAX_TOUCH_POINTS_NUMBER = 10;
61
62/**
63 * @brief Enumerates the API access states.
64 *
65 * @since 8
66 * @version 1.0
67 */
68enum {
69    /** Successful. */
70    OH_NATIVEXCOMPONENT_RESULT_SUCCESS = 0,
71    /** Failed. */
72    OH_NATIVEXCOMPONENT_RESULT_FAILED = -1,
73    /** Invalid parameters. */
74    OH_NATIVEXCOMPONENT_RESULT_BAD_PARAMETER = -2,
75};
76
77typedef enum {
78    /** Trigger a touch event when a finger is pressed. */
79    OH_NATIVEXCOMPONENT_DOWN = 0,
80    /** Trigger a touch event when a finger is lifted. */
81    OH_NATIVEXCOMPONENT_UP,
82    /** Trigger a touch event when a finger moves on the screen in pressed state. */
83    OH_NATIVEXCOMPONENT_MOVE,
84    /** Trigger an event when a touch event is canceled. */
85    OH_NATIVEXCOMPONENT_CANCEL,
86    /** Invalid touch type. */
87    OH_NATIVEXCOMPONENT_UNKNOWN,
88} OH_NativeXComponent_TouchEventType;
89
90/**
91 * @brief Represents the touch point tool type.
92 *
93 * @since 9
94 * @version 1.0
95 */
96typedef enum {
97    /** Indicates invalid tool type. */
98    OH_NATIVEXCOMPONENT_TOOL_TYPE_UNKNOWN = 0,
99    /** Indicates a finger. */
100    OH_NATIVEXCOMPONENT_TOOL_TYPE_FINGER,
101    /** Indicates a stylus. */
102    OH_NATIVEXCOMPONENT_TOOL_TYPE_PEN,
103    /** Indicates a eraser. */
104    OH_NATIVEXCOMPONENT_TOOL_TYPE_RUBBER,
105    /** Indicates a brush. */
106    OH_NATIVEXCOMPONENT_TOOL_TYPE_BRUSH,
107    /** Indicates a pencil. */
108    OH_NATIVEXCOMPONENT_TOOL_TYPE_PENCIL,
109    /** Indicates a brush. */
110    OH_NATIVEXCOMPONENT_TOOL_TYPE_AIRBRUSH,
111    /** Indicates a mouse. */
112    OH_NATIVEXCOMPONENT_TOOL_TYPE_MOUSE,
113    /** Indicates a lens. */
114    OH_NATIVEXCOMPONENT_TOOL_TYPE_LENS,
115} OH_NativeXComponent_TouchPointToolType;
116
117/**
118 * @brief Represents the touch event source type.
119 *
120 * @since 9
121 * @version 1.0
122 */
123typedef enum {
124    /** Indicates an unknown input source type. */
125    OH_NATIVEXCOMPONENT_SOURCE_TYPE_UNKNOWN = 0,
126    /** Indicates that the input source generates a mouse multi-touch event. */
127    OH_NATIVEXCOMPONENT_SOURCE_TYPE_MOUSE,
128    /** Indicates that the input source generates a touchscreen multi-touch event. */
129    OH_NATIVEXCOMPONENT_SOURCE_TYPE_TOUCHSCREEN,
130    /** Indicates that the input source generates a touchpad multi-touch event. */
131    OH_NATIVEXCOMPONENT_SOURCE_TYPE_TOUCHPAD,
132    /** Indicates that the input source generates a joystick multi-touch event. */
133    OH_NATIVEXCOMPONENT_SOURCE_TYPE_JOYSTICK,
134    /**
135     * @brief Indicates that the input source generates a keyboard event.
136     *
137     * @since 10
138     * @version 1.0
139     */
140    OH_NATIVEXCOMPONENT_SOURCE_TYPE_KEYBOARD,
141} OH_NativeXComponent_EventSourceType;
142
143/**
144 * @brief Represents the mouse event action.
145 *
146 * @since 9
147 * @version 1.0
148 */
149typedef enum {
150    OH_NATIVEXCOMPONENT_MOUSE_NONE = 0,
151    OH_NATIVEXCOMPONENT_MOUSE_PRESS,
152    OH_NATIVEXCOMPONENT_MOUSE_RELEASE,
153    OH_NATIVEXCOMPONENT_MOUSE_MOVE,
154} OH_NativeXComponent_MouseEventAction;
155
156/**
157 * @brief Represents the mouse event button.
158 *
159 * @since 9
160 * @version 1.0
161 */
162typedef enum {
163    OH_NATIVEXCOMPONENT_NONE_BUTTON = 0,
164    OH_NATIVEXCOMPONENT_LEFT_BUTTON = 0x01,
165    OH_NATIVEXCOMPONENT_RIGHT_BUTTON = 0x02,
166    OH_NATIVEXCOMPONENT_MIDDLE_BUTTON = 0x04,
167    OH_NATIVEXCOMPONENT_BACK_BUTTON = 0x08,
168    OH_NATIVEXCOMPONENT_FORWARD_BUTTON = 0x10,
169} OH_NativeXComponent_MouseEventButton;
170
171/**
172 * @brief Represents the source tool type of TouchEvent
173 *
174 * @since 10
175 * @version 1.0
176 */
177typedef enum {
178    OH_NATIVEXCOMPONENT_SOURCETOOL_UNKNOWN = 0,
179    OH_NATIVEXCOMPONENT_SOURCETOOL_FINGER = 1,
180    OH_NATIVEXCOMPONENT_SOURCETOOL_PEN = 2,
181    OH_NATIVEXCOMPONENT_SOURCETOOL_RUBBER = 3,
182    OH_NATIVEXCOMPONENT_SOURCETOOL_BRUSH = 4,
183    OH_NATIVEXCOMPONENT_SOURCETOOL_PENCIL = 5,
184    OH_NATIVEXCOMPONENT_SOURCETOOL_AIRBRUSH = 6,
185    OH_NATIVEXCOMPONENT_SOURCETOOL_MOUSE = 7,
186    OH_NATIVEXCOMPONENT_SOURCETOOL_LENS = 8,
187    OH_NATIVEXCOMPONENT_SOURCETOOL_TOUCHPAD = 9,
188} OH_NativeXComponent_TouchEvent_SourceTool;
189
190typedef struct {
191    /** Unique identifier of a finger. */
192    int32_t id;
193    /** X coordinate of the touch point relative to the left edge of the screen. */
194    float screenX;
195    /** Y coordinate of the touch point relative to the upper edge of the screen. */
196    float screenY;
197    /** X coordinate of the touch point relative to the left edge of the element to touch. */
198    float x;
199    /** Y coordinate of the touch point relative to the upper edge of the element to touch. */
200    float y;
201    /** Touch type of the touch event. */
202    OH_NativeXComponent_TouchEventType type;
203    /** Contact area between the finger pad and the screen. */
204    double size;
205    /** Pressure of the current touch event. */
206    float force;
207    /** Timestamp of the current touch event. */
208    int64_t timeStamp;
209    /** The angle betweenprojection on plane-X-Y and axis-Z of the current touch event. */
210    float titlX;
211    /** The angle betweenprojection on plane-Y-Z and axis-Z of the current touch event. */
212    float titlY;
213    /** The sourceTool of the current touch event. */
214    OH_NativeXComponent_TouchEvent_SourceTool sourceTool;
215} OH_NativeXComponent_HistoricalPoint;
216
217typedef struct {
218    /** Unique identifier of a finger. */
219    int32_t id;
220    /** X coordinate of the touch point relative to the left edge of the screen. */
221    float screenX;
222    /** Y coordinate of the touch point relative to the upper edge of the screen. */
223    float screenY;
224    /** X coordinate of the touch point relative to the left edge of the element to touch. */
225    float x;
226    /** Y coordinate of the touch point relative to the upper edge of the element to touch. */
227    float y;
228    /** Touch type of the touch event. */
229    OH_NativeXComponent_TouchEventType type;
230    /** Contact area between the finger pad and the screen. */
231    double size;
232    /** Pressure of the current touch event. */
233    float force;
234    /** Timestamp of the current touch event. */
235    int64_t timeStamp;
236    /** Whether the current point is pressed. */
237    bool isPressed;
238} OH_NativeXComponent_TouchPoint;
239
240// Represents the touch point information.
241typedef struct {
242    /** Unique identifier of a finger. */
243    int32_t id;
244    /** X coordinate of the touch point relative to the left edge of the screen. */
245    float screenX;
246    /** Y coordinate of the touch point relative to the upper edge of the screen. */
247    float screenY;
248    /** X coordinate of the touch point relative to the left edge of the element to touch. */
249    float x;
250    /** Y coordinate of the touch point relative to the upper edge of the element to touch. */
251    float y;
252    /** Touch type of the touch event. */
253    OH_NativeXComponent_TouchEventType type;
254    /** Contact area between the finger pad and the screen. */
255    double size;
256    /** Pressure of the current touch event. */
257    float force;
258    /** ID of the device where the current touch event is generated. */
259    int64_t deviceId;
260    /** Timestamp of the current touch event. */
261    int64_t timeStamp;
262    /** Array of the current touch points. */
263    OH_NativeXComponent_TouchPoint touchPoints[OH_NATIVE_XCOMPONENT_MAX_TOUCH_POINTS_NUMBER];
264    /** Number of current touch points. */
265    uint32_t numPoints;
266} OH_NativeXComponent_TouchEvent;
267
268/**
269 * @brief Represents the mouse event information.
270 *
271 * @since 9
272 * @version 1.0
273 */
274typedef struct {
275    /** X coordinate of the mouse point relative to the left edge of the element to mouse. */
276    float x;
277    /** Y coordinate of the mouse point relative to the upper edge of the element to mouse. */
278    float y;
279    /** X coordinate of the mouse point relative to the left edge of the screen. */
280    float screenX;
281    /** Y coordinate of the mouse point relative to the upper edge of the screen. */
282    float screenY;
283    /** Timestamp of the current mouse event. */
284    int64_t timestamp;
285    /** Mouse event action. */
286    OH_NativeXComponent_MouseEventAction action;
287    /** Mouse event button. */
288    OH_NativeXComponent_MouseEventButton button;
289} OH_NativeXComponent_MouseEvent;
290
291/**
292 * @brief Provides an encapsulated <b>OH_NativeXComponent</b> instance.
293 *
294 * @since 8
295 * @version 1.0
296 */
297typedef struct OH_NativeXComponent OH_NativeXComponent;
298
299/**
300 * @brief Registers the surface lifecycle and touch event callbacks.
301 *
302 * @since 8
303 * @version 1.0
304 */
305typedef struct OH_NativeXComponent_Callback {
306    /** Called when the surface is created. */
307    void (*OnSurfaceCreated)(OH_NativeXComponent* component, void* window);
308    /** Called when the surface is changed. */
309    void (*OnSurfaceChanged)(OH_NativeXComponent* component, void* window);
310    /** Called when the surface is destroyed. */
311    void (*OnSurfaceDestroyed)(OH_NativeXComponent* component, void* window);
312    /** Called when a touch event is triggered. */
313    void (*DispatchTouchEvent)(OH_NativeXComponent* component, void* window);
314} OH_NativeXComponent_Callback;
315
316/**
317 * @brief Registers the mouse event callbacks.
318 *
319 * @since 9
320 * @version 1.0
321 */
322typedef struct OH_NativeXComponent_MouseEvent_Callback {
323    /** Called when a mouse event is triggered. */
324    void (*DispatchMouseEvent)(OH_NativeXComponent* component, void* window);
325    /** Called when a hover event is triggered. */
326    void (*DispatchHoverEvent)(OH_NativeXComponent* component, bool isHover);
327} OH_NativeXComponent_MouseEvent_Callback;
328
329struct OH_NativeXComponent_KeyEvent;
330/**
331 * @brief Provides an encapsulated <b>OH_NativeXComponent_KeyEvent</b> instance.
332 *
333 * @since 10
334 * @version 1.0
335 */
336typedef struct OH_NativeXComponent_KeyEvent OH_NativeXComponent_KeyEvent;
337
338/**
339 * @brief Defines the expected frame rate range struct.
340 *
341 * @since 11
342 * @version 1.0
343 */
344typedef struct {
345    /** The minimum frame rate of dynamical callback rate range. */
346    int32_t min;
347    /** The maximum frame rate of dynamical callback rate range. */
348    int32_t max;
349    /** The expected frame rate of dynamical callback rate range. */
350    int32_t expected;
351} OH_NativeXComponent_ExpectedRateRange;
352
353/**
354 * @brief Obtains the ID of the ArkUI XComponent.
355 *
356 * @param component Indicates the pointer to this <b>OH_NativeXComponent</b> instance.
357 * @param id Indicates the char buffer to keep the ID of this <b>OH_NativeXComponent</b> instance.\n
358 *        Notice that a null-terminator will be appended to the char buffer, so the size of the\n
359 *        char buffer should be at least as large as the size of the real id length plus 1.\n
360 *        It is recommended that the size of the char buffer be [OH_XCOMPONENT_ID_LEN_MAX + 1].
361 * @param size Indicates the pointer to the length of <b>id</b>, which you can receive.
362 * @return Returns the status code of the execution.
363 * @since 8
364 * @version 1.0
365 */
366int32_t OH_NativeXComponent_GetXComponentId(OH_NativeXComponent* component, char* id, uint64_t* size);
367
368/**
369 * @brief Obtains the size of the surface held by the ArkUI XComponent.
370 *
371 * @param component Indicates the pointer to this <b>OH_NativeXComponent</b> instance.
372 * @param window Indicates the native window handler.
373 * @param width Indicates the pointer to the width of the current surface.
374 * @param height Indicates the pointer to the height of the current surface.
375 * @return Returns the status code of the execution.
376 * @since 8
377 * @version 1.0
378 */
379int32_t OH_NativeXComponent_GetXComponentSize(
380    OH_NativeXComponent* component, const void* window, uint64_t* width, uint64_t* height);
381
382/**
383 * @brief Obtains the offset of the surface held by the ArkUI XComponent.
384 *
385 * @param component Indicates the pointer to this <b>OH_NativeXComponent</b> instance.
386 * @param window Indicates the native window handler.
387 * @param x Indicates the pointer to the x coordinate of the current surface.
388 * @param y Indicates the pointer to the y coordinate of the current surface.
389 * @return Returns the status code of the execution.
390 * @since 8
391 * @version 1.0
392 */
393int32_t OH_NativeXComponent_GetXComponentOffset(
394    OH_NativeXComponent* component, const void* window, double* x, double* y);
395
396/**
397 * @brief Obtains the touch event dispatched by the ArkUI XComponent.
398 *
399 * @param component Indicates the pointer to this <b>OH_NativeXComponent</b> instance.
400 * @param window Indicates the native window handler.
401 * @param touchEvent Indicates the pointer to the current touch event.
402 * @return Returns the status code of the execution.
403 * @since 8
404 * @version 1.0
405 */
406int32_t OH_NativeXComponent_GetTouchEvent(
407    OH_NativeXComponent* component, const void* window, OH_NativeXComponent_TouchEvent* touchEvent);
408
409/**
410 * @brief Obtains the touch pointer tool type by the ArkUI XComponent.
411 *
412 * @param component Indicates the pointer to this <b>OH_NativeXComponent</b> instance.
413 * @param pointIndex Indicates the pointer index in the touchPoints.
414 * @param toolType Indicates the tool Type of the pointer.
415 * @return Returns the status code of the execution.
416 * @since 9
417 * @version 1.0
418 */
419int32_t OH_NativeXComponent_GetTouchPointToolType(
420    OH_NativeXComponent* component, uint32_t pointIndex, OH_NativeXComponent_TouchPointToolType* toolType);
421
422/**
423 * @brief Obtains the touch pointer tiltX by the ArkUI XComponent.
424 *
425 * @param component Indicates the pointer to this <b>OH_NativeXComponent</b> instance.
426 * @param pointIndex Indicates the pointer index in the touchPoints.
427 * @param tiltX Indicates the x tilt of the pointer.
428 * @return Returns the status code of the execution.
429 * @since 9
430 * @version 1.0
431 */
432int32_t OH_NativeXComponent_GetTouchPointTiltX(OH_NativeXComponent* component, uint32_t pointIndex, float* tiltX);
433
434/**
435 * @brief Obtains the touch pointer tiltX by the ArkUI XComponent.
436 *
437 * @param component Indicates the pointer to this <b>OH_NativeXComponent</b> instance.
438 * @param pointIndex Indicates the pointer index in the touchPoints.
439 * @param tiltY Indicates the y tilt of the pointer.
440 * @return Returns the status code of the execution.
441 * @since 9
442 * @version 1.0
443 */
444int32_t OH_NativeXComponent_GetTouchPointTiltY(OH_NativeXComponent* component, uint32_t pointIndex, float* tiltY);
445
446/**
447 * @brief Obtains the x coordinate of a specific touch point relative to the upper left corner of\n
448 *        the current application window from the ArkUI XComponent.
449 *
450 * @param component Indicates the pointer to this <b>OH_NativeXComponent</b> instance.
451 * @param pointIndex Indicates the pointer index in the touchPoints.
452 * @param windowX Indicates the x coordinate relative to the upper left corner of the current\n
453          application window.
454 * @return Returns the status code of the execution.
455 *         {@link OH_NATIVEXCOMPONENT_RESULT_SUCCESS} get windowX success.
456 *         {@link OH_NATIVEXCOMPONENT_RESULT_BAD_PARAMETER} component is NULL, windowX is NULL\n
457 *         or native XComponent is NULL.
458 * @since 12
459 * @version 1.0
460 */
461int32_t OH_NativeXComponent_GetTouchPointWindowX(OH_NativeXComponent* component, uint32_t pointIndex, float* windowX);
462
463/**
464 * @brief Obtains the y coordinate of a specific touch point relative to the upper left corner of\n
465 *        the current application window from the ArkUI XComponent.
466 *
467 * @param component Indicates the pointer to this <b>OH_NativeXComponent</b> instance.
468 * @param pointIndex Indicates the pointer index in the touchPoints.
469 * @param windowY Indicates the y coordinate relative to the upper left corner of the current\n
470          application window.
471 * @return Returns the status code of the execution.
472 *         {@link OH_NATIVEXCOMPONENT_RESULT_SUCCESS} get windowY success.
473 *         {@link OH_NATIVEXCOMPONENT_RESULT_BAD_PARAMETER} component is NULL, windowY is NULL\n
474 *         or native XComponent is NULL.
475 * @since 12
476 * @version 1.0
477 */
478int32_t OH_NativeXComponent_GetTouchPointWindowY(OH_NativeXComponent* component, uint32_t pointIndex, float* windowY);
479
480/**
481 * @brief Obtains the x coordinate of a specific touch point relative to the upper left corner of\n
482 *        the current screen from the ArkUI XComponent.
483 *
484 * @param component Indicates the pointer to this <b>OH_NativeXComponent</b> instance.
485 * @param pointIndex Indicates the pointer index in the touchPoints.
486 * @param displayX Indicates the x coordinate relative to the upper left corner of the current\n
487          screen.
488 * @return Returns the status code of the execution.
489 *         {@link OH_NATIVEXCOMPONENT_RESULT_SUCCESS} get displayX success.
490 *         {@link OH_NATIVEXCOMPONENT_RESULT_BAD_PARAMETER} component is NULL, displayX is NULL\n
491 *         or native XComponent is NULL.
492 * @since 12
493 * @version 1.0
494 */
495int32_t OH_NativeXComponent_GetTouchPointDisplayX(OH_NativeXComponent* component, uint32_t pointIndex, float* displayX);
496
497/**
498 * @brief Obtains the y coordinate of a specific touch point relative to the upper left corner of\n
499 *        the current screen from the ArkUI XComponent.
500 *
501 * @param component Indicates the pointer to this <b>OH_NativeXComponent</b> instance.
502 * @param pointIndex Indicates the pointer index in the touchPoints.
503 * @param displayY Indicates the y coordinate relative to the upper left corner of the current\n
504          screen.
505 * @return Returns the status code of the execution.
506 *         {@link OH_NATIVEXCOMPONENT_RESULT_SUCCESS} get displayY success.
507 *         {@link OH_NATIVEXCOMPONENT_RESULT_BAD_PARAMETER} component is NULL, displayY is NULL\n
508 *         or native XComponent is NULL.
509 * @since 12
510 * @version 1.0
511 */
512int32_t OH_NativeXComponent_GetTouchPointDisplayY(OH_NativeXComponent* component, uint32_t pointIndex, float* displayY);
513
514/**
515 * @brief Obtains the touch event dispatched by the ArkUI XComponent.
516 *
517 * @param component Indicates the pointer to this <b>OH_NativeXComponent</b> instance.
518 * @param window Indicates the native window handler.
519 * @param historicalPoints Indicates the pointer to the current historicalPoints.
520 * @return Returns the status code of the execution.
521 * @since 10
522 * @version 1.0
523 */
524int32_t OH_NativeXComponent_GetHistoricalPoints(OH_NativeXComponent* component, const void* window,
525    int32_t* size, OH_NativeXComponent_HistoricalPoint** historicalPoints);
526
527/**
528 * @brief Obtains the mouse event dispatched by the ArkUI XComponent.
529 *
530 * @param component Indicates the pointer to this <b>OH_NativeXComponent</b> instance.
531 * @param window Indicates the native window handler.
532 * @param mouseEvent Indicates the pointer to the current mouse event.
533 * @return Returns the status code of the execution.
534 * @since 9
535 * @version 1.0
536 */
537int32_t OH_NativeXComponent_GetMouseEvent(
538    OH_NativeXComponent* component, const void* window, OH_NativeXComponent_MouseEvent* mouseEvent);
539
540/**
541 * @brief Registers a callback for this <b>OH_NativeXComponent</b> instance.
542 *
543 * @param component Indicates the pointer to this <b>OH_NativeXComponent</b> instance.
544 * @param callback Indicates the pointer to a surface lifecycle and touch event callback.
545 * @return Returns the status code of the execution.
546 * @since 8
547 * @version 1.0
548 */
549int32_t OH_NativeXComponent_RegisterCallback(OH_NativeXComponent* component, OH_NativeXComponent_Callback* callback);
550
551/**
552 * @brief Registers a callback for this <b>OH_NativeXComponent</b> instance.
553 *
554 * @param component Indicates the pointer to this <b>OH_NativeXComponent</b> instance.
555 * @param callback Indicates the pointer to a mouse event callback.
556 * @return Returns the status code of the execution.
557 * @since 9
558 * @version 1.0
559 */
560int32_t OH_NativeXComponent_RegisterMouseEventCallback(
561    OH_NativeXComponent* component, OH_NativeXComponent_MouseEvent_Callback* callback);
562
563/**
564 * @brief Registers a callback for this <b>OH_NativeXComponent</b> instance.
565 *
566 * @param component Indicates the pointer to this <b>OH_NativeXComponent</b> instance.
567 * @param callback Indicates the pointer to a focus event callback.
568 * @return Returns the status code of the execution.
569 * @since 10
570 * @version 1.0
571 */
572int32_t OH_NativeXComponent_RegisterFocusEventCallback(
573    OH_NativeXComponent* component, void (*callback)(OH_NativeXComponent* component, void* window));
574
575/**
576 * @brief Registers a callback for this <b>OH_NativeXComponent</b> instance.
577 *
578 * @param component Indicates the pointer to this <b>OH_NativeXComponent</b> instance.
579 * @param callback Indicates the pointer to a key event callback.
580 * @return Returns the status code of the execution.
581 * @since 10
582 * @version 1.0
583 */
584int32_t OH_NativeXComponent_RegisterKeyEventCallback(
585    OH_NativeXComponent* component, void (*callback)(OH_NativeXComponent* component, void* window));
586
587/**
588 * @brief Registers a callback for this <b>OH_NativeXComponent</b> instance.
589 *
590 * @param component Indicates the pointer to this <b>OH_NativeXComponent</b> instance.
591 * @param callback Indicates the pointer to a blur event callback.
592 * @return Returns the status code of the execution.
593 * @since 10
594 * @version 1.0
595 */
596int32_t OH_NativeXComponent_RegisterBlurEventCallback(
597    OH_NativeXComponent* component, void (*callback)(OH_NativeXComponent* component, void* window));
598
599/**
600 * @brief Obtains the key event dispatched by the ArkUI XComponent.
601 *
602 * @param component Indicates the pointer to this <b>OH_NativeXComponent</b> instance.
603 * @param keyEvent Indicates the pointer to pointer of <b>OH_NativeXComponent_KeyEvent</b> instance.
604 * @return Returns the status code of the execution.
605 * @since 10
606 * @version 1.0
607 */
608int32_t OH_NativeXComponent_GetKeyEvent(OH_NativeXComponent* component, OH_NativeXComponent_KeyEvent** keyEvent);
609
610/**
611 * @brief Obtains the action of the key event.
612 *
613 * @param keyEvent Indicates the pointer to this <b>OH_NativeXComponent_KeyEvent</b> instance.
614 * @param action Indicates the action of the <b>OH_NativeXComponent_KeyEvent</b> instance.
615 * @return Returns the status code of the execution.
616 * @since 10
617 * @version 1.0
618 */
619int32_t OH_NativeXComponent_GetKeyEventAction(
620    OH_NativeXComponent_KeyEvent* keyEvent, OH_NativeXComponent_KeyAction* action);
621
622/**
623 * @brief Obtains the keyCode of the key event.
624 *
625 * @param keyEvent Indicates the pointer to this <b>OH_NativeXComponent_KeyEvent</b> instance.
626 * @param code Indicates the keyCode of the <b>OH_NativeXComponent_KeyEvent</b> instance.
627 * @return Returns the status code of the execution.
628 * @since 10
629 * @version 1.0
630 */
631int32_t OH_NativeXComponent_GetKeyEventCode(OH_NativeXComponent_KeyEvent* keyEvent, OH_NativeXComponent_KeyCode* code);
632
633/**
634 * @brief Obtains the sourceType of the key event.
635 *
636 * @param keyEvent Indicates the pointer to this <b>OH_NativeXComponent_KeyEvent</b> instance.
637 * @param sourceType Indicates the sourceType of the <b>OH_NativeXComponent_KeyEvent</b> instance.
638 * @return Returns the status code of the execution.
639 * @since 10
640 * @version 1.0
641 */
642int32_t OH_NativeXComponent_GetKeyEventSourceType(
643    OH_NativeXComponent_KeyEvent* keyEvent, OH_NativeXComponent_EventSourceType* sourceType);
644
645/**
646 * @brief Obtains the deviceId of the key event.
647 *
648 * @param keyEvent Indicates the pointer to this <b>OH_NativeXComponent_KeyEvent</b> instance.
649 * @param deviceId Indicates the deviceId of the <b>OH_NativeXComponent_KeyEvent</b> instance.
650 * @return Returns the status code of the execution.
651 * @since 10
652 * @version 1.0
653 */
654int32_t OH_NativeXComponent_GetKeyEventDeviceId(OH_NativeXComponent_KeyEvent* keyEvent, int64_t* deviceId);
655
656/**
657 * @brief Obtains the timestamp of the key event.
658 *
659 * @param keyEvent Indicates the pointer to this <b>OH_NativeXComponent_KeyEvent</b> instance.
660 * @param timestamp Indicates the timestamp of the <b>OH_NativeXComponent_KeyEvent</b> instance.
661 * @return Returns the status code of the execution.
662 * @since 10
663 * @version 1.0
664 */
665int32_t OH_NativeXComponent_GetKeyEventTimestamp(OH_NativeXComponent_KeyEvent* keyEvent, int64_t* timestamp);
666
667/**
668 * @brief Set the Expected FrameRateRange.
669 *
670 * @param component Indicates the pointer to this <b>OH_NativeXComponent</b> instance.
671 * @param callback Indicates the pointer to a expected rate range.
672 * @return Returns the status code of the execution.
673 * @since 11
674 * @version 1.0
675 */
676int32_t OH_NativeXComponent_SetExpectedFrameRateRange(
677    OH_NativeXComponent* component, OH_NativeXComponent_ExpectedRateRange* range);
678
679/**
680 * @brief Registers a callback for this <b>OH_NativeXComponent</b> instance.
681 *
682 * @param component Indicates the pointer to this <b>OH_NativeXComponent</b> instance.
683 * @param callback Indicates the pointer to a onFrame callback.
684 * @return Returns the status code of the execution.
685 * @since 11
686 * @version 1.0
687 */
688int32_t OH_NativeXComponent_RegisterOnFrameCallback(OH_NativeXComponent* component,
689    void (*callback)(OH_NativeXComponent* component, uint64_t timestamp, uint64_t targetTimestamp));
690
691/**
692 * @brief UnRegister a callback for this <b>OH_NativeXComponent</b> instance.
693 *
694 * @param component Indicates the pointer to this <b>OH_NativeXComponent</b> instance.
695 * @return Returns the status code of the execution.
696 * @since 11
697 * @version 1.0
698 */
699int32_t OH_NativeXComponent_UnregisterOnFrameCallback(OH_NativeXComponent* component);
700
701/**
702 * @brief Attaches the UI component created through the native API of ArkUI to this <b>OH_NativeXComponent</b> instance.
703 *
704 * @param component Indicates the pointer to the <b>OH_NativeXComponent</b> instance.
705 * @param root Indicates the pointer to the component instance created by the native API.
706 * @return Returns the error code.
707 *         Returns {@link ARKUI_ERROR_CODE_NO_ERROR} if the operation is successful.
708 *         Returns {@link ARKUI_ERROR_CODE_PARAM_INVALID} if a parameter error occurs.
709 *
710 * @since 12
711 */
712int32_t OH_NativeXComponent_AttachNativeRootNode(OH_NativeXComponent* component, ArkUI_NodeHandle root);
713
714/**
715 * @brief Detaches the native component of ArkUI from this <b>OH_NativeXComponent</b> instance.
716 *
717 * @param component Indicates the pointer to the <b>OH_NativeXComponent</b> instance.
718 * @param root Indicates the pointer to the component instance created by the native API.
719 * @return Returns the error code.
720 *         Returns {@link ARKUI_ERROR_CODE_NO_ERROR} if the operation is successful.
721 *         Returns {@link ARKUI_ERROR_CODE_PARAM_INVALID} if a parameter error occurs.
722 *
723 * @since 12
724 */
725int32_t OH_NativeXComponent_DetachNativeRootNode(OH_NativeXComponent* component, ArkUI_NodeHandle root);
726
727/**
728 * @brief Registers a UI input event callback for this <b>OH_NativeXComponent</b> instance and enables the callback to
729 * be invoked when a UI input event is received.
730 *
731 * @param component Indicates the pointer to the <b>OH_NativeXComponent</b> instance.
732 * @param callback Indicates the pointer to the UI input event callback.
733 * @param type Indicates the type of the current UI input event.
734 * @return Returns the error code.
735 *         Returns {@link ARKUI_ERROR_CODE_NO_ERROR} if the operation is successful.
736 *         Returns {@link ARKUI_ERROR_CODE_PARAM_INVALID} if a parameter error occurs.
737 * @since 12
738 */
739int32_t OH_NativeXComponent_RegisterUIInputEventCallback(
740    OH_NativeXComponent* component,
741    void (*callback)(OH_NativeXComponent* component, ArkUI_UIInputEvent* event,
742                     ArkUI_UIInputEvent_Type type),
743    ArkUI_UIInputEvent_Type type);
744
745/**
746 * @brief Set whether the <b>OH_NativeXComponent</b> instance needs soft keyboard.
747 * @param component Indicates the pointer to this <b>OH_NativeXComponent</b> instance.
748 * @param needSoftKeyboard Indicates whether the <b>OH_NativeXComponent</b> instance needs soft keyboard or not.
749 *                           Default value is false.
750 * @return Returns the status code of the execution.
751 * @since 12
752 * @version 1.0
753 */
754int32_t OH_NativeXComponent_SetNeedSoftKeyboard(OH_NativeXComponent* component, bool needSoftKeyboard);
755
756/**
757 * @brief Registers a callback for this <b>OH_NativeXComponent</b> instance.
758 *
759 * @param component Indicates the pointer to this <b>OH_NativeXComponent</b> instance.
760 * @param callback Indicates the pointer to a surface show event callback.
761 * @return Returns the status code of the execution.
762 * @since 12
763 * @version 1.0
764 */
765int32_t OH_NativeXComponent_RegisterSurfaceShowCallback(
766    OH_NativeXComponent* component, void (*callback)(OH_NativeXComponent* component, void* window));
767
768/**
769 * @brief Registers a callback for this <b>OH_NativeXComponent</b> instance.
770 *
771 * @param component Indicates the pointer to this <b>OH_NativeXComponent</b> instance.
772 * @param callback Indicates the pointer to a surface hide event callback.
773 * @return Returns the status code of the execution.
774 * @since 12
775 * @version 1.0
776 */
777int32_t OH_NativeXComponent_RegisterSurfaceHideCallback(
778    OH_NativeXComponent* component, void (*callback)(OH_NativeXComponent* component, void* window));
779
780/**
781 * @brief Registers a custom event intercept callback for this <b>OH_NativeXComponent</b> and enables the callback
782 * during the hit test.
783 *
784 * @param component Indicates the pointer to the <b>OH_NativeXComponent</b> instance.
785 * @param callback Indicates the pointer to the custom event intercept callback.
786 * @return Returns the error code.
787 *         Returns {@link ARKUI_ERROR_CODE_NO_ERROR} if the operation is successful.
788 *         Returns {@link ARKUI_ERROR_CODE_PARAM_INVALID} if a parameter error occurs.
789 * @since 12
790 */
791int32_t OH_NativeXComponent_RegisterOnTouchInterceptCallback(
792    OH_NativeXComponent* component, HitTestMode (*callback)(OH_NativeXComponent* component, ArkUI_UIInputEvent* event));
793
794/**
795 * @brief Obtains the touch event's source type dispatched by the ArkUI XComponent.
796 *
797 * @param component Indicates the pointer to this <b>OH_NativeXComponent</b> instance.
798 * @param pointId Indicates the id of the touch point which triggers this touch event.
799 * @param sourceType Indicates the source type of this touch event.
800 * @return Returns OH_NATIVEXCOMPONENT_RESULT_SUCCESS if success.
801 *         Returns OH_NATIVEXCOMPONENT_RESULT_BAD_PARAMETER if a parameter exception occurs.
802 *         Returns OH_NATIVEXCOMPONENT_RESULT_FAILED if other exceptions occur.
803 * @since 12
804 * @version 1.0
805 */
806int32_t OH_NativeXComponent_GetTouchEventSourceType(
807    OH_NativeXComponent* component, int32_t pointId, OH_NativeXComponent_EventSourceType* sourceType);
808
809/**
810 * @brief Obtains the pointer to an <b>OH_NativeXComponent</b> instance based on the specified component
811 * instance created by the native API.
812 *
813 * @param node Indicates the pointer to the component instance created by the native API.
814 * @return Returns the pointer to the <b>OH_NativeXComponent</b> instance.
815 * @since 12
816 * @version 1.0
817 */
818OH_NativeXComponent* OH_NativeXComponent_GetNativeXComponent(ArkUI_NodeHandle node);
819
820/**
821 * @brief Obtains the pointer to the <b> ArkUI_AccessibilityProvider</b>
822 * instance of this <b>OH_NativeXComponent</b> instance.
823 *
824 * @param component Indicates the pointer to the <b>OH_NativeXComponent</b> instance.
825 * @param handle Indicates the pointer to the <b>ArkUI_AccessibilityProvider</b> instance.
826 * @return Returns {@link OH_NATIVEXCOMPONENT_RESULT_SUCCESS} if the operation is successful.
827 *         Returns {@link OH_NATIVEXCOMPONENT_RESULT_BAD_PARAMETER} if a parameter error occurs.
828 * @since 13
829 */
830int32_t OH_NativeXComponent_GetNativeAccessibilityProvider(
831    OH_NativeXComponent* component, ArkUI_AccessibilityProvider** handle);
832
833#ifdef __cplusplus
834};
835#endif
836#endif // _NATIVE_INTERFACE_XCOMPONENT_H_
837