Port widgets to the new system

This commit is contained in:
Evan Almloff committed 2023-04-13 10:29:38 -05:00
1 parent c2b873c650
commit efa7305794
18 files changed
+286 -240

No files matched your search

+32 -11
View File
@@ -1,6 +1,6 @@
use dioxus_native_core::{
node::OwnedAttributeDiscription, prelude::NodeType, real_dom::NodeImmutable,
utils::widget_watcher::Widget,
custom_element::CustomElement, node::OwnedAttributeDiscription, prelude::NodeType,
real_dom::NodeImmutable,
};
use super::{
@@ -18,10 +18,32 @@ pub(crate) enum Input {
Slider(Slider),
}
impl Widget for Input {
impl CustomElement for Input {
const NAME: &'static str = "input";
fn create(root: &mut dioxus_native_core::real_dom::NodeMut<()>) -> Self {
fn roots(&self) -> Vec<dioxus_native_core::NodeId> {
match self {
Input::Button(button) => button.roots(),
Input::CheckBox(checkbox) => checkbox.roots(),
Input::TextBox(textbox) => textbox.roots(),
Input::Password(password) => password.roots(),
Input::Number(number) => number.roots(),
Input::Slider(slider) => slider.roots(),
}
}
fn slot(&self) -> Option<dioxus_native_core::NodeId> {
match self {
Input::Button(button) => button.slot(),
Input::CheckBox(checkbox) => checkbox.slot(),
Input::TextBox(textbox) => textbox.slot(),
Input::Password(password) => password.slot(),
Input::Number(number) => number.slot(),
Input::Slider(slider) => slider.slot(),
}
}
fn create(mut root: dioxus_native_core::real_dom::NodeMut) -> Self {
{
// currently widgets are not allowed to have children
let children = root.child_ids();
@@ -42,7 +64,10 @@ impl Widget for Input {
namespace: None,
})
.and_then(|value| value.as_text());
match input_type {
match input_type
.map(|type_| type_.trim().to_lowercase())
.as_deref()
{
Some("button") => {
drop(node_type);
Input::Button(Button::create(root))
@@ -76,7 +101,7 @@ impl Widget for Input {
fn attributes_changed(
&mut self,
root: dioxus_native_core::real_dom::NodeMut<()>,
root: dioxus_native_core::real_dom::NodeMut,
attributes: &dioxus_native_core::node_ref::AttributeMask,
) {
match self {
@@ -103,11 +128,7 @@ impl Widget for Input {
}
impl RinkWidget for Input {
fn handle_event(
&mut self,
event: &crate::Event,
node: &mut dioxus_native_core::real_dom::NodeMut,
) {
fn handle_event(&mut self, event: &crate::Event, node: dioxus_native_core::real_dom::NodeMut) {
match self {
Input::Button(button) => {
button.handle_event(event, node);