vizia / vizia

A declarative GUI library written in Rust
https://docs.vizia.dev
MIT License
1.59k stars 66 forks source link

Lens panic with rotate lens in Submenu #436

Closed Fredemus closed 11 months ago

Fredemus commented 11 months ago

Adding a submenu with an element using a lens to rotate causes a panic.

fn main() {
    Application::new(|cx| {
        AppData { value: 0.}.build(cx);

        ExamplePage::new(cx, |cx| {

            Submenu::new(
                cx,
                |cx| {
                    HStack::new(cx, |_| {}).rotate(AppData::value.map(|v| Angle::Deg(*v)))
                },
                |_| {},
            );
        });
    })
    .title("Knob")
    .inner_size((250, 250))
    .run();
}

Means that you can't have a Knob as the content

geom3trik commented 11 months ago

I can't seem to reproduce a panic on my machine (MacOS), any chance you could post the backtrace here?

Fredemus commented 11 months ago

Here you go:

backtrace ``` thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', C:\Users\rasmu\Documents\Rustprojects\clones\vizia\crates\vizia_core\src\binding\lens.rs:173:37 stack backtrace: 0: 0x7ff6ec36ffe2 - std::backtrace_rs::backtrace::dbghelp::trace at /rustc/7281249a19a9755e9d889ee251ec323629caadab/library\std\src\..\..\backtrace\src\backtrace\dbghelp.rs:98 1: 0x7ff6ec36ffe2 - std::backtrace_rs::backtrace::trace_unsynchronized at /rustc/7281249a19a9755e9d889ee251ec323629caadab/library\std\src\..\..\backtrace\src\backtrace\mod.rs:66 2: 0x7ff6ec36ffe2 - std::sys_common::backtrace::_print_fmt at /rustc/7281249a19a9755e9d889ee251ec323629caadab/library\std\src\sys_common\backtrace.rs:65 3: 0x7ff6ec36ffe2 - std::sys_common::backtrace::_print::impl$0::fmt at /rustc/7281249a19a9755e9d889ee251ec323629caadab/library\std\src\sys_common\backtrace.rs:44 4: 0x7ff6ec38826b - core::fmt::write at /rustc/7281249a19a9755e9d889ee251ec323629caadab/library\core\src\fmt\mod.rs:1232 5: 0x7ff6ec36be7a - std::io::Write::write_fmt at /rustc/7281249a19a9755e9d889ee251ec323629caadab/library\std\src\io\mod.rs:1684 6: 0x7ff6ec36fd2b - std::sys_common::backtrace::_print at /rustc/7281249a19a9755e9d889ee251ec323629caadab/library\std\src\sys_common\backtrace.rs:47 7: 0x7ff6ec36fd2b - std::sys_common::backtrace::print at /rustc/7281249a19a9755e9d889ee251ec323629caadab/library\std\src\sys_common\backtrace.rs:34 8: 0x7ff6ec372619 - std::panicking::default_hook::closure$1 at /rustc/7281249a19a9755e9d889ee251ec323629caadab/library\std\src\panicking.rs:271 9: 0x7ff6ec37229b - std::panicking::default_hook at /rustc/7281249a19a9755e9d889ee251ec323629caadab/library\std\src\panicking.rs:290 10: 0x7ff6ec372d48 - std::panicking::rust_panic_with_hook at /rustc/7281249a19a9755e9d889ee251ec323629caadab/library\std\src\panicking.rs:692 11: 0x7ff6ec372bfb - std::panicking::begin_panic_handler::closure$0 at /rustc/7281249a19a9755e9d889ee251ec323629caadab/library\std\src\panicking.rs:581 12: 0x7ff6ec3709c9 - std::sys_common::backtrace::__rust_end_short_backtrace at /rustc/7281249a19a9755e9d889ee251ec323629caadab/library\std\src\sys_common\backtrace.rs:137 13: 0x7ff6ec3728f0 - std::panicking::begin_panic_handler at /rustc/7281249a19a9755e9d889ee251ec323629caadab/library\std\src\panicking.rs:579 14: 0x7ff6ec392065 - core::panicking::panic_fmt at /rustc/7281249a19a9755e9d889ee251ec323629caadab/library\core\src\panicking.rs:64 15: 0x7ff6ec39211c - core::panicking::panic at /rustc/7281249a19a9755e9d889ee251ec323629caadab/library\core\src\panicking.rs:114 16: 0x7ff6ebaf6643 - enum2$,alloc::alloc::Global> > >,assoc$ > > > > >::unwrap,usize,enum2$ > > >,vizia_core::binding::st at C:\Users\rasmu\Documents\Rustprojects\clones\vizia\crates\vizia_core\src\binding\lens.rs:173 18: 0x7ff6ebaf54c5 - enum2$,alloc::alloc::Global> > > >::map,alloc::alloc::Global> >,usize,vizia_core::binding::lens::impl$3::view::closure$0::closure_env$1,usize,enum2$ > > >,vizia_core::binding::store::impl$0 at C:\Users\rasmu\Documents\Rustprojects\clones\vizia\crates\vizia_core\src\binding\lens.rs:173 20: 0x7ff6ebad412f - knob::helpers::impl$5::view > > >,vizia_core::binding::lens::impl$3::view::closure_env$0,usize,en at C:\Users\rasmu\Documents\Rustprojects\clones\vizia\examples\views\helpers\mod.rs:17 21: 0x7ff6ebb254ed - vizia_core::binding::lens::impl$46::view > > >,vizia_core::binding::lens::impl$3::view::closure_env$0,usize,enum2$ > > >,vizia_core::binding::store::impl$0::update::c at C:\Users\rasmu\Documents\Rustprojects\clones\vizia\crates\vizia_core\src\binding\lens.rs:163 23: 0x7ff6ebae066d - vizia_core::binding::store::impl$0::update,usize>,usize> at C:\Users\rasmu\Documents\Rustprojects\clones\vizia\crates\vizia_core\src\binding\store.rs:43 24: 0x7ff6ebe200d3 - vizia_core::systems::binding::binding_system at C:\Users\rasmu\Documents\Rustprojects\clones\vizia\crates\vizia_core\src\systems\binding.rs:14 25: 0x7ff6ebd12a32 - vizia_core::context::backend::BackendContext::process_data_updates at C:\Users\rasmu\Documents\Rustprojects\clones\vizia\crates\vizia_core\src\context\backend.rs:229 26: 0x7ff6ebbc7306 - vizia_winit::application::impl$3::run::closure$2 at C:\Users\rasmu\Documents\Rustprojects\clones\vizia\crates\vizia_winit\src\application.rs:333 27: 0x7ff6ebba613d - winit::platform_impl::platform::event_loop::impl$3::run_return::closure$0,vizia_winit::application::impl$3::run::closure_env$2> at C:\Users\rasmu\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.28.7\src\platform_impl\windows\event_loop.rs:260 28: 0x7ff6ebbb1db5 - alloc::boxed::impl$46::call_mut > >,ref_mut$ > >,dyn$ > at C:\Users\rasmu\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.28.7\src\platform_impl\windows\event_loop\runner.rs:250 30: 0x7ff6ebbe3c54 - core::panic::unwind_safe::impl$23::call_once,winit::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure_env$0 > > at /rustc/7281249a19a9755e9d889ee251ec323629caadab\library\core\src\panic\unwind_safe.rs:271 31: 0x7ff6ebbe1f4d - std::panicking::try::do_call > >,tuple$<> > at /rustc/7281249a19a9755e9d889ee251ec323629caadab\library\std\src\panicking.rs:487 32: 0x7ff6ebbe22b3 - std::panicking::try::do_catch > >,tuple$<> > 33: 0x7ff6ebbe1e4a - std::panicking::try,core::panic::unwind_safe::AssertUnwindSafe > > > at /rustc/7281249a19a9755e9d889ee251ec323629caadab\library\std\src\panicking.rs:451 34: 0x7ff6ebbce8a9 - std::panic::catch_unwind > >,tuple$<> > at /rustc/7281249a19a9755e9d889ee251ec323629caadab\library\std\src\panic.rs:140 35: 0x7ff6ebba328c - winit::platform_impl::platform::event_loop::runner::EventLoopRunner >::catch_unwind,tuple$<>,winit::platform_impl::platform::event_loop::runner::impl$3::call_event_han at C:\Users\rasmu\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.28.7\src\platform_impl\windows\event_loop\runner.rs:157 36: 0x7ff6ebba4d7b - winit::platform_impl::platform::event_loop::runner::EventLoopRunner >::call_event_handler > at C:\Users\rasmu\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.28.7\src\platform_impl\windows\event_loop\runner.rs:242 37: 0x7ff6ebba406a - winit::platform_impl::platform::event_loop::runner::EventLoopRunner >::move_state_to > at C:\Users\rasmu\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.28.7\src\platform_impl\windows\event_loop\runner.rs:344 38: 0x7ff6ebba5183 - winit::platform_impl::platform::event_loop::runner::EventLoopRunner >::main_events_cleared > at C:\Users\rasmu\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.28.7\src\platform_impl\windows\event_loop\runner.rs:230 39: 0x7ff6ebba6355 - winit::platform_impl::platform::event_loop::flush_paint_messages > at C:\Users\rasmu\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.28.7\src\platform_impl\windows\event_loop.rs:805 40: 0x7ff6ebb04e41 - winit::platform_impl::platform::event_loop::thread_event_target_callback::closure$0 > at C:\Users\rasmu\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.28.7\src\platform_impl\windows\event_loop.rs:2370 41: 0x7ff6ebad4df7 - core::ops::function::FnOnce::call_once >,tuple$<> > at /rustc/7281249a19a9755e9d889ee251ec323629caadab\library\core\src\ops\function.rs:250 42: 0x7ff6ebb4ac01 - core::panic::unwind_safe::impl$23::call_once > > at /rustc/7281249a19a9755e9d889ee251ec323629caadab\library\core\src\panic\unwind_safe.rs:271 43: 0x7ff6ebafaec9 - std::panicking::try::do_call > >,isize> at /rustc/7281249a19a9755e9d889ee251ec323629caadab\library\std\src\panicking.rs:487 44: 0x7ff6ebafb013 - std::panicking::try::do_catch >,t 45: 0x7ff6ebafad3b - std::panicking::try > > > at /rustc/7281249a19a9755e9d889ee251ec323629caadab\library\std\src\panicking.rs:451 46: 0x7ff6ebb40d61 - std::panic::catch_unwind > >,isize> at /rustc/7281249a19a9755e9d889ee251ec323629caadab\library\std\src\panic.rs:140 47: 0x7ff6ebb126c5 - winit::platform_impl::platform::event_loop::runner::EventLoopRunner >::catch_unwind,isize,winit::platform_impl::platform::event_loop::thread_event_target_callback::clo at C:\Users\rasmu\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.28.7\src\platform_impl\windows\event_loop\runner.rs:157 48: 0x7ff6ebb03d93 - winit::platform_impl::platform::event_loop::thread_event_target_callback > at C:\Users\rasmu\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.28.7\src\platform_impl\windows\event_loop.rs:2547 49: 0x7ffec50ae858 - CallWindowProcW 50: 0x7ffec50ae3dc - DispatchMessageW 51: 0x7ffec50c0c93 - SendMessageTimeoutW 52: 0x7ffec5bd0e64 - KiUserCallbackDispatcher 53: 0x7ffec36f1704 - NtUserDispatchMessage 54: 0x7ffec50ae2ea - DispatchMessageW 55: 0x7ff6ebba5ea6 - winit::platform_impl::platform::event_loop::EventLoop >::run_return,vizia_winit::application::impl$3::run::closure_env$2> at C:\Users\rasmu\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.28.7\src\platform_impl\windows\event_loop.rs:282 56: 0x7ff6ebba61db - winit::platform_impl::platform::event_loop::EventLoop >::run,vizia_winit::application::impl$3::run::closure_env$2> at C:\Users\rasmu\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.28.7\src\platform_impl\windows\event_loop.rs:245 57: 0x7ff6ebba1cb1 - winit::event_loop::EventLoop >::run,vizia_winit::application::impl$3::run::closure_env$2> at C:\Users\rasmu\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.28.7\src\event_loop.rs:305 58: 0x7ff6ebba2663 - vizia_winit::application::Application::run at C:\Users\rasmu\Documents\Rustprojects\clones\vizia\crates\vizia_winit\src\application.rs:282 59: 0x7ff6ebb0a686 - knob::main at C:\Users\rasmu\Documents\Rustprojects\clones\vizia\examples\views\knob.rs:26 60: 0x7ff6ebad54bb - core::ops::function::FnOnce::call_once > at /rustc/7281249a19a9755e9d889ee251ec323629caadab\library\core\src\ops\function.rs:250 61: 0x7ff6ebaf7c8e - std::sys_common::backtrace::__rust_begin_short_backtrace > at /rustc/7281249a19a9755e9d889ee251ec323629caadab\library\std\src\sys_common\backtrace.rs:121 62: 0x7ff6ebaf7c8e - std::sys_common::backtrace::__rust_begin_short_backtrace > at /rustc/7281249a19a9755e9d889ee251ec323629caadab\library\std\src\sys_common\backtrace.rs:121 63: 0x7ff6ebafe001 - std::rt::lang_start::closure$0 > at /rustc/7281249a19a9755e9d889ee251ec323629caadab\library\std\src\rt.rs:166 64: 0x7ff6ec3677be - core::ops::function::impls::impl$2::call_once at /rustc/7281249a19a9755e9d889ee251ec323629caadab/library\core\src\ops\function.rs:287 65: 0x7ff6ec3677be - std::panicking::try::do_call at /rustc/7281249a19a9755e9d889ee251ec323629caadab/library\std\src\panicking.rs:487 66: 0x7ff6ec3677be - std::panicking::try at /rustc/7281249a19a9755e9d889ee251ec323629caadab/library\std\src\panicking.rs:451 67: 0x7ff6ec3677be - std::panic::catch_unwind at /rustc/7281249a19a9755e9d889ee251ec323629caadab/library\std\src\panic.rs:140 68: 0x7ff6ec3677be - std::rt::lang_start_internal::closure$2 at /rustc/7281249a19a9755e9d889ee251ec323629caadab/library\std\src\rt.rs:148 69: 0x7ff6ec3677be - std::panicking::try::do_call at /rustc/7281249a19a9755e9d889ee251ec323629caadab/library\std\src\panicking.rs:487 70: 0x7ff6ec3677be - std::panicking::try at /rustc/7281249a19a9755e9d889ee251ec323629caadab/library\std\src\panicking.rs:451 71: 0x7ff6ec3677be - std::panic::catch_unwind at /rustc/7281249a19a9755e9d889ee251ec323629caadab/library\std\src\panic.rs:140 72: 0x7ff6ec3677be - std::rt::lang_start_internal at /rustc/7281249a19a9755e9d889ee251ec323629caadab/library\std\src\rt.rs:148 73: 0x7ff6ebafdfda - std::rt::lang_start > at /rustc/7281249a19a9755e9d889ee251ec323629caadab\library\std\src\rt.rs:165 74: 0x7ff6ebb0a6a9 - main 75: 0x7ff6ec39011c - invoke_main at D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:78 76: 0x7ff6ec39011c - __scrt_common_main_seh at D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288 77: 0x7ffec4527344 - BaseThreadInitThunk 78: 0x7ffec5b826b1 - RtlUserThreadStart ```

This is on Windows

geom3trik commented 11 months ago

Would you be able to test this on the lens-value branch? I think I may have fixed this issue there.

Fredemus commented 11 months ago

Looks like it's fixed on that branch! Thanks

geom3trik commented 11 months ago

Looks like it's fixed on that branch! Thanks

Okay great! I think I know what the fix is then. If I don't merge that branch today I'll cherry pick the fix.

Fredemus commented 11 months ago

No rush, I'm working on my own branch while waiting on a baseview PR getting merged anyway