use super::*;
impl_widget_behavior!(
crate::widgets::layout::list::ListRenderState,
crate::widgets::layout::list::render_list_node,
|state: &crate::widgets::layout::list::ListRenderState, proposal, hydro, env, theme| {
crate::widgets::layout::list::measure_list_node(&state.config, proposal, hydro, env, theme)
}
; a11y: crate::widgets::layout::list::emit_list_accessibility
);
impl_widget_behavior!(
crate::widgets::layout::table::TableRenderState,
crate::widgets::layout::table::render_table_node,
|state: &crate::widgets::layout::table::TableRenderState, proposal, hydro, env, theme| {
crate::widgets::layout::table::measure_table_node(&state.config, proposal, hydro, env, theme)
}
; a11y: crate::widgets::layout::table::emit_table_accessibility
);
impl_widget_behavior!(
crate::widgets::nav::navigation::NavigationViewRenderState,
crate::widgets::nav::navigation::render_navigation_view_node,
crate::widgets::nav::navigation::measure_navigation_view_node
; a11y: crate::widgets::nav::navigation::emit_navigation_view_accessibility
);
impl_widget_behavior!(
crate::widgets::nav::navigation::NavigationSplitRenderState,
crate::widgets::nav::navigation::render_navigation_split_node,
crate::widgets::nav::navigation::measure_navigation_split_node
; a11y: crate::widgets::nav::navigation::emit_navigation_split_accessibility
);
impl_widget_behavior!(
crate::widgets::nav::navigation::NavigationStackRenderState,
crate::widgets::nav::navigation::render_navigation_stack_node,
crate::widgets::nav::navigation::measure_navigation_stack_node
; a11y: crate::widgets::nav::navigation::emit_navigation_stack_accessibility
);
impl_widget_behavior!(
crate::widgets::nav::tabs::TabsRenderState,
crate::widgets::nav::tabs::render_tabs_node,
crate::widgets::nav::tabs::measure_tabs_node
; a11y: crate::widgets::nav::tabs::emit_tabs_accessibility
);
impl_widget_behavior!(
ResolvedGradient,
crate::renderer::render_gradient_node,
crate::renderer::measure_gradient_node
; a11y: crate::renderer::views::emit_graphics_leaf_accessibility
);
impl_widget_behavior!(
ResolvedShape,
crate::renderer::render_shape_node,
crate::renderer::measure_shape_node
; a11y: crate::renderer::views::emit_graphics_leaf_accessibility
);
impl_widget_behavior!(
ResolvedMorphShape,
crate::renderer::render_morph_shape_node,
crate::renderer::measure_morph_shape_node
; a11y: crate::renderer::views::emit_graphics_leaf_accessibility
);
#[cfg(hydrolysis_macos_system_webview)]
impl_widget_behavior!(
crate::widgets::platform::webview::WebViewRenderState,
crate::widgets::platform::webview::render_webview_node,
crate::widgets::platform::webview::measure_webview_node
);
impl_widget_behavior!(
Spacer,
crate::widgets::layout::spacer::render_spacer_node,
crate::widgets::layout::spacer::measure_spacer_node,
Spacer::DEFAULT_LAYOUT_PRIORITY
);
impl_widget_behavior!(
(),
crate::widgets::layout::spacer::render_empty_node,
crate::widgets::layout::spacer::measure_empty_node
);
impl_widget_behavior!(
Divider,
crate::widgets::divider::render_divider_node,
crate::widgets::divider::measure_divider_node
);
impl_widget_behavior!(
Str,
crate::renderer::views::render_str_node,
crate::renderer::views::measure_str_node
; a11y: crate::renderer::views::emit_str_accessibility
);
impl RenderNode {
pub(super) fn build_list(
config: ListConfig,
env: &Environment,
renderer: &mut SemanticCore,
) -> RenderNode {
use crate::widgets::layout::list::ListRenderState;
let stretch = waterui_core::NativeView::stretch_axis(&config);
let state = Rc::new(RefCell::new(ListRenderState::from_config(config, renderer)));
Self::build_widget(state, stretch, env)
}
pub(super) fn build_table(config: TableConfig, env: &Environment) -> RenderNode {
use crate::widgets::layout::table::TableRenderState;
let stretch = waterui_core::NativeView::stretch_axis(&config);
let state = Rc::new(RefCell::new(TableRenderState::from_config(config)));
Self::build_widget(state, stretch, env)
}
pub(super) fn build_navigation_view(
navigation: NavigationView,
env: &Environment,
renderer: &mut SemanticCore,
) -> RenderNode {
use crate::widgets::nav::navigation::NavigationViewRenderState;
let stretch = waterui_core::NativeView::stretch_axis(&navigation);
let mut state = NavigationViewRenderState::from_view(navigation, env);
state.prebuild(renderer, env);
let state = Rc::new(RefCell::new(state));
Self::build_widget(state, stretch, env)
}
pub(super) fn build_navigation_split(
split: NavigationSplitLayout,
env: &Environment,
renderer: &mut SemanticCore,
) -> RenderNode {
use crate::widgets::nav::navigation::NavigationSplitRenderState;
let stretch = waterui_core::NativeView::stretch_axis(&split);
let mut state = NavigationSplitRenderState::from_layout(split);
state.prebuild(renderer, env);
let state = Rc::new(RefCell::new(state));
Self::build_widget(state, stretch, env)
}
pub(super) fn build_navigation_stack(
stack: NavigationStack<(), ()>,
env: &Environment,
) -> RenderNode {
use crate::widgets::nav::navigation::NavigationStackRenderState;
let stretch = waterui_core::NativeView::stretch_axis(&stack);
let state = Rc::new(RefCell::new(NavigationStackRenderState::from_stack(stack)));
Self::build_widget(state, stretch, env)
}
pub(super) fn build_tabs(
tabs: TabsLayout,
env: &Environment,
renderer: &mut SemanticCore,
) -> RenderNode {
use crate::widgets::nav::tabs::TabsRenderState;
let stretch = waterui_core::NativeView::stretch_axis(&tabs);
let mut state = TabsRenderState::from_tabs(tabs);
state.prebuild_labels(renderer, env);
let state = Rc::new(RefCell::new(state));
Self::build_widget(state, stretch, env)
}
pub(super) fn build_gradient(gradient: ResolvedGradient, env: &Environment) -> RenderNode {
let stretch = waterui_core::NativeView::stretch_axis(&gradient);
let gradient = Rc::new(RefCell::new(gradient));
Self::build_widget(gradient, stretch, env)
}
pub(super) fn build_shape(shape: ResolvedShape, env: &Environment) -> RenderNode {
let stretch = waterui_core::NativeView::stretch_axis(&shape);
let shape = Rc::new(RefCell::new(shape));
Self::build_widget(shape, stretch, env)
}
pub(super) fn build_morph_shape(shape: ResolvedMorphShape, env: &Environment) -> RenderNode {
let stretch = waterui_core::NativeView::stretch_axis(&shape);
let shape = Rc::new(RefCell::new(shape));
Self::build_widget(shape, stretch, env)
}
#[cfg(hydrolysis_macos_system_webview)]
pub(super) fn build_webview(
webview: WebView,
env: &Environment,
renderer: &mut SemanticCore,
) -> RenderNode {
use crate::widgets::platform::webview::WebViewRenderState;
let stretch = waterui_core::View::stretch_axis(&webview);
let mut state = WebViewRenderState::from_view(webview, env);
state.prebuild(renderer, env);
let state = Rc::new(RefCell::new(state));
Self::build_widget(state, stretch, env)
}
#[cfg(not(hydrolysis_macos_system_webview))]
pub(super) fn build_webview(
_webview: WebView,
_env: &Environment,
_renderer: &mut SemanticCore,
) -> RenderNode {
unsupported_webview()
}
pub(super) fn build_spacer(spacer: Spacer, env: &Environment) -> RenderNode {
let stretch = waterui_core::NativeView::stretch_axis(&spacer);
let spacer = Rc::new(RefCell::new(spacer));
Self::build_widget(spacer, stretch, env)
}
pub(super) fn build_empty(env: &Environment) -> RenderNode {
let stretch = waterui_core::NativeView::stretch_axis(&());
let empty = Rc::new(RefCell::new(()));
Self::build_widget(empty, stretch, env)
}
pub(super) fn build_divider(divider: Divider, env: &Environment) -> RenderNode {
let divider = Rc::new(RefCell::new(divider));
Self::build_widget(divider, StretchAxis::CrossAxis, env)
}
pub(super) fn build_str(text: Str, env: &Environment) -> RenderNode {
let text = Rc::new(RefCell::new(text));
Self::build_widget(text, StretchAxis::None, env)
}
}