Skip to main content

ohos_arkui_binding/component/attribute/
common.rs

1//! Module component::attribute::common wrappers and related types.
2
3use std::{cell::RefCell, os::raw::c_void, rc::Rc};
4
5use crate::{
6    ArkUINode, ArkUINodeAttributeItem, ArkUINodeAttributeNumber, ArkUINodeAttributeType,
7    ArkUIResult, ARK_UI_NATIVE_NODE_API_1,
8};
9
10/// Minimal node access required by all attribute traits.
11pub trait ArkUIAttributeBasic {
12    /// Make sure every node can get ArkUINode for built-in method with current trait
13    fn raw(&self) -> &ArkUINode;
14
15    fn borrow_mut(&mut self) -> &mut ArkUINode;
16}
17
18/// This trait is used to set common attribute for node.
19/// Every node should implement this trait, include the custom node.
20pub trait ArkUICommonAttribute: ArkUIAttributeBasic {
21    fn set_attribute(
22        &self,
23        attribute: ArkUINodeAttributeType,
24        value: ArkUINodeAttributeItem,
25    ) -> ArkUIResult<()> {
26        ARK_UI_NATIVE_NODE_API_1.with(|api| api.set_attribute(self.raw(), attribute, value))
27    }
28
29    fn get_attribute(
30        &self,
31        attribute: ArkUINodeAttributeType,
32    ) -> ArkUIResult<ArkUINodeAttributeItem> {
33        ARK_UI_NATIVE_NODE_API_1.with(|api| api.get_attribute(self.raw(), attribute))
34    }
35
36    fn reset_attribute(&self, attribute: ArkUINodeAttributeType) -> ArkUIResult<()> {
37        ARK_UI_NATIVE_NODE_API_1.with(|api| api.reset_attribute(self.raw(), attribute))
38    }
39
40    fn set_number_attribute(
41        &self,
42        attribute: ArkUINodeAttributeType,
43        values: Vec<ArkUINodeAttributeNumber>,
44    ) -> ArkUIResult<()> {
45        self.set_attribute(attribute, ArkUINodeAttributeItem::NumberValue(values))
46    }
47
48    fn set_i32_attribute(&self, attribute: ArkUINodeAttributeType, value: i32) -> ArkUIResult<()> {
49        self.set_number_attribute(attribute, vec![ArkUINodeAttributeNumber::Int(value)])
50    }
51
52    fn set_u32_attribute(&self, attribute: ArkUINodeAttributeType, value: u32) -> ArkUIResult<()> {
53        self.set_number_attribute(attribute, vec![ArkUINodeAttributeNumber::Uint(value)])
54    }
55
56    fn set_f32_attribute(&self, attribute: ArkUINodeAttributeType, value: f32) -> ArkUIResult<()> {
57        self.set_number_attribute(attribute, vec![ArkUINodeAttributeNumber::Float(value)])
58    }
59
60    fn set_bool_attribute(
61        &self,
62        attribute: ArkUINodeAttributeType,
63        value: bool,
64    ) -> ArkUIResult<()> {
65        self.set_i32_attribute(attribute, if value { 1 } else { 0 })
66    }
67
68    fn set_string_attribute<T: Into<String>>(
69        &self,
70        attribute: ArkUINodeAttributeType,
71        value: T,
72    ) -> ArkUIResult<()> {
73        self.set_attribute(attribute, ArkUINodeAttributeItem::String(value.into()))
74    }
75
76    fn set_object_attribute(
77        &self,
78        attribute: ArkUINodeAttributeType,
79        value: *mut ::std::os::raw::c_void,
80    ) -> ArkUIResult<()> {
81        self.set_attribute(attribute, ArkUINodeAttributeItem::Object(value))
82    }
83
84    /// Set node height
85    fn width(&self, width: f32) -> ArkUIResult<()> {
86        self.set_f32_attribute(crate::ArkUINodeAttributeType::Width, width)
87    }
88
89    /// Set node height
90    fn height(&self, height: f32) -> ArkUIResult<()> {
91        self.set_f32_attribute(crate::ArkUINodeAttributeType::Height, height)
92    }
93
94    /// Set percent width
95    fn percent_width(&self, width: f32) -> ArkUIResult<()> {
96        self.set_f32_attribute(crate::ArkUINodeAttributeType::WidthPercent, width)
97    }
98
99    /// Set percent height
100    fn percent_height(&self, height: f32) -> ArkUIResult<()> {
101        self.set_f32_attribute(crate::ArkUINodeAttributeType::HeightPercent, height)
102    }
103
104    /// Set background-color
105    fn background_color(&self, color: u32) -> ArkUIResult<()> {
106        self.set_u32_attribute(crate::ArkUINodeAttributeType::BackgroundColor, color)
107    }
108
109    fn opacity(&self, opacity: f32) -> ArkUIResult<()> {
110        self.set_f32_attribute(crate::ArkUINodeAttributeType::Opacity, opacity)
111    }
112
113    fn enabled(&self, enabled: bool) -> ArkUIResult<()> {
114        self.set_bool_attribute(crate::ArkUINodeAttributeType::Enabled, enabled)
115    }
116
117    fn id<T: Into<String>>(&self, id: T) -> ArkUIResult<()> {
118        self.set_string_attribute(crate::ArkUINodeAttributeType::Id, id)
119    }
120
121    fn z_index(&self, z_index: i32) -> ArkUIResult<()> {
122        self.set_i32_attribute(crate::ArkUINodeAttributeType::ZIndex, z_index)
123    }
124
125    // BEGIN_GENERATED_COMMON_ATTRIBUTE_METHODS
126    fn set_background_image<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
127        self.set_attribute(crate::ArkUINodeAttributeType::BackgroundImage, value.into())
128    }
129
130    fn get_background_image(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
131        self.get_attribute(crate::ArkUINodeAttributeType::BackgroundImage)
132    }
133
134    fn set_padding<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
135        self.set_attribute(crate::ArkUINodeAttributeType::Padding, value.into())
136    }
137
138    fn get_padding(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
139        self.get_attribute(crate::ArkUINodeAttributeType::Padding)
140    }
141
142    fn set_margin<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
143        self.set_attribute(crate::ArkUINodeAttributeType::Margin, value.into())
144    }
145
146    fn get_margin(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
147        self.get_attribute(crate::ArkUINodeAttributeType::Margin)
148    }
149
150    fn set_translate<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
151        self.set_attribute(crate::ArkUINodeAttributeType::Translate, value.into())
152    }
153
154    fn get_translate(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
155        self.get_attribute(crate::ArkUINodeAttributeType::Translate)
156    }
157
158    fn set_scale<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
159        self.set_attribute(crate::ArkUINodeAttributeType::Scale, value.into())
160    }
161
162    fn get_scale(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
163        self.get_attribute(crate::ArkUINodeAttributeType::Scale)
164    }
165
166    fn set_rotate<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
167        self.set_attribute(crate::ArkUINodeAttributeType::Rotate, value.into())
168    }
169
170    fn get_rotate(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
171        self.get_attribute(crate::ArkUINodeAttributeType::Rotate)
172    }
173
174    fn set_brightness<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
175        self.set_attribute(crate::ArkUINodeAttributeType::Brightness, value.into())
176    }
177
178    fn get_brightness(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
179        self.get_attribute(crate::ArkUINodeAttributeType::Brightness)
180    }
181
182    fn set_saturation<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
183        self.set_attribute(crate::ArkUINodeAttributeType::Saturation, value.into())
184    }
185
186    fn get_saturation(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
187        self.get_attribute(crate::ArkUINodeAttributeType::Saturation)
188    }
189
190    fn set_blur<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
191        self.set_attribute(crate::ArkUINodeAttributeType::Blur, value.into())
192    }
193
194    fn get_blur(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
195        self.get_attribute(crate::ArkUINodeAttributeType::Blur)
196    }
197
198    fn set_linear_gradient<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
199        self.set_attribute(crate::ArkUINodeAttributeType::LinearGradient, value.into())
200    }
201
202    fn get_linear_gradient(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
203        self.get_attribute(crate::ArkUINodeAttributeType::LinearGradient)
204    }
205
206    fn set_alignment<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
207        self.set_attribute(crate::ArkUINodeAttributeType::Alignment, value.into())
208    }
209
210    fn get_alignment(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
211        self.get_attribute(crate::ArkUINodeAttributeType::Alignment)
212    }
213
214    fn set_border_width<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
215        self.set_attribute(crate::ArkUINodeAttributeType::BorderWidth, value.into())
216    }
217
218    fn get_border_width(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
219        self.get_attribute(crate::ArkUINodeAttributeType::BorderWidth)
220    }
221
222    fn set_border_radius<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
223        self.set_attribute(crate::ArkUINodeAttributeType::BorderRadius, value.into())
224    }
225
226    fn get_border_radius(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
227        self.get_attribute(crate::ArkUINodeAttributeType::BorderRadius)
228    }
229
230    fn set_border_color<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
231        self.set_attribute(crate::ArkUINodeAttributeType::BorderColor, value.into())
232    }
233
234    fn get_border_color(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
235        self.get_attribute(crate::ArkUINodeAttributeType::BorderColor)
236    }
237
238    fn set_border_style<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
239        self.set_attribute(crate::ArkUINodeAttributeType::BorderStyle, value.into())
240    }
241
242    fn get_border_style(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
243        self.get_attribute(crate::ArkUINodeAttributeType::BorderStyle)
244    }
245
246    fn set_visibility<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
247        self.set_attribute(crate::ArkUINodeAttributeType::Visibility, value.into())
248    }
249
250    fn get_visibility(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
251        self.get_attribute(crate::ArkUINodeAttributeType::Visibility)
252    }
253
254    fn set_clip<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
255        self.set_attribute(crate::ArkUINodeAttributeType::Clip, value.into())
256    }
257
258    fn get_clip(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
259        self.get_attribute(crate::ArkUINodeAttributeType::Clip)
260    }
261
262    fn set_clip_shape<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
263        self.set_attribute(crate::ArkUINodeAttributeType::ClipShape, value.into())
264    }
265
266    fn get_clip_shape(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
267        self.get_attribute(crate::ArkUINodeAttributeType::ClipShape)
268    }
269
270    fn set_transform<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
271        self.set_attribute(crate::ArkUINodeAttributeType::Transform, value.into())
272    }
273
274    fn get_transform(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
275        self.get_attribute(crate::ArkUINodeAttributeType::Transform)
276    }
277
278    fn set_hit_test_behavior<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
279        self.set_attribute(crate::ArkUINodeAttributeType::HitTestBehavior, value.into())
280    }
281
282    fn get_hit_test_behavior(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
283        self.get_attribute(crate::ArkUINodeAttributeType::HitTestBehavior)
284    }
285
286    fn set_position<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
287        self.set_attribute(crate::ArkUINodeAttributeType::Position, value.into())
288    }
289
290    fn get_position(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
291        self.get_attribute(crate::ArkUINodeAttributeType::Position)
292    }
293
294    fn set_shadow<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
295        self.set_attribute(crate::ArkUINodeAttributeType::Shadow, value.into())
296    }
297
298    fn get_shadow(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
299        self.get_attribute(crate::ArkUINodeAttributeType::Shadow)
300    }
301
302    fn set_custom_shadow<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
303        self.set_attribute(crate::ArkUINodeAttributeType::CustomShadow, value.into())
304    }
305
306    fn get_custom_shadow(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
307        self.get_attribute(crate::ArkUINodeAttributeType::CustomShadow)
308    }
309
310    fn set_background_image_size<T: Into<ArkUINodeAttributeItem>>(
311        &self,
312        value: T,
313    ) -> ArkUIResult<()> {
314        self.set_attribute(
315            crate::ArkUINodeAttributeType::BackgroundImageSize,
316            value.into(),
317        )
318    }
319
320    fn get_background_image_size(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
321        self.get_attribute(crate::ArkUINodeAttributeType::BackgroundImageSize)
322    }
323
324    fn set_background_image_size_with_style<T: Into<ArkUINodeAttributeItem>>(
325        &self,
326        value: T,
327    ) -> ArkUIResult<()> {
328        self.set_attribute(
329            crate::ArkUINodeAttributeType::BackgroundImageSizeWithStyle,
330            value.into(),
331        )
332    }
333
334    fn get_background_image_size_with_style(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
335        self.get_attribute(crate::ArkUINodeAttributeType::BackgroundImageSizeWithStyle)
336    }
337
338    fn set_background_blur_style<T: Into<ArkUINodeAttributeItem>>(
339        &self,
340        value: T,
341    ) -> ArkUIResult<()> {
342        self.set_attribute(
343            crate::ArkUINodeAttributeType::BackgroundBlurStyle,
344            value.into(),
345        )
346    }
347
348    fn get_background_blur_style(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
349        self.get_attribute(crate::ArkUINodeAttributeType::BackgroundBlurStyle)
350    }
351
352    fn set_transform_center<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
353        self.set_attribute(crate::ArkUINodeAttributeType::TransformCenter, value.into())
354    }
355
356    fn get_transform_center(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
357        self.get_attribute(crate::ArkUINodeAttributeType::TransformCenter)
358    }
359
360    fn set_opacity_transition<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
361        self.set_attribute(
362            crate::ArkUINodeAttributeType::OpacityTransition,
363            value.into(),
364        )
365    }
366
367    fn get_opacity_transition(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
368        self.get_attribute(crate::ArkUINodeAttributeType::OpacityTransition)
369    }
370
371    fn set_rotate_transition<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
372        self.set_attribute(
373            crate::ArkUINodeAttributeType::RotateTransition,
374            value.into(),
375        )
376    }
377
378    fn get_rotate_transition(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
379        self.get_attribute(crate::ArkUINodeAttributeType::RotateTransition)
380    }
381
382    fn set_scale_transition<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
383        self.set_attribute(crate::ArkUINodeAttributeType::ScaleTransition, value.into())
384    }
385
386    fn get_scale_transition(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
387        self.get_attribute(crate::ArkUINodeAttributeType::ScaleTransition)
388    }
389
390    fn set_translate_transition<T: Into<ArkUINodeAttributeItem>>(
391        &self,
392        value: T,
393    ) -> ArkUIResult<()> {
394        self.set_attribute(
395            crate::ArkUINodeAttributeType::TranslateTransition,
396            value.into(),
397        )
398    }
399
400    fn get_translate_transition(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
401        self.get_attribute(crate::ArkUINodeAttributeType::TranslateTransition)
402    }
403
404    fn set_move_transition<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
405        self.set_attribute(crate::ArkUINodeAttributeType::MoveTransition, value.into())
406    }
407
408    fn get_move_transition(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
409        self.get_attribute(crate::ArkUINodeAttributeType::MoveTransition)
410    }
411
412    fn set_focusable<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
413        self.set_attribute(crate::ArkUINodeAttributeType::Focusable, value.into())
414    }
415
416    fn get_focusable(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
417        self.get_attribute(crate::ArkUINodeAttributeType::Focusable)
418    }
419
420    fn set_default_focus<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
421        self.set_attribute(crate::ArkUINodeAttributeType::DefaultFocus, value.into())
422    }
423
424    fn get_default_focus(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
425        self.get_attribute(crate::ArkUINodeAttributeType::DefaultFocus)
426    }
427
428    fn set_response_region<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
429        self.set_attribute(crate::ArkUINodeAttributeType::ResponseRegion, value.into())
430    }
431
432    fn get_response_region(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
433        self.get_attribute(crate::ArkUINodeAttributeType::ResponseRegion)
434    }
435
436    fn set_overlay<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
437        self.set_attribute(crate::ArkUINodeAttributeType::Overlay, value.into())
438    }
439
440    fn get_overlay(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
441        self.get_attribute(crate::ArkUINodeAttributeType::Overlay)
442    }
443
444    fn reset_overlay(&self) -> ArkUIResult<()> {
445        self.reset_attribute(crate::ArkUINodeAttributeType::Overlay)
446    }
447
448    fn set_sweep_gradient<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
449        self.set_attribute(crate::ArkUINodeAttributeType::SweepGradient, value.into())
450    }
451
452    fn get_sweep_gradient(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
453        self.get_attribute(crate::ArkUINodeAttributeType::SweepGradient)
454    }
455
456    fn set_radial_gradient<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
457        self.set_attribute(crate::ArkUINodeAttributeType::RadialGradient, value.into())
458    }
459
460    fn get_radial_gradient(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
461        self.get_attribute(crate::ArkUINodeAttributeType::RadialGradient)
462    }
463
464    fn set_mask<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
465        self.set_attribute(crate::ArkUINodeAttributeType::Mask, value.into())
466    }
467
468    fn get_mask(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
469        self.get_attribute(crate::ArkUINodeAttributeType::Mask)
470    }
471
472    fn set_blend_mode<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
473        self.set_attribute(crate::ArkUINodeAttributeType::BlendMode, value.into())
474    }
475
476    fn get_blend_mode(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
477        self.get_attribute(crate::ArkUINodeAttributeType::BlendMode)
478    }
479
480    fn set_direction<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
481        self.set_attribute(crate::ArkUINodeAttributeType::Direction, value.into())
482    }
483
484    fn get_direction(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
485        self.get_attribute(crate::ArkUINodeAttributeType::Direction)
486    }
487
488    fn set_constraint_size<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
489        self.set_attribute(crate::ArkUINodeAttributeType::ConstraintSize, value.into())
490    }
491
492    fn get_constraint_size(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
493        self.get_attribute(crate::ArkUINodeAttributeType::ConstraintSize)
494    }
495
496    fn set_gray_scale<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
497        self.set_attribute(crate::ArkUINodeAttributeType::GrayScale, value.into())
498    }
499
500    fn get_gray_scale(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
501        self.get_attribute(crate::ArkUINodeAttributeType::GrayScale)
502    }
503
504    fn set_invert<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
505        self.set_attribute(crate::ArkUINodeAttributeType::Invert, value.into())
506    }
507
508    fn get_invert(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
509        self.get_attribute(crate::ArkUINodeAttributeType::Invert)
510    }
511
512    fn set_sepia<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
513        self.set_attribute(crate::ArkUINodeAttributeType::Sepia, value.into())
514    }
515
516    fn get_sepia(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
517        self.get_attribute(crate::ArkUINodeAttributeType::Sepia)
518    }
519
520    fn set_contrast<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
521        self.set_attribute(crate::ArkUINodeAttributeType::Contrast, value.into())
522    }
523
524    fn get_contrast(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
525        self.get_attribute(crate::ArkUINodeAttributeType::Contrast)
526    }
527
528    fn set_foreground_color<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
529        self.set_attribute(crate::ArkUINodeAttributeType::ForegroundColor, value.into())
530    }
531
532    fn get_foreground_color(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
533        self.get_attribute(crate::ArkUINodeAttributeType::ForegroundColor)
534    }
535
536    fn set_offset<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
537        self.set_attribute(crate::ArkUINodeAttributeType::Offset, value.into())
538    }
539
540    fn get_offset(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
541        self.get_attribute(crate::ArkUINodeAttributeType::Offset)
542    }
543
544    fn set_mark_anchor<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
545        self.set_attribute(crate::ArkUINodeAttributeType::MarkAnchor, value.into())
546    }
547
548    fn get_mark_anchor(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
549        self.get_attribute(crate::ArkUINodeAttributeType::MarkAnchor)
550    }
551
552    fn set_background_image_position<T: Into<ArkUINodeAttributeItem>>(
553        &self,
554        value: T,
555    ) -> ArkUIResult<()> {
556        self.set_attribute(
557            crate::ArkUINodeAttributeType::BackgroundImagePosition,
558            value.into(),
559        )
560    }
561
562    fn get_background_image_position(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
563        self.get_attribute(crate::ArkUINodeAttributeType::BackgroundImagePosition)
564    }
565
566    fn set_align_rules<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
567        self.set_attribute(crate::ArkUINodeAttributeType::AlignRules, value.into())
568    }
569
570    fn get_align_rules(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
571        self.get_attribute(crate::ArkUINodeAttributeType::AlignRules)
572    }
573
574    fn set_align_self<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
575        self.set_attribute(crate::ArkUINodeAttributeType::AlignSelf, value.into())
576    }
577
578    fn get_align_self(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
579        self.get_attribute(crate::ArkUINodeAttributeType::AlignSelf)
580    }
581
582    fn set_accessibility_group<T: Into<ArkUINodeAttributeItem>>(
583        &self,
584        value: T,
585    ) -> ArkUIResult<()> {
586        self.set_attribute(
587            crate::ArkUINodeAttributeType::AccessibilityGroup,
588            value.into(),
589        )
590    }
591
592    fn get_accessibility_group(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
593        self.get_attribute(crate::ArkUINodeAttributeType::AccessibilityGroup)
594    }
595
596    fn set_accessibility_text<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
597        self.set_attribute(
598            crate::ArkUINodeAttributeType::AccessibilityText,
599            value.into(),
600        )
601    }
602
603    fn get_accessibility_text(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
604        self.get_attribute(crate::ArkUINodeAttributeType::AccessibilityText)
605    }
606
607    fn set_accessibility_mode<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
608        self.set_attribute(
609            crate::ArkUINodeAttributeType::AccessibilityMode,
610            value.into(),
611        )
612    }
613
614    fn get_accessibility_mode(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
615        self.get_attribute(crate::ArkUINodeAttributeType::AccessibilityMode)
616    }
617
618    fn set_accessibility_description<T: Into<ArkUINodeAttributeItem>>(
619        &self,
620        value: T,
621    ) -> ArkUIResult<()> {
622        self.set_attribute(
623            crate::ArkUINodeAttributeType::AccessibilityDescription,
624            value.into(),
625        )
626    }
627
628    fn get_accessibility_description(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
629        self.get_attribute(crate::ArkUINodeAttributeType::AccessibilityDescription)
630    }
631
632    fn set_focus_status<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
633        self.set_attribute(crate::ArkUINodeAttributeType::FocusStatus, value.into())
634    }
635
636    fn get_focus_status(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
637        self.get_attribute(crate::ArkUINodeAttributeType::FocusStatus)
638    }
639
640    fn set_aspect_ratio<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
641        self.set_attribute(crate::ArkUINodeAttributeType::AspectRatio, value.into())
642    }
643
644    fn get_aspect_ratio(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
645        self.get_attribute(crate::ArkUINodeAttributeType::AspectRatio)
646    }
647
648    fn set_layout_weight<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
649        self.set_attribute(crate::ArkUINodeAttributeType::LayoutWeight, value.into())
650    }
651
652    fn get_layout_weight(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
653        self.get_attribute(crate::ArkUINodeAttributeType::LayoutWeight)
654    }
655
656    fn set_display_priority<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
657        self.set_attribute(crate::ArkUINodeAttributeType::DisplayPriority, value.into())
658    }
659
660    fn get_display_priority(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
661        self.get_attribute(crate::ArkUINodeAttributeType::DisplayPriority)
662    }
663
664    fn set_outline_width<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
665        self.set_attribute(crate::ArkUINodeAttributeType::OutlineWidth, value.into())
666    }
667
668    fn get_outline_width(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
669        self.get_attribute(crate::ArkUINodeAttributeType::OutlineWidth)
670    }
671
672    fn set_padding_percent<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
673        self.set_attribute(crate::ArkUINodeAttributeType::PaddingPercent, value.into())
674    }
675
676    fn get_padding_percent(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
677        self.get_attribute(crate::ArkUINodeAttributeType::PaddingPercent)
678    }
679
680    fn set_margin_percent<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
681        self.set_attribute(crate::ArkUINodeAttributeType::MarginPercent, value.into())
682    }
683
684    fn get_margin_percent(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
685        self.get_attribute(crate::ArkUINodeAttributeType::MarginPercent)
686    }
687
688    fn set_geometry_transition<T: Into<ArkUINodeAttributeItem>>(
689        &self,
690        value: T,
691    ) -> ArkUIResult<()> {
692        self.set_attribute(
693            crate::ArkUINodeAttributeType::GeometryTransition,
694            value.into(),
695        )
696    }
697
698    fn get_geometry_transition(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
699        self.get_attribute(crate::ArkUINodeAttributeType::GeometryTransition)
700    }
701
702    fn set_relative_layout_chain_mode<T: Into<ArkUINodeAttributeItem>>(
703        &self,
704        value: T,
705    ) -> ArkUIResult<()> {
706        self.set_attribute(
707            crate::ArkUINodeAttributeType::RelativeLayoutChainMode,
708            value.into(),
709        )
710    }
711
712    fn get_relative_layout_chain_mode(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
713        self.get_attribute(crate::ArkUINodeAttributeType::RelativeLayoutChainMode)
714    }
715
716    fn set_render_fit<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
717        self.set_attribute(crate::ArkUINodeAttributeType::RenderFit, value.into())
718    }
719
720    fn get_render_fit(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
721        self.get_attribute(crate::ArkUINodeAttributeType::RenderFit)
722    }
723
724    fn set_outline_color<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
725        self.set_attribute(crate::ArkUINodeAttributeType::OutlineColor, value.into())
726    }
727
728    fn get_outline_color(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
729        self.get_attribute(crate::ArkUINodeAttributeType::OutlineColor)
730    }
731
732    fn set_size<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
733        self.set_attribute(crate::ArkUINodeAttributeType::Size, value.into())
734    }
735
736    fn get_size(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
737        self.get_attribute(crate::ArkUINodeAttributeType::Size)
738    }
739
740    fn set_render_group<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
741        self.set_attribute(crate::ArkUINodeAttributeType::RenderGroup, value.into())
742    }
743
744    fn get_render_group(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
745        self.get_attribute(crate::ArkUINodeAttributeType::RenderGroup)
746    }
747
748    fn set_color_blend<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
749        self.set_attribute(crate::ArkUINodeAttributeType::ColorBlend, value.into())
750    }
751
752    fn get_color_blend(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
753        self.get_attribute(crate::ArkUINodeAttributeType::ColorBlend)
754    }
755
756    fn set_foreground_blur_style<T: Into<ArkUINodeAttributeItem>>(
757        &self,
758        value: T,
759    ) -> ArkUIResult<()> {
760        self.set_attribute(
761            crate::ArkUINodeAttributeType::ForegroundBlurStyle,
762            value.into(),
763        )
764    }
765
766    fn get_foreground_blur_style(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
767        self.get_attribute(crate::ArkUINodeAttributeType::ForegroundBlurStyle)
768    }
769
770    fn set_layout_rect<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
771        self.set_attribute(crate::ArkUINodeAttributeType::LayoutRect, value.into())
772    }
773
774    fn get_layout_rect(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
775        self.get_attribute(crate::ArkUINodeAttributeType::LayoutRect)
776    }
777
778    fn set_focus_on_touch<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
779        self.set_attribute(crate::ArkUINodeAttributeType::FocusOnTouch, value.into())
780    }
781
782    fn get_focus_on_touch(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
783        self.get_attribute(crate::ArkUINodeAttributeType::FocusOnTouch)
784    }
785
786    fn set_border_width_percent<T: Into<ArkUINodeAttributeItem>>(
787        &self,
788        value: T,
789    ) -> ArkUIResult<()> {
790        self.set_attribute(
791            crate::ArkUINodeAttributeType::BorderWidthPercent,
792            value.into(),
793        )
794    }
795
796    fn get_border_width_percent(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
797        self.get_attribute(crate::ArkUINodeAttributeType::BorderWidthPercent)
798    }
799
800    fn set_border_radius_percent<T: Into<ArkUINodeAttributeItem>>(
801        &self,
802        value: T,
803    ) -> ArkUIResult<()> {
804        self.set_attribute(
805            crate::ArkUINodeAttributeType::BorderRadiusPercent,
806            value.into(),
807        )
808    }
809
810    fn get_border_radius_percent(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
811        self.get_attribute(crate::ArkUINodeAttributeType::BorderRadiusPercent)
812    }
813
814    fn set_accessibility_id<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
815        self.set_attribute(crate::ArkUINodeAttributeType::AccessibilityId, value.into())
816    }
817
818    fn get_accessibility_id(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
819        self.get_attribute(crate::ArkUINodeAttributeType::AccessibilityId)
820    }
821
822    fn set_accessibility_actions<T: Into<ArkUINodeAttributeItem>>(
823        &self,
824        value: T,
825    ) -> ArkUIResult<()> {
826        self.set_attribute(
827            crate::ArkUINodeAttributeType::AccessibilityActions,
828            value.into(),
829        )
830    }
831
832    fn get_accessibility_actions(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
833        self.get_attribute(crate::ArkUINodeAttributeType::AccessibilityActions)
834    }
835
836    fn set_accessibility_role<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
837        self.set_attribute(
838            crate::ArkUINodeAttributeType::AccessibilityRole,
839            value.into(),
840        )
841    }
842
843    fn get_accessibility_role(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
844        self.get_attribute(crate::ArkUINodeAttributeType::AccessibilityRole)
845    }
846
847    fn set_accessibility_state<T: Into<ArkUINodeAttributeItem>>(
848        &self,
849        value: T,
850    ) -> ArkUIResult<()> {
851        self.set_attribute(
852            crate::ArkUINodeAttributeType::AccessibilityState,
853            value.into(),
854        )
855    }
856
857    fn get_accessibility_state(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
858        self.get_attribute(crate::ArkUINodeAttributeType::AccessibilityState)
859    }
860
861    fn set_accessibility_value<T: Into<ArkUINodeAttributeItem>>(
862        &self,
863        value: T,
864    ) -> ArkUIResult<()> {
865        self.set_attribute(
866            crate::ArkUINodeAttributeType::AccessibilityValue,
867            value.into(),
868        )
869    }
870
871    fn get_accessibility_value(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
872        self.get_attribute(crate::ArkUINodeAttributeType::AccessibilityValue)
873    }
874
875    fn set_expand_safe_area<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
876        self.set_attribute(crate::ArkUINodeAttributeType::ExpandSafeArea, value.into())
877    }
878
879    fn get_expand_safe_area(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
880        self.get_attribute(crate::ArkUINodeAttributeType::ExpandSafeArea)
881    }
882
883    fn set_visible_area_change_ratio<T: Into<ArkUINodeAttributeItem>>(
884        &self,
885        value: T,
886    ) -> ArkUIResult<()> {
887        self.set_attribute(
888            crate::ArkUINodeAttributeType::VisibleAreaChangeRatio,
889            value.into(),
890        )
891    }
892
893    fn get_visible_area_change_ratio(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
894        self.get_attribute(crate::ArkUINodeAttributeType::VisibleAreaChangeRatio)
895    }
896
897    #[cfg(feature = "api-17")]
898    fn set_visible_area_change_options(
899        &self,
900        options: &crate::VisibleAreaEventOptions,
901    ) -> ArkUIResult<()> {
902        self.set_attribute(
903            crate::ArkUINodeAttributeType::VisibleAreaChangeRatio,
904            crate::ArkUINodeAttributeItem::Object(options.raw().cast()),
905        )
906    }
907
908    #[cfg(feature = "api-17")]
909    fn get_visible_area_change_options(
910        &self,
911    ) -> ArkUIResult<Option<crate::VisibleAreaEventOptions>> {
912        match self.get_attribute(crate::ArkUINodeAttributeType::VisibleAreaChangeRatio)? {
913            ArkUINodeAttributeItem::Object(ptr) => {
914                Ok(Some(crate::VisibleAreaEventOptions::from_raw(ptr.cast())))
915            }
916            _ => Ok(None),
917        }
918    }
919
920    fn set_transition<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
921        self.set_attribute(crate::ArkUINodeAttributeType::Transition, value.into())
922    }
923
924    fn get_transition(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
925        self.get_attribute(crate::ArkUINodeAttributeType::Transition)
926    }
927
928    fn set_unique_id<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
929        self.set_attribute(crate::ArkUINodeAttributeType::UniqueId, value.into())
930    }
931
932    fn get_unique_id(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
933        self.get_attribute(crate::ArkUINodeAttributeType::UniqueId)
934    }
935
936    fn set_focus_box<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
937        self.set_attribute(crate::ArkUINodeAttributeType::FocusBox, value.into())
938    }
939
940    fn get_focus_box(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
941        self.get_attribute(crate::ArkUINodeAttributeType::FocusBox)
942    }
943
944    fn set_click_distance<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
945        self.set_attribute(crate::ArkUINodeAttributeType::ClickDistance, value.into())
946    }
947
948    fn get_click_distance(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
949        self.get_attribute(crate::ArkUINodeAttributeType::ClickDistance)
950    }
951
952    #[cfg(feature = "api-21")]
953    fn set_allow_force_dark<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
954        self.set_attribute(crate::ArkUINodeAttributeType::AllowForceDark, value.into())
955    }
956
957    #[cfg(feature = "api-21")]
958    fn get_allow_force_dark(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
959        self.get_attribute(crate::ArkUINodeAttributeType::AllowForceDark)
960    }
961
962    #[cfg(feature = "api-15")]
963    fn set_backdrop_blur<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
964        self.set_attribute(crate::ArkUINodeAttributeType::BackdropBlur, value.into())
965    }
966
967    #[cfg(feature = "api-15")]
968    fn get_backdrop_blur(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
969        self.get_attribute(crate::ArkUINodeAttributeType::BackdropBlur)
970    }
971
972    #[cfg(feature = "api-19")]
973    fn set_background_image_resizable_with_slice<T: Into<ArkUINodeAttributeItem>>(
974        &self,
975        value: T,
976    ) -> ArkUIResult<()> {
977        self.set_attribute(
978            crate::ArkUINodeAttributeType::BackgroundImageResizableWithSlice,
979            value.into(),
980        )
981    }
982
983    #[cfg(feature = "api-19")]
984    fn get_background_image_resizable_with_slice(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
985        self.get_attribute(crate::ArkUINodeAttributeType::BackgroundImageResizableWithSlice)
986    }
987
988    #[cfg(feature = "api-21")]
989    fn set_height_layoutpolicy<T: Into<ArkUINodeAttributeItem>>(
990        &self,
991        value: T,
992    ) -> ArkUIResult<()> {
993        self.set_attribute(
994            crate::ArkUINodeAttributeType::HeightLayoutpolicy,
995            value.into(),
996        )
997    }
998
999    #[cfg(feature = "api-21")]
1000    fn get_height_layoutpolicy(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
1001        self.get_attribute(crate::ArkUINodeAttributeType::HeightLayoutpolicy)
1002    }
1003
1004    #[cfg(feature = "api-18")]
1005    fn set_next_focus<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
1006        self.set_attribute(crate::ArkUINodeAttributeType::NextFocus, value.into())
1007    }
1008
1009    #[cfg(feature = "api-18")]
1010    fn get_next_focus(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
1011        self.get_attribute(crate::ArkUINodeAttributeType::NextFocus)
1012    }
1013
1014    #[cfg(feature = "api-21")]
1015    fn set_pixel_round<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
1016        self.set_attribute(crate::ArkUINodeAttributeType::PixelRound, value.into())
1017    }
1018
1019    #[cfg(feature = "api-21")]
1020    fn get_pixel_round(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
1021        self.get_attribute(crate::ArkUINodeAttributeType::PixelRound)
1022    }
1023
1024    #[cfg(feature = "api-21")]
1025    fn set_position_edges<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
1026        self.set_attribute(crate::ArkUINodeAttributeType::PositionEdges, value.into())
1027    }
1028
1029    #[cfg(feature = "api-21")]
1030    fn get_position_edges(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
1031        self.get_attribute(crate::ArkUINodeAttributeType::PositionEdges)
1032    }
1033
1034    #[cfg(feature = "api-20")]
1035    fn set_rotate_angle<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
1036        self.set_attribute(crate::ArkUINodeAttributeType::RotateAngle, value.into())
1037    }
1038
1039    #[cfg(feature = "api-20")]
1040    fn get_rotate_angle(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
1041        self.get_attribute(crate::ArkUINodeAttributeType::RotateAngle)
1042    }
1043
1044    #[cfg(feature = "api-14")]
1045    fn set_tab_stop<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
1046        self.set_attribute(crate::ArkUINodeAttributeType::TabStop, value.into())
1047    }
1048
1049    #[cfg(feature = "api-14")]
1050    fn get_tab_stop(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
1051        self.get_attribute(crate::ArkUINodeAttributeType::TabStop)
1052    }
1053
1054    #[cfg(feature = "api-20")]
1055    fn set_translate_with_percent<T: Into<ArkUINodeAttributeItem>>(
1056        &self,
1057        value: T,
1058    ) -> ArkUIResult<()> {
1059        self.set_attribute(
1060            crate::ArkUINodeAttributeType::TranslateWithPercent,
1061            value.into(),
1062        )
1063    }
1064
1065    #[cfg(feature = "api-20")]
1066    fn get_translate_with_percent(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
1067        self.get_attribute(crate::ArkUINodeAttributeType::TranslateWithPercent)
1068    }
1069
1070    #[cfg(feature = "api-17")]
1071    fn set_visible_area_approximate_change_ratio<T: Into<ArkUINodeAttributeItem>>(
1072        &self,
1073        value: T,
1074    ) -> ArkUIResult<()> {
1075        self.set_attribute(
1076            crate::ArkUINodeAttributeType::VisibleAreaApproximateChangeRatio,
1077            value.into(),
1078        )
1079    }
1080
1081    #[cfg(feature = "api-17")]
1082    fn get_visible_area_approximate_change_ratio(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
1083        self.get_attribute(crate::ArkUINodeAttributeType::VisibleAreaApproximateChangeRatio)
1084    }
1085
1086    #[cfg(feature = "api-21")]
1087    fn set_width_layoutpolicy<T: Into<ArkUINodeAttributeItem>>(&self, value: T) -> ArkUIResult<()> {
1088        self.set_attribute(
1089            crate::ArkUINodeAttributeType::WidthLayoutpolicy,
1090            value.into(),
1091        )
1092    }
1093
1094    #[cfg(feature = "api-21")]
1095    fn get_width_layoutpolicy(&self) -> ArkUIResult<ArkUINodeAttributeItem> {
1096        self.get_attribute(crate::ArkUINodeAttributeType::WidthLayoutpolicy)
1097    }
1098
1099    // END_GENERATED_COMMON_ATTRIBUTE_METHODS
1100    /// Remove child node
1101    fn remove_child(&mut self, index: usize) -> ArkUIResult<Option<Rc<RefCell<ArkUINode>>>> {
1102        let children = self.borrow_mut();
1103        if index < children.children().len() {
1104            let removed_node = children.children_mut().remove(index);
1105            ARK_UI_NATIVE_NODE_API_1
1106                .with(|api| api.remove_child(self.raw(), &removed_node.borrow()))?;
1107            Ok(Some(removed_node))
1108        } else {
1109            Ok(None)
1110        }
1111    }
1112
1113    fn add_child<T: Into<ArkUINode>>(&mut self, child: T) -> ArkUIResult<()> {
1114        let child_handle: Rc<RefCell<ArkUINode>> = Rc::new(RefCell::new(child.into()));
1115
1116        let child_handle_clone = child_handle.clone();
1117        // save self ArkUINode to custom user data for event dispatch
1118        ARK_UI_NATIVE_NODE_API_1.with(|api| {
1119            api.set_user_data(
1120                &child_handle.borrow(),
1121                Box::into_raw(Box::new(child_handle_clone)) as *mut c_void,
1122            )
1123        })?;
1124        ARK_UI_NATIVE_NODE_API_1.with(|api| api.add_event_receiver(&child_handle.borrow()))?;
1125
1126        ARK_UI_NATIVE_NODE_API_1.with(|api| api.add_child(self.raw(), &child_handle.borrow()))?;
1127        self.borrow_mut().children_mut().push(child_handle);
1128        Ok(())
1129    }
1130
1131    /// Add an externally-owned child node without installing native event receiver state.
1132    ///
1133    /// This is intended for nodes created outside the Rust wrapper layer, such as ArkTS
1134    /// `FrameNode` handles bridged into native code. Registering wrapper user data and event
1135    /// receivers on those nodes can interfere with their original input pipeline.
1136    fn add_existing_child<T: Into<ArkUINode>>(&mut self, child: T) -> ArkUIResult<()> {
1137        let child_handle: Rc<RefCell<ArkUINode>> = Rc::new(RefCell::new(child.into()));
1138        ARK_UI_NATIVE_NODE_API_1.with(|api| api.add_child(self.raw(), &child_handle.borrow()))?;
1139        self.borrow_mut().children_mut().push(child_handle);
1140        Ok(())
1141    }
1142
1143    fn insert_child<T: Into<ArkUINode>>(&mut self, child: T, index: usize) -> ArkUIResult<()> {
1144        let child_handle: Rc<RefCell<ArkUINode>> = Rc::new(RefCell::new(child.into()));
1145        let child_handle_clone = child_handle.clone();
1146
1147        ARK_UI_NATIVE_NODE_API_1.with(|api| {
1148            api.set_user_data(
1149                &child_handle.borrow(),
1150                Box::into_raw(Box::new(child_handle_clone)) as *mut c_void,
1151            )
1152        })?;
1153        ARK_UI_NATIVE_NODE_API_1.with(|api| api.add_event_receiver(&child_handle.borrow()))?;
1154        ARK_UI_NATIVE_NODE_API_1
1155            .with(|api| api.insert_child(self.raw(), &child_handle.borrow(), index as i32))?;
1156        self.borrow_mut()
1157            .children_mut()
1158            .insert(index, child_handle.clone());
1159        Ok(())
1160    }
1161
1162    /// Insert an externally-owned child node without installing native event receiver state.
1163    fn insert_existing_child<T: Into<ArkUINode>>(
1164        &mut self,
1165        child: T,
1166        index: usize,
1167    ) -> ArkUIResult<()> {
1168        let child_handle: Rc<RefCell<ArkUINode>> = Rc::new(RefCell::new(child.into()));
1169        ARK_UI_NATIVE_NODE_API_1
1170            .with(|api| api.insert_child(self.raw(), &child_handle.borrow(), index as i32))?;
1171        self.borrow_mut()
1172            .children_mut()
1173            .insert(index, child_handle.clone());
1174        Ok(())
1175    }
1176}