首页 > 其他分享 >Rust Druid

Rust Druid

时间:2024-05-28 13:55:06浏览次数:9  
标签:mut ctx Druid let child new data Rust

 #![windows_subsystem = "windows"]

mod cmd; use std::time::Instant; use libloader::libloading; use druid::widget::prelude::*; use druid::text::{FontDescriptor,FontFamily}; use druid::{AppLauncher,Color,Data,FileDialogOptions,FileSpec,Lens,Menu,MenuItem,Point,TextAlignment,UnitPoint,WidgetExt,WindowDesc}; use druid::widget::{Either,Flex,Label,Button,Split,Tabs,TextBox,Controller,TabsTransition,MainAxisAlignment,CrossAxisAlignment,Painter,LineBreaking,Scroll,ViewSwitcher};
#[derive(Clone, Data, Lens)] struct AppState {     name: String,     show_hide: bool,     sidebar_view: u8, } struct MainMenuController; struct IconColorController0; struct IconColorController1; struct MessageBoxTextController; struct MessageBoxFocusController;
impl <W:Widget<AppState>> Controller<AppState, W> for MainMenuController {     fn event(&mut self, child: &mut W, ctx: &mut druid::EventCtx, event: &druid::Event, data: &mut AppState, env: &druid::Env) {         if let Event::MouseDown(e) = event  {             if e.button.is_left() && ctx.is_hot(){ctx.show_context_menu(make_main_menu(),Point::new(40., 0.));}         }         child.event(ctx, event, data, env)     } } impl Controller<AppState, Label<AppState>> for IconColorController0 {     fn update(&mut self,child: &mut Label<AppState>,ctx: &mut UpdateCtx,old_data: &AppState,data: &AppState,env: &Env,)         {         if data.show_hide == true && data.sidebar_view == 0{             child.set_text_color(Color::rgb8(0, 255, 255));//青色             ctx.request_layout();         }         else {             child.set_text_color(Color::WHITE);             ctx.request_layout();         }         child.update(ctx, old_data, data, env);     } } impl Controller<AppState, Label<AppState>> for IconColorController1 {     fn update(&mut self,child: &mut Label<AppState>,ctx: &mut UpdateCtx,old_data: &AppState,data: &AppState,env: &Env,)         {         if data.show_hide == true && data.sidebar_view == 1{             child.set_text_color(Color::rgb8(0, 255, 255));//青色             ctx.request_layout();         }         else {             child.set_text_color(Color::WHITE);             ctx.request_layout();         }         child.update(ctx, old_data, data, env);     } } impl <W:Widget<AppState>> Controller<AppState, W> for MessageBoxTextController {     fn event(&mut self, child: &mut W, ctx: &mut druid::EventCtx, event: &druid::Event, data: &mut AppState, env: &druid::Env) {         if let Event::MouseDown(e) = event {             if e.button == druid::MouseButton::Left {data.name = String::from("正在爬取沪深京A股数据请稍后······");}         }         child.event(ctx, event, data, env)     } } impl <W:Widget<AppState>> Controller<AppState, W> for MessageBoxFocusController {     fn event(&mut self, child: &mut W, ctx: &mut druid::EventCtx, event: &druid::Event, data: &mut AppState, env: &druid::Env) {         if let Event::MouseDown(e) = event {             if e.button == druid::MouseButton::Left {ctx.request_focus();}         }         child.event(ctx, event, data, env)     } } fn ui_builder() -> impl Widget<AppState> {     let main_window: Split<AppState> = Split::columns(sidebar(), tab()).draggable(true).solid_bar(true).split_point(0.1).bar_size(0.0).min_bar_area(0.1);     let main_window: Either<AppState> = Either::new(|data:&AppState, _env:&Env| data.show_hide,main_window,tab(),);     Flex::row().with_child(toolbar()).with_flex_child(main_window,1.0) } fn main() {     let initial_state:AppState = AppState {         name: "".to_string(),         show_hide: true,         sidebar_view: 0,         };     let main_window: WindowDesc<AppState> = WindowDesc::new(ui_builder()).title("MOSS");     AppLauncher::with_window(main_window).log_to_console().launch(initial_state).expect("launch failed"); } fn toolbar_painter()-> Painter<AppState>{     Painter::new(|ctx: &mut PaintCtx, _, _env: &Env| {         let bounds: druid::kurbo::RoundedRect = ctx.size().to_rect().to_rounded_rect(5.);         if ctx.is_hot() {             ctx.fill(bounds, &Color::rgb8(70, 70, 70));//亮灰色         }     }) } fn toolbar()-> impl Widget<AppState>{     let menu: druid::widget::ControllerHost<druid::widget::Align<AppState>, MainMenuController> = Label::new(" ☰")                 .with_text_size(17.)                 .fix_width(30.)                 .background(toolbar_painter())                 .on_click(|_,_,_|{todo!()})                 .center()                 .controller(MainMenuController{});     let sidebar_view0 = Label::new("

标签:mut,ctx,Druid,let,child,new,data,Rust
From: https://www.cnblogs.com/xorover/p/18217842

相关文章

  • Rust语言实现的去中心化AI网络节点
    一、概述去中心化和人工智能(AI)是两个极具潜力的发展方向。Gaia项目正是将这两者结合起来,创造了一个去中心化的AI网络节点。本文将深入探讨Gaia项目的技术细节,通过丰富的示例和详细描述,帮助读者全面理解并掌握该技术。二、什么是Gaia?Gaia是一个去中心化的人工智能网络,它旨......
  • Rust中的iter(), into_iter(), iter_mut()
    在Rust中,iter(),into_iter(),iter_mut()都是用于在集合类型上创建迭代器的方法。这三个方法各有不同,下面一一进行介绍。iter():iter()方法创建一个不可变的引用迭代器。当你只想读取集合中的元素,而不想改变它们或消耗集合时,应使用iter()。iter()返回的迭代器将生成集合中每......
  • X-CSV-Reader:一个使用Rust实现CSV命令行读取器
    ......
  • Rust腐蚀怎么用服务器一键开服联机教程
    1、进入控制面板首次登陆需要点击下方重置密码,如何再点击登录面板,点击后会跳转到登录页面,输入用户名和密码登录即可2、设置游戏端口由于腐蚀的设置需要三个端口,它们用于游戏端口(必须为首选端口),查询端口,RCON端口服务器创建时默认会获得一个首选端口,既为我们的游戏端口......
  • 基于three.js的Instanced Draw+LOD+Frustum Cull的改进实现
    大家好,本文在上文的基础上,优化了InstancedDraw+LOD+FrustumCull的性能,性能提升了3倍以上关键词:three.js、InstancedDraw、大场景、LOD、FrustumCull、优化、Web3D、WebGL、开源上文:three.js使用InstancedDraw+FrustumCull+LOD来渲染大场景(开源)相对于上文的改进点相对于......
  • rustdesk域控灵活使用
    简介:rustdesk是一个非常好用的可以私域部署的远程协助软件,俗称远程桌面。好处就太多了。我的环境为了安全,全面封禁3389端口,封禁135,136,137,138,443。好在没要求服务器封禁,否则我的域控,MDT,都不能用了。环境又复杂,管理范围跨郑州,开封,虽说不远,还有开封灌汤包、驴肉汤、鲤鱼焙面………......
  • Rust 每日一库 —— Darling
    Darling1.名词解释field(字段)是指属于一个对象或数据结构的一个数据成员,在宏编程时我们往往期望获得字段的名词、字段的类型、以及额外的自定义属性2.使用原因期望在过程宏中解析syn::DeriveInput得出申明性属性。例1:结构体中的field--->bar中的skip属性为true......
  • Spring Boot —— 集成 Druid
    pom<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-3-starter</artifactId><version>${druid.version}</version></dependency>application-develop.yamlspring:datasour......
  • 【rust】《Rust整合OpenCV ( Ubuntu.22.04系统 ) 》
    前言Ubuntu22.04的环境搭建、rust安装配置、VSCode安装等参照另一篇博文:https://www.cnblogs.com/-CO-/p/18197715环境搭建对应项##虚拟机版本VMware17##系统版本Ubuntu22.04.4##Rust版本Rust1.78.0##Rust依赖Opencv版本Opencv-rust0.7......
  • 【Linux】《VMware17搭建Ubuntu.22.04-Rust开发环境》
    下载VMware17安装包下载链接:创建虚拟机之后都默认就可以了。进入系统设置登录账号和密码以及修改下语言,剩余都默认即可。设置中文界面设置中文输入法接下来开始设置输入法切换快捷键设置使用Ctrl+Alt+T打开终端,输入ibus-setup重启,看一下是......