ohos_arkui_binding/api/node_custom_event/
event.rs1use std::{os::raw::c_void, ptr::NonNull};
4
5use ohos_arkui_sys::{
6 ArkUI_NodeCustomEvent, OH_ArkUI_NodeCustomEvent_GetCustomSpanDrawInfo,
7 OH_ArkUI_NodeCustomEvent_GetCustomSpanMeasureInfo,
8 OH_ArkUI_NodeCustomEvent_GetDrawContextInDraw, OH_ArkUI_NodeCustomEvent_GetEventTargetId,
9 OH_ArkUI_NodeCustomEvent_GetEventType, OH_ArkUI_NodeCustomEvent_GetLayoutConstraintInMeasure,
10 OH_ArkUI_NodeCustomEvent_GetNodeHandle, OH_ArkUI_NodeCustomEvent_GetPositionInLayout,
11 OH_ArkUI_NodeCustomEvent_GetUserData, OH_ArkUI_NodeCustomEvent_SetCustomSpanMetrics,
12};
13
14use crate::{check_arkui_status, ArkUINode, ArkUIResult};
15
16use super::{
17 CustomSpanDrawInfo, CustomSpanMeasureInfo, CustomSpanMetrics, DrawContext, IntOffset,
18 LayoutConstraintHandle,
19};
20
21pub struct NodeCustomEvent {
23 raw: NonNull<ArkUI_NodeCustomEvent>,
24}
25
26impl NodeCustomEvent {
27 pub(crate) fn from_raw(raw: *mut ArkUI_NodeCustomEvent) -> Option<Self> {
28 NonNull::new(raw).map(|raw| Self { raw })
29 }
30
31 fn raw(&self) -> *mut ArkUI_NodeCustomEvent {
32 self.raw.as_ptr()
33 }
34
35 pub fn layout_constraint_in_measure(&self) -> Option<LayoutConstraintHandle> {
37 let constraint =
38 unsafe { OH_ArkUI_NodeCustomEvent_GetLayoutConstraintInMeasure(self.raw()) };
39 LayoutConstraintHandle::from_raw(constraint)
40 }
41
42 pub fn position_in_layout(&self) -> IntOffset {
44 unsafe { OH_ArkUI_NodeCustomEvent_GetPositionInLayout(self.raw()) }.into()
45 }
46
47 pub fn draw_context_in_draw(&self) -> Option<DrawContext> {
49 let draw_context = unsafe { OH_ArkUI_NodeCustomEvent_GetDrawContextInDraw(self.raw()) };
50 DrawContext::from_raw(draw_context)
51 }
52
53 pub fn event_target_id(&self) -> i32 {
55 unsafe { OH_ArkUI_NodeCustomEvent_GetEventTargetId(self.raw()) }
56 }
57
58 pub fn user_data(&self) -> Option<NonNull<c_void>> {
60 let user_data = unsafe { OH_ArkUI_NodeCustomEvent_GetUserData(self.raw()) };
61 NonNull::new(user_data)
62 }
63
64 pub fn node_handle(&self) -> Option<ArkUINode> {
66 let node = unsafe { OH_ArkUI_NodeCustomEvent_GetNodeHandle(self.raw()) };
67 ArkUINode::from_raw_handle(node)
68 }
69
70 pub fn event_type(&self) -> crate::NodeCustomEventType {
72 unsafe { OH_ArkUI_NodeCustomEvent_GetEventType(self.raw()).into() }
73 }
74
75 pub fn get_custom_span_measure_info(
76 &self,
77 info: &mut CustomSpanMeasureInfo,
78 ) -> ArkUIResult<()> {
79 unsafe {
80 check_arkui_status!(OH_ArkUI_NodeCustomEvent_GetCustomSpanMeasureInfo(
81 self.raw(),
82 info.raw()
83 ))
84 }
85 }
86
87 pub fn set_custom_span_metrics(&self, metrics: &mut CustomSpanMetrics) -> ArkUIResult<()> {
88 unsafe {
89 check_arkui_status!(OH_ArkUI_NodeCustomEvent_SetCustomSpanMetrics(
90 self.raw(),
91 metrics.raw()
92 ))
93 }
94 }
95
96 pub fn get_custom_span_draw_info(&self, info: &mut CustomSpanDrawInfo) -> ArkUIResult<()> {
97 unsafe {
98 check_arkui_status!(OH_ArkUI_NodeCustomEvent_GetCustomSpanDrawInfo(
99 self.raw(),
100 info.raw()
101 ))
102 }
103 }
104}