Masonry是一个RustGUI框架。
Masonry提供了用于创建窗口的平台(使用Glazier 作为后端),每个窗口都包含一个Widget树。它还提供了用于在runtime检测Widget树的工具,可编写单元测试,方便开发者调试和维护应用程序。
基于Masonry,开发者可实现即时模式(immediate-mode)GUI、Elm架构、函数式响应GUI等。
示例代码
usemasonry::widget::{Button,CrossAxisAlignment,Flex,Label,Portal,SizedBox,TextBox,WidgetMut,};usemasonry::{Action,AppDelegate,AppLauncher,Color,DelegateCtx,Env,WidgetId,WindowDescription,WindowId,};structDelegate{next_task:String,}implAppDelegateforDelegate{fnon_action(&mutself,ctx:&mutDelegateCtx,action:Action,){matchaction{Action::ButtonPressed|Action::TextEntered(_)=>{letmutroot:WidgetMut<Portal<Flex>>=ctx.get_root();ifself.next_task!=""{letmutflex=root.child_mut();flex.add_child(Label::new(self.next_task.clone()));}}Action::TextChanged(new_text)=>{self.next_task=new_text.clone();}_=>{}}}}fnmain(){//Themainbuttonandtextboxwithsomespacebelow,//allinsideascrollablearea.letroot_widget=Portal::new(Flex::column().with_child(Flex::row().with_child(TextBox::new("")).with_child(Button::new("Addtask")),).with_spacer(VERTICAL_WIDGET_SPACING),).constrain_horizontal(true);letmain_window=WindowDescription::new(root_widget).title("To-dolist").window_size((400.0,400.0));AppLauncher::with_window(main_window).with_delegate(Delegate{next_task:String::new(),}).launch().expect("Failedtolaunchapplication");}
评论