deft 0.15.0

Cross platform ui framework
use crate as deft;
use crate::base::{EventContext, Rect};
use crate::element::container::Container;
use crate::element::{Element, ElementBackend, ElementWeak};
use crate::event::Event;
use crate::render::RenderFn;
use crate::style::StylePropKey;
use deft_macros::{element_backend, js_methods};

#[element_backend]
pub struct Button {
    element_weak: ElementWeak,
    base: Container,
}

#[js_methods]
impl Button {}

impl ElementBackend for Button {
    fn create(element: &mut Element) -> Self {
        element.is_form_element = true;
        element.set_focusable(true);
        let base = Container::create(element);
        ButtonData {
            base,
            element_weak: element.as_weak(),
        }
        .to_ref()
    }

    fn get_base_mut(&mut self) -> Option<&mut dyn ElementBackend> {
        Some(&mut self.base)
    }

    fn handle_style_changed(&mut self, key: StylePropKey) {
        self.base.handle_style_changed(key);
    }

    fn render(&mut self) -> RenderFn {
        self.base.render()
    }

    fn execute_default_behavior(
        &mut self,
        event: &mut Event,
        ctx: &mut EventContext<ElementWeak>,
    ) -> bool {
        self.base.execute_default_behavior(event, ctx)
    }

    fn handle_origin_bounds_change(&mut self, bounds: &Rect) {
        self.base.handle_origin_bounds_change(bounds)
    }
}