1use 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
10pub trait ArkUIAttributeBasic {
12 fn raw(&self) -> &ArkUINode;
14
15 fn borrow_mut(&mut self) -> &mut ArkUINode;
16}
17
18pub 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 fn width(&self, width: f32) -> ArkUIResult<()> {
86 self.set_f32_attribute(crate::ArkUINodeAttributeType::Width, width)
87 }
88
89 fn height(&self, height: f32) -> ArkUIResult<()> {
91 self.set_f32_attribute(crate::ArkUINodeAttributeType::Height, height)
92 }
93
94 fn percent_width(&self, width: f32) -> ArkUIResult<()> {
96 self.set_f32_attribute(crate::ArkUINodeAttributeType::WidthPercent, width)
97 }
98
99 fn percent_height(&self, height: f32) -> ArkUIResult<()> {
101 self.set_f32_attribute(crate::ArkUINodeAttributeType::HeightPercent, height)
102 }
103
104 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 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 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 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 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 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}