diff --git a/crates/arkui/src/common/attribute.rs b/crates/arkui/src/common/attribute.rs index b845499..cfc8d1c 100644 --- a/crates/arkui/src/common/attribute.rs +++ b/crates/arkui/src/common/attribute.rs @@ -1,9 +1,13 @@ use std::ffi::CString; -use napi_ohos::bindgen_prelude::Either3; use ohos_arkui_sys::{ArkUI_AttributeItem, ArkUI_NumberValue}; -pub struct ArkUINodeAttributeNumber(pub(crate) Either3); +#[derive(Clone, Copy, PartialEq)] +pub enum ArkUINodeAttributeNumber { + Float(f32), + Int(i32), + Uint(u32), +} pub enum ArkUINodeAttributeItem { /// Accept number array @@ -21,33 +25,36 @@ impl From for ArkUI_AttributeItem { fn from(value: ArkUINodeAttributeItem) -> Self { match value { ArkUINodeAttributeItem::NumberValue(value) => { - let v: Vec = value + let mut v: Vec = value .iter() - .map(|v| match v.0 { - Either3::A(f) => ArkUI_NumberValue { f32_: f }, - Either3::B(i) => ArkUI_NumberValue { i32_: i }, - Either3::C(u) => ArkUI_NumberValue { u32_: u }, + .map(|v| match v { + ArkUINodeAttributeNumber::Float(f) => ArkUI_NumberValue { f32_: *f }, + ArkUINodeAttributeNumber::Int(i) => ArkUI_NumberValue { i32_: *i }, + ArkUINodeAttributeNumber::Uint(u) => ArkUI_NumberValue { u32_: *u }, }) .collect(); + let value_ptr = v.as_mut_ptr(); + let len = v.len(); + std::mem::forget(v); ArkUI_AttributeItem { - value: v.as_ptr(), - size: v.len() as i32, - string: std::ptr::null(), + value: value_ptr, + size: len as i32, + string: std::ptr::null_mut(), object: std::ptr::null_mut(), } } ArkUINodeAttributeItem::Object(obj) => ArkUI_AttributeItem { - value: std::ptr::null(), + value: std::ptr::null_mut(), size: 0, - string: std::ptr::null(), + string: std::ptr::null_mut(), object: obj, }, ArkUINodeAttributeItem::String(s) => { let c_string = CString::new(s).unwrap(); ArkUI_AttributeItem { - value: std::ptr::null(), + value: std::ptr::null_mut(), size: 0, - string: c_string.as_ptr(), + string: c_string.into_raw(), object: std::ptr::null_mut(), } } diff --git a/crates/arkui/src/component/built_in_component/text.rs b/crates/arkui/src/component/built_in_component/text.rs index c6edb4b..7b1f5c9 100644 --- a/crates/arkui/src/component/built_in_component/text.rs +++ b/crates/arkui/src/component/built_in_component/text.rs @@ -1,4 +1,4 @@ -use napi_ohos::{bindgen_prelude::Either3, Result}; +use napi_ohos::Result; use crate::{ ArkUINode, ArkUINodeAttributeItem, ArkUINodeAttributeNumber, ArkUINodeType, @@ -21,9 +21,7 @@ impl Text { pub fn set_font_size(&self, font_size: f32) -> Result<()> { let font_size_property = - ArkUINodeAttributeItem::NumberValue(vec![ArkUINodeAttributeNumber(Either3::A( - font_size, - ))]); + ArkUINodeAttributeItem::NumberValue(vec![ArkUINodeAttributeNumber::Float(font_size)]); ARK_UI_NATIVE_NODE_API_1.set_attribute( &self.0, crate::ArkUINodeAttributeType::FontSize, diff --git a/crates/arkui/src/component/common_attr.rs b/crates/arkui/src/component/common_attr.rs index 2c679fd..7405d64 100644 --- a/crates/arkui/src/component/common_attr.rs +++ b/crates/arkui/src/component/common_attr.rs @@ -1,4 +1,4 @@ -use napi_ohos::{bindgen_prelude::Either3, Result}; +use napi_ohos::Result; use crate::{ ArkUINode, ArkUINodeAttributeItem, ArkUINodeAttributeNumber, ARK_UI_NATIVE_NODE_API_1, @@ -13,7 +13,7 @@ pub trait ArkUICommonAttribute { /// Set node height fn set_height(&self, height: f32) -> Result<()> { let percent_width_property = - ArkUINodeAttributeItem::NumberValue(vec![ArkUINodeAttributeNumber(Either3::A(height))]); + ArkUINodeAttributeItem::NumberValue(vec![ArkUINodeAttributeNumber::Float(height)]); ARK_UI_NATIVE_NODE_API_1.set_attribute( self.raw(), crate::ArkUINodeAttributeType::Height, @@ -25,7 +25,7 @@ pub trait ArkUICommonAttribute { /// Set percent width fn set_percent_width(&self, width: f32) -> Result<()> { let percent_width_property = - ArkUINodeAttributeItem::NumberValue(vec![ArkUINodeAttributeNumber(Either3::A(width))]); + ArkUINodeAttributeItem::NumberValue(vec![ArkUINodeAttributeNumber::Float(width)]); ARK_UI_NATIVE_NODE_API_1.set_attribute( self.raw(), crate::ArkUINodeAttributeType::WidthPercent, @@ -37,7 +37,7 @@ pub trait ArkUICommonAttribute { /// Set percent height fn set_percent_height(&self, height: f32) -> Result<()> { let percent_height_property = - ArkUINodeAttributeItem::NumberValue(vec![ArkUINodeAttributeNumber(Either3::A(height))]); + ArkUINodeAttributeItem::NumberValue(vec![ArkUINodeAttributeNumber::Float(height)]); ARK_UI_NATIVE_NODE_API_1.set_attribute( self.raw(), crate::ArkUINodeAttributeType::HeightPercent, @@ -49,7 +49,7 @@ pub trait ArkUICommonAttribute { /// Set background-color fn set_background_color(&self, color: u32) -> Result<()> { let background_color_property = - ArkUINodeAttributeItem::NumberValue(vec![ArkUINodeAttributeNumber(Either3::C(color))]); + ArkUINodeAttributeItem::NumberValue(vec![ArkUINodeAttributeNumber::Uint(color)]); ARK_UI_NATIVE_NODE_API_1.set_attribute( self.raw(), crate::ArkUINodeAttributeType::BackgroundColor, diff --git a/crates/arkui/src/lib.rs b/crates/arkui/src/lib.rs index 264964c..b8a93a5 100644 --- a/crates/arkui/src/lib.rs +++ b/crates/arkui/src/lib.rs @@ -1,3 +1,5 @@ +#![allow(unused)] + mod common; mod component; mod r#type;