use super::*;
impl_widget_behavior!(
crate::widgets::controls::button::ButtonRenderState,
crate::widgets::controls::button::render_button_node,
crate::widgets::controls::button::measure_button_node
);
impl_widget_behavior!(
crate::widgets::controls::toggle::ToggleRenderState,
crate::widgets::controls::toggle::render_toggle_node,
crate::widgets::controls::toggle::measure_toggle_node
);
impl_widget_behavior!(
crate::widgets::controls::slider::SliderRenderState,
crate::widgets::controls::slider::render_slider_node,
crate::widgets::controls::slider::measure_slider_node
);
impl_widget_behavior!(
crate::widgets::controls::stepper::StepperRenderState,
crate::widgets::controls::stepper::render_stepper_node,
crate::widgets::controls::stepper::measure_stepper_node
);
impl_widget_behavior!(
crate::widgets::controls::progress::ProgressRenderState,
crate::widgets::controls::progress::render_progress_node,
crate::widgets::controls::progress::measure_progress_node
);
impl_widget_behavior!(
crate::widgets::controls::button::MenuRenderState,
crate::widgets::controls::button::render_menu_node,
crate::widgets::controls::button::measure_menu_node
);
impl_widget_behavior!(
crate::widgets::controls::date_picker::DatePickerRenderState,
crate::widgets::controls::date_picker::render_date_picker_node,
crate::widgets::controls::date_picker::measure_date_picker_node
);
impl_widget_behavior!(
crate::widgets::controls::color_picker::ColorPickerRenderState,
crate::widgets::controls::color_picker::render_color_picker_node,
crate::widgets::controls::color_picker::measure_color_picker_node
);
impl_widget_behavior!(
crate::widgets::controls::picker::PickerRenderState,
crate::widgets::controls::picker::render_picker_node,
crate::widgets::controls::picker::measure_picker_node
);
impl_widget_behavior!(
crate::widgets::controls::text_field::TextFieldRenderState,
crate::widgets::controls::text_field::render_text_field_node,
crate::widgets::controls::text_field::measure_text_field_node
);
impl_widget_behavior!(
crate::widgets::controls::text_field::SecureFieldRenderState,
crate::widgets::controls::text_field::render_secure_field_node,
crate::widgets::controls::text_field::measure_secure_field_node
);
impl_widget_behavior!(
crate::widgets::layout::badge::BadgeRenderState,
crate::widgets::layout::badge::render_badge_node,
crate::widgets::layout::badge::measure_badge_node
);
impl RenderNode {
pub(super) fn build_widget<S>(
state: Rc<S>,
stretch: StretchAxis,
env: &Environment,
) -> RenderNode
where
S: WidgetBehavior + 'static,
{
RenderNode::Widget(WidgetNode {
#[cfg(feature = "accessibility")]
accessibility_identity: Rc::new(()),
behavior: state,
stretch,
env: env.clone(),
})
}
pub(super) fn build_button(
config: ButtonConfig,
env: &Environment,
renderer: &mut HydrolysisRenderer,
) -> RenderNode {
use crate::widgets::controls::button::ButtonRenderState;
let mut state = ButtonRenderState::from_config(config);
state.prebuild_label(renderer, env);
let state = Rc::new(RefCell::new(state));
Self::build_widget(state, StretchAxis::None, env)
}
pub(super) fn build_toggle(
config: ToggleConfig,
env: &Environment,
renderer: &mut HydrolysisRenderer,
) -> RenderNode {
use crate::widgets::controls::toggle::ToggleRenderState;
let stretch = waterui_core::NativeView::stretch_axis(&config);
let mut state = ToggleRenderState::from_config(config);
state.prebuild(renderer, env);
let state = Rc::new(RefCell::new(state));
Self::build_widget(state, stretch, env)
}
pub(super) fn build_slider(
config: SliderConfig,
env: &Environment,
renderer: &mut HydrolysisRenderer,
) -> RenderNode {
use crate::widgets::controls::slider::SliderRenderState;
let stretch = waterui_core::NativeView::stretch_axis(&config);
let mut state = SliderRenderState::from_config(config);
state.prebuild_labels(renderer, env);
let state = Rc::new(RefCell::new(state));
Self::build_widget(state, stretch, env)
}
pub(super) fn build_stepper(
config: StepperConfig,
env: &Environment,
renderer: &mut HydrolysisRenderer,
) -> RenderNode {
use crate::widgets::controls::stepper::StepperRenderState;
let stretch = waterui_core::NativeView::stretch_axis(&config);
let mut state = StepperRenderState::from_config(config);
state.prebuild(renderer, env);
let state = Rc::new(RefCell::new(state));
Self::build_widget(state, stretch, env)
}
pub(super) fn build_progress(
config: ProgressConfig,
env: &Environment,
renderer: &mut HydrolysisRenderer,
) -> RenderNode {
use crate::widgets::controls::progress::ProgressRenderState;
let stretch = waterui_core::NativeView::stretch_axis(&config);
let mut state = ProgressRenderState::from_config(config);
state.prebuild_labels(renderer, env);
let state = Rc::new(RefCell::new(state));
Self::build_widget(state, stretch, env)
}
pub(super) fn build_menu(
menu: ResolvedMenu,
env: &Environment,
renderer: &mut HydrolysisRenderer,
) -> RenderNode {
use crate::widgets::controls::button::MenuRenderState;
let stretch = <ResolvedMenu as waterui_core::NativeView>::stretch_axis(&menu);
let mut state = MenuRenderState::from_resolved(menu);
state.prebuild_label(renderer, env);
let state = Rc::new(RefCell::new(state));
Self::build_widget(state, stretch, env)
}
pub(super) fn build_date_picker(
config: DatePickerConfig,
env: &Environment,
renderer: &mut HydrolysisRenderer,
) -> RenderNode {
use crate::widgets::controls::date_picker::DatePickerRenderState;
let stretch = waterui_core::NativeView::stretch_axis(&config);
let mut state = DatePickerRenderState::from_config(config);
state.prebuild(renderer, env);
let state = Rc::new(RefCell::new(state));
Self::build_widget(state, stretch, env)
}
pub(super) fn build_color_picker(
config: ColorPickerConfig,
env: &Environment,
renderer: &mut HydrolysisRenderer,
) -> RenderNode {
use crate::widgets::controls::color_picker::ColorPickerRenderState;
let stretch = waterui_core::NativeView::stretch_axis(&config);
let mut state = ColorPickerRenderState::from_config(config);
state.prebuild(renderer, env);
let state = Rc::new(RefCell::new(state));
Self::build_widget(state, stretch, env)
}
pub(super) fn build_picker(config: PickerConfig, env: &Environment) -> RenderNode {
use crate::widgets::controls::picker::PickerRenderState;
let stretch = waterui_core::NativeView::stretch_axis(&config);
let state = Rc::new(RefCell::new(PickerRenderState::new(config)));
Self::build_widget(state, stretch, env)
}
pub(super) fn build_text_field(
config: ResolvedTextFieldConfig,
env: &Environment,
renderer: &mut HydrolysisRenderer,
) -> RenderNode {
use crate::widgets::controls::text_field::TextFieldRenderState;
let stretch = waterui_core::NativeView::stretch_axis(&config);
let mut state = TextFieldRenderState::from_config(config);
state.prebuild(renderer, env);
let state = Rc::new(RefCell::new(state));
Self::build_widget(state, stretch, env)
}
pub(super) fn build_secure_field(
config: SecureFieldConfig,
env: &Environment,
renderer: &mut HydrolysisRenderer,
) -> RenderNode {
use crate::widgets::controls::text_field::SecureFieldRenderState;
let stretch = waterui_core::NativeView::stretch_axis(&config);
let mut state = SecureFieldRenderState::from_config(config);
state.prebuild(renderer, env);
let state = Rc::new(RefCell::new(state));
Self::build_widget(state, stretch, env)
}
pub(super) fn build_badge(
config: BadgeConfig,
env: &Environment,
renderer: &mut HydrolysisRenderer,
) -> RenderNode {
use crate::widgets::layout::badge::BadgeRenderState;
let stretch = waterui_core::NativeView::stretch_axis(&config);
let mut state = BadgeRenderState::from_config(config);
state.prebuild_content(renderer, env);
let state = Rc::new(RefCell::new(state));
Self::build_widget(state, stretch, env)
}
}