1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- use dioxus::prelude::*;
- fn main() {
- dioxus::tui::launch_cfg(
- app,
- dioxus::tui::Config {
- rendering_mode: dioxus::tui::RenderingMode::Rgb,
- },
- );
- }
- #[derive(Props, PartialEq)]
- struct BoxProps {
- x: i32,
- y: i32,
- hue: f32,
- alpha: f32,
- }
- fn Box(cx: Scope<BoxProps>) -> Element {
- let painted = use_state(&cx, || true);
- // use_future(&cx, (), move |_| {
- // let count = count.to_owned();
- // let update = cx.schedule_update();
- // async move {
- // loop {
- // count.with_mut(|i| *i += 1);
- // tokio::time::sleep(std::time::Duration::from_millis(800)).await;
- // update();
- // }
- // }
- // });
- let x = cx.props.x;
- let y = cx.props.y;
- let hue = cx.props.hue;
- let current_painted = painted.get();
- let alpha = cx.props.alpha + if *current_painted { 100.0 } else { 0.0 };
- cx.render(rsx! {
- div {
- left: "{x}px",
- top: "{y}px",
- width: "100%",
- height: "100%",
- background_color: "hsl({hue}, 100%, 50%, {alpha}%)",
- align_items: "center",
- onkeydown: |_| painted.with_mut(|i| *i = !*i),
- onmouseenter: |_| painted.with_mut(|i| *i = !*i),
- p{" "}
- }
- })
- }
- fn app(cx: Scope) -> Element {
- let steps = 50;
- cx.render(rsx! {
- div{
- width: "100%",
- height: "100%",
- flex_direction: "column",
- (0..=steps).map(|x|
- {
- let hue = x as f32*360.0/steps as f32;
- cx.render(rsx! {
- div{
- width: "100%",
- height: "100%",
- flex_direction: "row",
- (0..=steps).map(|y|
- {
- let alpha = y as f32*100.0/steps as f32;
- cx.render(rsx! {
- Box{
- x: x,
- y: y,
- alpha: alpha,
- hue: hue,
- }
- })
- }
- )
- }
- })
- }
- )
- }
- })
- }
|