当前位置: 首页 > news >正文

建设网站的体会我想找阿里巴巴做网站推广

建设网站的体会,我想找阿里巴巴做网站推广,织梦 电影网站 模板,广东省自然资源厅吴鋆前言 本专栏是Rust实例应用。 环境配置 平台#xff1a;windows 软件#xff1a;vscode 语言#xff1a;rust 库#xff1a;iced、iced_aw 概述 本篇构建了这样的一个实例#xff0c;可以动态修改UI的主题#xff0c;通过菜单栏来选择预设的自定义主题和官方主题#…前言 本专栏是Rust实例应用。 环境配置 平台windows 软件vscode 语言rust 库iced、iced_aw 概述 本篇构建了这样的一个实例可以动态修改UI的主题通过菜单栏来选择预设的自定义主题和官方主题以及实时修改rgba色彩来动态调整主题色。 UI图示 如上图本实例是一个简单的应用是利用菜单栏来选择窗口的主题色可以选择预设值也可以选择自定义值还可以动态调整 本篇内容 1、动态调整主题色 程序结构介绍 本篇涉及到的crate有iced、iced_aw、image、rfd等详细看toml文件 [package] name img-convert version 0.1.0 edition 2021[dependencies]iced{version 0.12.1,features [svg,canvas,image,multi-window]} iced_widget{version 0.12.3} iced_aw{version 0.9.3,features [cupertino]}image{version 0.25.1,features []}rfd{version 0.14.1}文件夹结构 其中img文件夹提供了UI所需的各种图片 本篇所涉及的内容有一些是公用的如菜单栏设置、样式设置等本篇会讲的详细些后续篇章涉及这些基础内容就不再赘述。 先说菜单栏的构建的关于菜单栏的使用在之前的部件介绍专栏已经介绍过 RustGUI学习iced/iced_aw之扩展小部件十六如何使用菜单menu部件来创建菜单栏 但之前只是简单说了如何使用menu本篇将详细介绍菜单栏的构建函数。 如图菜单的设置是在一个单独的mod文件中并没有放在main.rs中主要是为了方便编写如果都写在主函数中显得太拥挤了也不方便查看。 在menuset.rs中我们将构建以下函数 我们来分别看一下其中create_menubar函数顾名思义是创建菜单栏主bar的函数如下 /// /// 创建一个menu bar /// pub fn create_menubara,Message,Theme,Renderer(menu:VecItema,Message,Theme,Renderer,style:iced_aw::style::menu_bar::MenuBarStyle, )-MenuBara,Message,Theme,Renderer whereTheme:iced_aw::menu::StyleSheeticed_aw::style::menu_bar::StyleSheet,Renderer:iced::advanced::Renderer,Theme as iced_aw::menu::StyleSheet::Style: FromMenuBarStyle { MenuBar::new(menu).spacing(4.0).width(Length::Fill).height(40).padding(4).draw_path(menu::DrawPath::Backdrop).style(style) }通过传入的menu项返回一个MenuBar部件传入参数中还包括自定义的style。关于函数的具体代码就不赘述了这在之前的部件专栏博文中有说明。 接下来说下菜单项的构建函数有两种一个是不带子项的一个是带子项的。 menu无子项 /// /// 创建一个menu无子项 /// pub fn menu_no_suba,Message:a,Theme,Renderer(label:a str,msg:Message, )-Itema,Message,Theme,Renderer whereTheme:aiced_aw::menu::StyleSheetbutton::StyleSheettext::StyleSheet,Renderer: aiced::advanced::Renderericed::advanced::text::Renderer,Theme as iced_widget::button::StyleSheet::Style: Fromiced::theme::Button,Message: std::clone::Clone { let btn:ButtonMessage,Theme,Renderermenubtn_normal(label, msg,176,Horizontal::Left);Item::new(btn)}可以看到很简单就是返回一个Item项其中菜单button的文本和消息为自定义输入。 menu有子项 /// /// 创建一个menu有子项 /// pub fn menu_with_suba,Message:a,Theme,Renderer(label:a str,msg:Message,arrow:a str,sub:VecItema,Message,Theme,Renderer )-Itema,Message,Theme,Renderer whereTheme:aiced_aw::menu::StyleSheetbutton::StyleSheettext::StyleSheetsvg::StyleSheet,Renderer: aiced::advanced::Renderericed::advanced::text::Renderericed::advanced::svg::Renderer,Message: std::clone::Clone,Theme as iced_widget::button::StyleSheet::Style: Fromiced::theme::Button{ let itemmenubtn_arrow(label, msg, arrow,176);let menuMenu::new(sub).max_width(180.0).spacing(5.0).offset(3.0);Item::with_menu(item, menu) }带子项的menu稍微复杂些其中Item的项包括了button以及一个箭头右向svg格式 svg构成 ?xml version1.0 standaloneno?!DOCTYPE svg PUBLIC -//W3C//DTD SVG 1.1//EN http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtdsvg t1715601105402 classicon viewBox0 0 1024 1024 version1.1 xmlnshttp://www.w3.org/2000/svg p-id3106 xmlns:xlinkhttp://www.w3.org/1999/xlink width16 height16path dM256 102.4v819.2l512-409.6L256 102.4z fill#333333 p-id3107/path/svg也可以去一些提供向量图标的网站下载。 通常菜单项使用的都是button加文字因为菜单就是用来点击的但是也可以使用其他部件如滑动条本篇为了方便动态调整颜色值添加了slider构建的menu /// /// 创建一个menu无子项(slider样式) /// pub fn menu_no_sub_slidera,Message,Theme,Renderer(label:a str,msg:impl Fn(f32) - Message a,slidervalue:f32,themecolor:Color, )-Itema,Message,Theme,Renderer whereTheme:aiced_aw::menu::StyleSheeticed_widget::slider::StyleSheeticed_widget::text::StyleSheet,Renderer: aiced::advanced::Renderericed::advanced::text::Renderer,Message: std::clone::Clonea,Theme as iced_widget::slider::StyleSheet::Style: Fromiced::theme::Slider,Theme as iced_widget::text::StyleSheet::Style: Fromiced::theme::Text { let style1iced::theme::Slider::Custom(Box::new(MySliderStyle{color:themecolor}));let mut r10.0;let mut g10.0;let mut b10.0;let mut a11.0;if themecolor.r0.1 || themecolor.g0.1 || themecolor.b0.1{r10.9;g10.9;b10.9;}else if themecolor.r0.8 || themecolor.g0.8 || themecolor.b0.8{r10.02;g10.02;b10.02;}else{r1themecolor.r;g1themecolor.g;b1themecolor.b;}let style2iced::theme::Text::Color(Color::from_rgba(r1, g1, b1, a1));let text0text(label).width(20).size(12).style(style2);let sliderslider(0.0..1.0,slidervalue, msg).step(0.01).width(100).style(style1);let text1text(format!({},slidervalue)).width(30).size(12).style(style2);let row1row![text0,horizontal_space().height(10),slider,horizontal_space().height(10),text1].align_items(Alignment::Center).spacing(5);Item::new(row1) }上面的函数菜单项中添加的是slider其中slider的样式可以根据UI的背景色调整而调整主要是为了背景色调整过程菜单项的可视性。 还有两个函数是构建菜单项button的之所以将button项单独使用函数构建也是为了方便修改参数。这两个函数不再细说但代码会在后面全部贴出来。 菜单项的构建就完成了然后在主函数里调用菜单项 let arrowsvg..\\img-convert\\img\\arrow\\arrow_right_16.svg;let wj_openmenuset::menu_no_sub(打开,Message::WJ(menuset::WJMessage::Open));// let wj_new_mode1menuset::menu_no_sub(格式1,Message::WJ(menuset::WJMessage::Open) );// let wj_new_mode2menuset::menu_no_sub(格式2,Message::WJ(menuset::WJMessage::Open) );let wj_newmenuset::menu_no_sub(新建, Message::WJ(menuset::WJMessage::New));let wj_savemenuset::menu_no_sub(保存,Message::WJ(menuset::WJMessage::Save));let wj_closemenuset::menu_no_sub(关闭,Message::WJ(menuset::WJMessage::Close));let wj_mainmenuset::menu_main(文件, Message::WJ(menuset::WJMessage::WenJian), 通常菜单项就是菜单栏中添加主菜单项点击主菜单项下拉子项子项还可以附带子项如上面的代码是主菜单为“文件”的菜单项下拉菜单为【打开、新建、保存、关闭】很常见的对吧。 注意上述代码中调用的函数其中menuset为mod需要提前导入 mod menuset;以此类推如果你要构建其他菜单项按照样式填写即可当然其中消息需要自己构建可以直接写在menuset模块中 #[derive(Debug,Clone)] pub enum WJMessage{WenJian,Open,Close,New,Save, }注意要使用pub关键字然后其他文件里调用。 如上图主函数调用menuset的菜单项enum。 以上菜单项的设置就完成了样式如下 示例只添加了三个主菜单项如果你想要更多的自行添加即可。 不过需要注意的是本文没有为菜单添加快捷键功能这涉及到监控键盘的行为会在后面的高级一点的示例中说到。 下面说下主题修改涉及的函数即uitheme.rs。 本模块中主要包含了一个是自定义预设值T1、T2、T3实现的函数是theme_name。 一个是动态调整主题色实现的函数是get_color。 至于官方预设的颜色值就无需多次重构直接使用即可。 来看下自定义预设主题其实现代码如下 impl UITheme{pub fn theme_name(self) - Theme{match self{UITheme::T1 {let p1Palette{background:iced::Color::from_rgba(0.0, 0.65, 0.6, 0.7),text:Color::BLACK,primary:Color::BLACK,success:Color::BLACK,danger:Color::BLACK,};let g1Extended{background:Background{base:Pair{color:Color::from_rgba(0.1, 0.7, 0.7, 0.8),text:Color::BLACK},weak:Pair{color:Color::from_rgba(0.1, 0.7, 0.7, 0.8),text:Color::BLACK},strong:Pair{color:Color::from_rgba(0.1, 0.7, 0.7, 0.8),text:Color::BLACK},},primary:Primary{base:Pair{color:Color::from_rgba(0.1, 0.7, 0.7, 0.8),text:Color::BLACK},weak:Pair{color:Color::from_rgba(0.1, 0.7, 0.7, 0.8),text:Color::BLACK},strong:Pair{color:Color::from_rgba(0.1, 0.7, 0.7, 0.8),text:Color::BLACK},},secondary:Secondary{base:Pair{color:Color::from_rgba(0.1, 0.7, 0.7, 0.8),text:Color::BLACK},weak:Pair{color:Color::from_rgba(0.1, 0.7, 0.7, 0.8),text:Color::BLACK},strong:Pair{color:Color::from_rgba(0.1, 0.7, 0.7, 0.8),text:Color::BLACK},},success:Success{base:Pair{color:Color::from_rgba(0.1, 0.7, 0.7, 0.8),text:Color::BLACK},weak:Pair{color:Color::from_rgba(0.1, 0.7, 0.7, 0.8),text:Color::BLACK},strong:Pair{color:Color::from_rgba(0.1, 0.7, 0.7, 0.8),text:Color::BLACK},},danger:Danger{base:Pair{color:Color::from_rgba(0.1, 0.7, 0.7, 0.8),text:Color::BLACK},weak:Pair{color:Color::from_rgba(0.1, 0.7, 0.7, 0.8),text:Color::BLACK},strong:Pair{color:Color::from_rgba(0.1, 0.7, 0.7, 0.8),text:Color::BLACK},},is_dark:false,};let cus1Arc::new(iced::theme::Custom::new(t1.to_string(),p1));let cus2Arc::new(iced::theme::Custom::with_fn(t1.to_string(), p1, |_|g1));iced::Theme::Custom(cus1)}UITheme::T2 {let p1Palette{//background:iced::Color::from_rgba(0.0, 0.85, 0.8, 0.8),background:Color::from_linear_rgba(0.0, 0.5, 0.6, 0.8),text:Color::BLACK,primary:Color::BLACK,success:Color::BLACK,danger:Color::BLACK,};let cus1Arc::new(iced::theme::Custom::new(t1.to_string(),p1));iced::Theme::Custom(cus1)},UITheme::T3 {let p1Palette{background:iced::Color::from_rgba(0.0, 0.85, 0.8, 0.8),text:Color::BLACK,primary:Color::BLACK,success:Color::BLACK,danger:Color::BLACK,};let cus1Arc::new(iced::theme::Custom::new(t1.to_string(),p1));iced::Theme::Custom(cus1)},}}}需要注意的是本文的代码只是为了演示一些参数设置只要达到效果即可所以并非所有涉及的参数都做了修改。如上代码我们只是简单的构建了三个自定义样式T1、T2、T3然后为每个主题都设置自己的颜色通过菜单选择相应的主题时获得自定义的颜色效果 再来看下动态调整实现 pub struct UIThemeColor{pub color:Color, }impl UIThemeColor {pub fn get_color(self) - Theme {let p1Palette{background:self.color,text:Color::BLACK,primary:Color::BLACK,success:Color::BLACK,danger:Color::BLACK,};let cus1Arc::new(iced::theme::Custom::new(t1.to_string(),p1));iced::Theme::Custom(cus1) } }代码不难我们构建一个结构体包含参数color用于自定义输入然后实现函数get_color用于动态调整时传入外面的颜色值函数内部使用此color值来构建自定义的Theme以此实现主题色的动态调整 完整代码 menuset.rs use iced::advanced::widget::Text; use iced::alignment::Horizontal; use iced::widget::{button, text,row,svg,horizontal_space,slider,}; use iced::{Alignment, Background, Border, Color, Length, Theme}; use iced_aw::menu::{self, Item, Menu, MenuBar}; use iced::widget::{Button, Row}; use iced_aw::style::menu_bar::MenuBarStyle; use iced::widget::slider::{Rail,HandleShape};#[derive(Debug,Clone)] pub enum WJMessage{WenJian,Open,Close,New,Save, } #[derive(Debug,Clone)] pub enum GJMessage{GongJv,T1,T2,T3, }#[derive(Debug,Clone)] pub enum GYMessage{GuanYu,GY,BZ,GX, }/// /// 创建一个menu bar /// pub fn create_menubara,Message,Theme,Renderer(menu:VecItema,Message,Theme,Renderer,style:iced_aw::style::menu_bar::MenuBarStyle, )-MenuBara,Message,Theme,Renderer whereTheme:iced_aw::menu::StyleSheeticed_aw::style::menu_bar::StyleSheet,Renderer:iced::advanced::Renderer,Theme as iced_aw::menu::StyleSheet::Style: FromMenuBarStyle { MenuBar::new(menu).spacing(4.0).width(Length::Fill).height(40).padding(4).draw_path(menu::DrawPath::Backdrop).style(style) }/// /// 创建一个menu主项 /// pub fn menu_maina,Message:a,Theme,Renderer(label:a str,msg:Message,sub:VecItema,Message,Theme,Renderer )-Itema,Message,Theme,Renderer whereTheme:aiced_aw::menu::StyleSheetbutton::StyleSheettext::StyleSheetsvg::StyleSheet,Renderer: aiced::advanced::Renderericed::advanced::text::Renderericed::advanced::svg::Renderer,Message: std::clone::Clone,Theme as iced_widget::button::StyleSheet::Style: Fromiced::theme::Button { let item: ButtonMessage, Theme, Renderermenubtn_normal(label, msg,60,Horizontal::Center);let menu: MenuMessage, Theme, RendererMenu::new(sub).max_width(180.0).spacing(5.0).offset(5.0);Item::with_menu(item, menu) }/// /// 创建一个menu无子项(slider样式) /// pub fn menu_no_sub_slidera,Message,Theme,Renderer(label:a str,msg:impl Fn(f32) - Message a,slidervalue:f32,themecolor:Color, )-Itema,Message,Theme,Renderer whereTheme:aiced_aw::menu::StyleSheeticed_widget::slider::StyleSheeticed_widget::text::StyleSheet,Renderer: aiced::advanced::Renderericed::advanced::text::Renderer,Message: std::clone::Clonea,Theme as iced_widget::slider::StyleSheet::Style: Fromiced::theme::Slider,Theme as iced_widget::text::StyleSheet::Style: Fromiced::theme::Text { let style1iced::theme::Slider::Custom(Box::new(MySliderStyle{color:themecolor}));let mut r10.0;let mut g10.0;let mut b10.0;let mut a11.0;if themecolor.r0.1 || themecolor.g0.1 || themecolor.b0.1{r10.9;g10.9;b10.9;}else if themecolor.r0.8 || themecolor.g0.8 || themecolor.b0.8{r10.02;g10.02;b10.02;}else{r1themecolor.r;g1themecolor.g;b1themecolor.b;}let style2iced::theme::Text::Color(Color::from_rgba(r1, g1, b1, a1));let text0text(label).width(20).size(12).style(style2);let sliderslider(0.0..1.0,slidervalue, msg).step(0.01).width(100).style(style1);let text1text(format!({},slidervalue)).width(30).size(12).style(style2);let row1row![text0,horizontal_space().height(10),slider,horizontal_space().height(10),text1].align_items(Alignment::Center).spacing(5);Item::new(row1) }/// /// 创建一个menu无子项 /// pub fn menu_no_suba,Message:a,Theme,Renderer(label:a str,msg:Message, )-Itema,Message,Theme,Renderer whereTheme:aiced_aw::menu::StyleSheetbutton::StyleSheettext::StyleSheet,Renderer: aiced::advanced::Renderericed::advanced::text::Renderer,Theme as iced_widget::button::StyleSheet::Style: Fromiced::theme::Button,Message: std::clone::Clone { let btn:ButtonMessage,Theme,Renderermenubtn_normal(label, msg,176,Horizontal::Left);Item::new(btn)}/// /// 创建一个menu有子项 /// pub fn menu_with_suba,Message:a,Theme,Renderer(label:a str,msg:Message,arrow:a str,sub:VecItema,Message,Theme,Renderer )-Itema,Message,Theme,Renderer whereTheme:aiced_aw::menu::StyleSheetbutton::StyleSheettext::StyleSheetsvg::StyleSheet,Renderer: aiced::advanced::Renderericed::advanced::text::Renderericed::advanced::svg::Renderer,Message: std::clone::Clone,Theme as iced_widget::button::StyleSheet::Style: Fromiced::theme::Button{ let itemmenubtn_arrow(label, msg, arrow,176);let menuMenu::new(sub).max_width(180.0).spacing(5.0).offset(3.0);Item::with_menu(item, menu) } /// /// 创建一个menu按钮无箭头 /// fn menubtn_normala,Message,Theme,Renderer(label:a str,msg:Message,width:u16,align:Horizontal, )-Buttona,Message,Theme,Renderer whereTheme:aiced_aw::menu::StyleSheetbutton::StyleSheettext::StyleSheet,Renderer: aiced::advanced::Renderericed::advanced::text::Renderer,Theme as iced_widget::button::StyleSheet::Style: Fromiced::theme::Button { let tttext(label).size(15).vertical_alignment(iced::alignment::Vertical::Center).horizontal_alignment(align);button(tt).width(width).height(30).on_press(msg).style(iced::theme::Button::Custom(Box::new(MenuButtonStyle))) }/// /// 创建一个menu按钮有箭头 /// fn menubtn_arrowa,Message:a,Theme,Renderer(label:a str,msg:Message,arrow:a str,width:u16, )-Buttona,Message,Theme,RendererwhereTheme:aiced_aw::menu::StyleSheetbutton::StyleSheettext::StyleSheetsvg::StyleSheet,Renderer: aiced::advanced::Renderericed::advanced::text::Renderericed::advanced::svg::Renderer,Theme as iced_widget::button::StyleSheet::Style: Fromiced::theme::Button {let tt:TextTheme,Renderertext(label).size(14).vertical_alignment(iced::alignment::Vertical::Center).horizontal_alignment(iced::alignment::Horizontal::Center);let arrow_svgsvg(svg::Handle::from_path(arrow)).width(16).height(16);let rr:RowMessage,Theme,Rendererrow![tt,horizontal_space().height(20),arrow_svg,].spacing(10).align_items(iced::Alignment::Center).into();button(rr).width(width).height(30).on_press(msg).style(iced::theme::Button::Custom(Box::new(MenuButtonStyle))) } struct MenuButtonStyle; impl button::StyleSheet for MenuButtonStyle{type Style iced::Theme;fn active(self, style: Self::Style) - button::Appearance {let backcolorColor::from_rgb8(167, 218, 220);button::Appearance {text_color:Color::BLACK,background:Some(Background::Color(backcolor)),border:Border{radius:[4.0;4].into(),..Default::default()},..Default::default()}}fn pressed(self, style: Self::Style) - button::Appearance {let backcolorColor::from_rgb8(16, 137, 177);button::Appearance {text_color:Color::BLACK,background:Some(Background::Color(backcolor)),border:Border{radius:[4.0;4].into(),..Default::default()},..Default::default()}}fn hovered(self, style: Self::Style) - button::Appearance {let backcolorColor::from_rgb8(0, 164, 230);button::Appearance {text_color:Color::BLACK,background:Some(Background::Color(backcolor)),border:Border{radius:[4.0;4].into(),..Default::default()},..Default::default()}}fn disabled(self, style: Self::Style) - button::Appearance { let backcolorColor::from_rgb8(0, 0, 100); button::Appearance {text_color:Color::BLACK,background:Some(Background::Color(backcolor)),border:Border{radius:[4.0;4].into(),..Default::default()},..Default::default()}} }pub struct MyMenuBarStyle{pub backcolor:Color, } impl iced_aw::style::menu_bar::StyleSheet for MyMenuBarStyle {type Style iced::Theme;fn appearance(self, style: Self::Style) - iced_aw::style::menu_bar::Appearance {let rself.backcolor.r;let gself.backcolor.g;let bself.backcolor.b;let aself.backcolor.a;let color1Color::from_rgba(r0.2, g0.2, b0.2, a0.1);iced_aw::style::menu_bar::Appearance {//bar_background:Background::Color(Color::from_rgb8(177, 244, 251)),bar_background:Background::Color(self.backcolor),menu_background:Background::Color(color1),..Default::default()}} }struct MySliderStyle{color:Color, } impl slider::StyleSheet for MySliderStyle { type Style Theme;//激活时外观fn active(self, style: Self::Style) - slider::Appearance {let mut r10.0;let mut g10.0;let mut b10.0;let mut a10.0;if self.color.r0.1 self.color.g0.1 self.color.b0.1{r10.5;g10.5;b10.5;}else if self.color.r0.9 || self.color.g0.9 || self.color.b0.9{r10.2;g10.2;b10.2;}else{r1self.color.r;g1self.color.g;b1self.color.b;}if self.color.a0.1{a10.7;}else{a1self.color.a;}slider::Appearance { rail: Rail{colors:(Color::from_rgba(r1-0.2, g1-0.2, b1-0.2,a10.1),Color::from_rgba(r10.2, g10.2, b10.2,a10.1)),width:5.0,border_radius:[3.0;4].into(),}, handle: slider::Handle{shape:HandleShape::Rectangle { width: 8, border_radius: [2.0;4].into() },color:Color::from_rgba(r10.1, g10.1,b10.1,a1),border_width:1.0,border_color:Color::BLACK,}}}//悬停时外观fn hovered(self, style: Self::Style) - slider::Appearance {let r1self.color.r;let g1self.color.g;let b1self.color.b;let a1self.color.a;slider::Appearance { rail: Rail{colors:(Color::from_rgba(r10.1, g10.1, b10.1,a1),Color::from_rgba(r1-0.1, g1-0.1, b1-0.1,a1)),width:5.0,border_radius:[3.0;4].into(),}, handle: slider::Handle{shape:HandleShape::Rectangle { width: 8, border_radius: [2.0;4].into()},color:Color::from_rgba(r10.2, g10.2,b10.2,a1),border_width:1.0,border_color:Color::BLACK,}}}//拖拽时外观fn dragging(self, style: Self::Style) - slider::Appearance {slider::Appearance { rail: Rail{colors:(Color::from_rgb8(20, 48, 210),Color::from_rgb8(151, 155, 175)),width:5.0,border_radius:[3.0;4].into(),}, handle: slider::Handle{shape:HandleShape::Rectangle { width: 8, border_radius: [2.0;4].into() },color:Color::from_rgb8(13, 248,44),border_width:1.0,border_color:Color::BLACK,}}} } uitheme.rs use iced::{theme::{palette::{Background, Danger, Extended, Pair, Primary, Secondary, Success}, Palette}, Color,Theme}; use iced_aw::core::color; use std::sync::Arc;pub enum UITheme{T1,T2,T3, }impl UITheme{pub fn theme_name(self) - Theme{match self{UITheme::T1 {let p1Palette{background:iced::Color::from_rgba(0.0, 0.65, 0.6, 0.7),text:Color::BLACK,primary:Color::BLACK,success:Color::BLACK,danger:Color::BLACK,};let g1Extended{background:Background{base:Pair{color:Color::from_rgba(0.1, 0.7, 0.7, 0.8),text:Color::BLACK},weak:Pair{color:Color::from_rgba(0.1, 0.7, 0.7, 0.8),text:Color::BLACK},strong:Pair{color:Color::from_rgba(0.1, 0.7, 0.7, 0.8),text:Color::BLACK},},primary:Primary{base:Pair{color:Color::from_rgba(0.1, 0.7, 0.7, 0.8),text:Color::BLACK},weak:Pair{color:Color::from_rgba(0.1, 0.7, 0.7, 0.8),text:Color::BLACK},strong:Pair{color:Color::from_rgba(0.1, 0.7, 0.7, 0.8),text:Color::BLACK},},secondary:Secondary{base:Pair{color:Color::from_rgba(0.1, 0.7, 0.7, 0.8),text:Color::BLACK},weak:Pair{color:Color::from_rgba(0.1, 0.7, 0.7, 0.8),text:Color::BLACK},strong:Pair{color:Color::from_rgba(0.1, 0.7, 0.7, 0.8),text:Color::BLACK},},success:Success{base:Pair{color:Color::from_rgba(0.1, 0.7, 0.7, 0.8),text:Color::BLACK},weak:Pair{color:Color::from_rgba(0.1, 0.7, 0.7, 0.8),text:Color::BLACK},strong:Pair{color:Color::from_rgba(0.1, 0.7, 0.7, 0.8),text:Color::BLACK},},danger:Danger{base:Pair{color:Color::from_rgba(0.1, 0.7, 0.7, 0.8),text:Color::BLACK},weak:Pair{color:Color::from_rgba(0.1, 0.7, 0.7, 0.8),text:Color::BLACK},strong:Pair{color:Color::from_rgba(0.1, 0.7, 0.7, 0.8),text:Color::BLACK},},is_dark:false,};let cus1Arc::new(iced::theme::Custom::new(t1.to_string(),p1));let cus2Arc::new(iced::theme::Custom::with_fn(t1.to_string(), p1, |_|g1));iced::Theme::Custom(cus1)}UITheme::T2 {let p1Palette{//background:iced::Color::from_rgba(0.0, 0.85, 0.8, 0.8),background:Color::from_linear_rgba(0.0, 0.5, 0.6, 0.8),text:Color::BLACK,primary:Color::BLACK,success:Color::BLACK,danger:Color::BLACK,};let cus1Arc::new(iced::theme::Custom::new(t1.to_string(),p1));iced::Theme::Custom(cus1)},UITheme::T3 {let p1Palette{background:iced::Color::from_rgba(0.0, 0.85, 0.8, 0.8),text:Color::BLACK,primary:Color::BLACK,success:Color::BLACK,danger:Color::BLACK,};let cus1Arc::new(iced::theme::Custom::new(t1.to_string(),p1));iced::Theme::Custom(cus1)},}}}pub struct UIThemeColor{pub color:Color, }impl UIThemeColor {pub fn get_color(self) - Theme {let p1Palette{background:self.color,text:Color::BLACK,primary:Color::BLACK,success:Color::BLACK,danger:Color::BLACK,};let cus1Arc::new(iced::theme::Custom::new(t1.to_string(),p1));iced::Theme::Custom(cus1) } }main.rs #![allow(dead_code)] #![allow(overflowing_literals)] //cfg可以实现debug期间无视未使用、未导入等警告信息但不影响发布后的警告 #![cfg_attr(debug_assertions, allow(dead_code, unused_imports,unused_variables,unused_mut,unused_assignments))] use core::prelude;use iced::widget::{button, container, slider, text,svg,image,row,column}; use iced::window::{self,Icon}; use iced::{Application, Color, Command, Element, Point, Renderer, Settings, Size, Subscription}; use iced_aw::menu; use iced_widget::graphics::text::cosmic_text::rustybuzz::ttf_parser::gdef; use iced_widget::runtime::futures::event; use rfd::{FileDialog,MessageDialog}; extern crate image as eximage;mod menuset; mod uitheme;struct Example{slider_value:f32,slider_value2:f32,slider_value3:f32,slider_value4:f32,theme:iced::Theme, }#[derive(Debug,Clone)] enum Message{SliderChanged(f32),SliderChanged2(f32),SliderChanged3(f32),SliderChanged4(f32),WJ(menuset::WJMessage),GJ(menuset::GJMessage),GY(menuset::GYMessage),GFTheme(iced::Theme),MenuNone,EventOcu(iced::Event), }/// /// 图片转为icon格式 fn image_to_icon(file: str,w:u32,h:u32,) - Icon {let imgeximage::open(file);let img_pathmatch img{Ok(path)path,Err(e)panic!({},e),};let img_fileimg_path.to_rgba8();let iconiced::window::icon::from_rgba(img_file.to_vec(), w, h);let icon2match icon{Ok(iconfile)iconfile,Err(e)panic!({},e),};icon2 }fn main() - iced::Result {//Example::run(Settings::default())let myfont微软雅黑;let iconimage_to_icon(../img-convert/img/icon1.png, 500, 500);Example::run(Settings{window:window::Settings{size:Size{width:800.0,height:600.0},position:window::Position::Specific(Point{x:100.0,y:40.0}),icon:Some(icon),..Default::default()},default_font:iced::Font{family:iced::font::Family::Name(myfont),..Default::default()},..Default::default()})}async fn load() - Result(),String {Ok(()) }impl Application for Example {type Executor iced::executor::Default;type Message Message;type Theme iced::Theme;type Flags ();fn new(flags: Self::Flags) - (Self, CommandSelf::Message) {(Self{slider_value:0.5,slider_value2:0.5,slider_value3:0.5,slider_value4:0.8,theme:iced::Theme::Light,},Command::none())}fn title(self) - String {String::from(图片格式转换器)}fn theme(self) - Self::Theme {self.theme.clone()}fn update(mut self, message: Self::Message) - CommandSelf::Message {match message{Message::SliderChanged(value){self.slider_valuevalue;let color1Color::from_rgba(self.slider_value, self.slider_value2,self.slider_value3, self.slider_value4);self.themeuitheme::UIThemeColor::get_color(uitheme::UIThemeColor{color:color1});}Message::SliderChanged2(value){self.slider_value2value;let color1Color::from_rgba(self.slider_value, self.slider_value2,self.slider_value3, self.slider_value4);self.themeuitheme::UIThemeColor::get_color(uitheme::UIThemeColor{color:color1});}Message::SliderChanged3(value){self.slider_value3value;let color1Color::from_rgba(self.slider_value, self.slider_value2,self.slider_value3, self.slider_value4);self.themeuitheme::UIThemeColor::get_color(uitheme::UIThemeColor{color:color1});}Message::SliderChanged4(value){self.slider_value4value;let color1Color::from_rgba(self.slider_value, self.slider_value2,self.slider_value3, self.slider_value4);self.themeuitheme::UIThemeColor::get_color(uitheme::UIThemeColor{color:color1});}Message::WJ(msg){match msg{menuset::WJMessage::New{println!(new);}menuset::WJMessage::Open{println!(open)}menuset::WJMessage::Close{return window::close(window::Id::MAIN)}menuset::WJMessage::Save{println!(save)}menuset::WJMessage::WenJian{println!(wenjian)}}}Message::GJ(msg){match msg{menuset::GJMessage::GongJv{println!(gongjv);}menuset::GJMessage::T1{println!(t1);self.themeuitheme::UITheme::theme_name(uitheme::UITheme::T1);self.slider_valueself.theme.clone().palette().background.r;self.slider_value2self.theme.clone().palette().background.g;self.slider_value3self.theme.clone().palette().background.b;self.slider_value4self.theme.clone().palette().background.a;}menuset::GJMessage::T2{println!(t2);//self.themeiced::Theme::Custom(Arc::new());let ttuitheme::UITheme::theme_name(uitheme::UITheme::T2);self.themett;self.slider_valueself.theme.clone().palette().background.r;self.slider_value2self.theme.clone().palette().background.g;self.slider_value3self.theme.clone().palette().background.b;self.slider_value4self.theme.clone().palette().background.a;}menuset::GJMessage::T3{println!(t3);self.themeuitheme::UITheme::theme_name(uitheme::UITheme::T3);self.slider_valueself.theme.clone().palette().background.r;self.slider_value2self.theme.clone().palette().background.g;self.slider_value3self.theme.clone().palette().background.b;self.slider_value4self.theme.clone().palette().background.a;}}}Message::GY(msg){match msg{menuset::GYMessage::GuanYu{println!(guanyu);}menuset::GYMessage::GY{println!(gy);let resrfd::MessageDialog::new().set_title(关于).set_level(rfd::MessageLevel::Info).set_description(本软件是基于rust和iced的图像处理软件).set_buttons(rfd::MessageButtons::Ok).show();}menuset::GYMessage::BZ{println!(bz)}menuset::GYMessage::GX{println!(gx)}}}Message::GFTheme(gftheme){self.themegftheme;self.slider_valueself.theme.clone().palette().background.r;self.slider_value2self.theme.clone().palette().background.g;self.slider_value3self.theme.clone().palette().background.b;self.slider_value4self.theme.clone().palette().background.a;}Message::MenuNone{}Message::EventOcu(event){}}Command::none()}fn subscription(self) - SubscriptionSelf::Message {event::listen().map(Message::EventOcu)//Subscription::none()}fn view(self) - Element_, Self::Message, Self::Theme, crate::Renderer {let themecolorself.theme.palette().clone().background;//println!({:?},themecolor);//menu list setlet arrowsvg..\\img-convert\\img\\arrow\\arrow_right_16.svg;let wj_openmenuset::menu_no_sub(打开,Message::WJ(menuset::WJMessage::Open));// let wj_new_mode1menuset::menu_no_sub(格式1,Message::WJ(menuset::WJMessage::Open) );// let wj_new_mode2menuset::menu_no_sub(格式2,Message::WJ(menuset::WJMessage::Open) );let wj_newmenuset::menu_no_sub(新建, Message::WJ(menuset::WJMessage::New));let wj_savemenuset::menu_no_sub(保存,Message::WJ(menuset::WJMessage::Save));let wj_closemenuset::menu_no_sub(关闭,Message::WJ(menuset::WJMessage::Close));let wj_mainmenuset::menu_main(文件, Message::WJ(menuset::WJMessage::WenJian), vec![wj_open,wj_new,wj_save,wj_close]);let gj_title1_1menuset::menu_no_sub(CatppuccinFrapp,Message::GFTheme(iced::Theme::CatppuccinFrappe));let gj_title1_2menuset::menu_no_sub(CatppuccinLatte,Message::GFTheme(iced::Theme::CatppuccinLatte));let gj_title1_3menuset::menu_no_sub(CatppuccinMacchiato,Message::GFTheme(iced::Theme::CatppuccinMacchiato));let gj_title1_4menuset::menu_no_sub(CatppuccinMocha,Message::GFTheme(iced::Theme::CatppuccinMocha));let gj_title1_5menuset::menu_no_sub(Dark,Message::GFTheme(iced::Theme::Dark));let gj_title1_6menuset::menu_no_sub(Light,Message::GFTheme(iced::Theme::Light));let gj_title1_7menuset::menu_no_sub(Dracula,Message::GFTheme(iced::Theme::Dracula));let gj_title1_8menuset::menu_no_sub(Nord,Message::GFTheme(iced::Theme::Nord));let gj_title1_9menuset::menu_no_sub(GruvboxDark,Message::GFTheme(iced::Theme::GruvboxDark));let gj_title1_10menuset::menu_no_sub(GruvboxLight,Message::GFTheme(iced::Theme::GruvboxLight));let gj_title1menuset::menu_with_sub(官方主题,Message::MenuNone,arrowsvg,vec![gj_title1_1,gj_title1_2,gj_title1_3,gj_title1_4,gj_title1_5,gj_title1_6,gj_title1_7,gj_title1_8,gj_title1_9,gj_title1_10,]);let gj_title2_1menuset::menu_no_sub(主题1,Message::GJ(menuset::GJMessage::T1));let gj_title2_2menuset::menu_no_sub(主题2,Message::GJ(menuset::GJMessage::T2));let gj_title2_3menuset::menu_no_sub(主题3,Message::GJ(menuset::GJMessage::T3));let gj_title2menuset::menu_with_sub(自定义主题,Message::MenuNone,arrowsvg,vec![gj_title2_1,gj_title2_2,gj_title2_3,]);let gj_title3_1menuset::menu_no_sub_slider(R, Message::SliderChanged, self.slider_value,themecolor);let gj_title3_2menuset::menu_no_sub_slider(G, Message::SliderChanged2, self.slider_value2,themecolor);let gj_title3_3menuset::menu_no_sub_slider(B, Message::SliderChanged3,self.slider_value3,themecolor);let gj_title3_4menuset::menu_no_sub_slider(A, Message::SliderChanged4,self.slider_value4,themecolor);let gj_title3menuset::menu_with_sub(动态调整,Message::MenuNone,arrowsvg,vec![gj_title3_1,gj_title3_2,gj_title3_3,gj_title3_4,]);let gj_mainmenuset::menu_main(主题, Message::GJ(menuset::GJMessage::GongJv),vec![gj_title1,gj_title2,gj_title3]);let gy_gymenuset::menu_no_sub(关于, Message::GY(menuset::GYMessage::GY));let gy_bzmenuset::menu_no_sub(帮助, Message::GY(menuset::GYMessage::BZ));let gy_gxmenuset::menu_no_sub(更新, Message::GY(menuset::GYMessage::GX));let gy_mainmenuset::menu_main(帮助, Message::GY(menuset::GYMessage::GuanYu),vec![gy_gy,gy_bz,gy_gx]);let barstyleiced_aw::style::menu_bar::MenuBarStyle::Custom(Box::new(menuset::MyMenuBarStyle{//backcolor:Color::from_rgba8(106, 195, 251, 0.8),backcolor:themecolor,}));let menu_barmenuset::create_menubar(vec![wj_main,gj_main,gy_main,],barstyle);let cont1container(menu_bar).padding(5);cont1.into()} } 动态演示 rustGUI动态调整演示
http://www.yayakq.cn/news/6185/

相关文章:

  • wordpress内部服务器成都网站排名生客seo
  • 邹城网站建设网页设计模板素材图书馆
  • 宁波江北建设局网站网站建设 域名 空间
  • 台州建设信息港网站外贸网站开发营销
  • 营销网站定制福建外贸网站建设
  • 做个静态网站多少钱wordpress最大上传2g
  • 个人网站审批网站首页被k 内页还有
  • 网站联盟是什么意思汕头seo外包服务
  • 静态网站建设流程怎么写图片制作软件下载
  • 域名空间网站怎么做网页设计手机端
  • 为什么手机进网站乱码网站建设做的好的公司
  • 网站怎么显示被k电商 网站 建设
  • 服务器系统搭建网站源码电商平台活动策划方案
  • 长春高铁站wordpress 3.9中文版
  • 提供服务好的网站制作什么网站做免单衣服
  • 唐山开发网站的公司360网站建设公司
  • 网站建设策划书ppt鞍山做网站哪家好
  • 个人网站 备案建设厅注册中心网站
  • 厦门网站建设的公司寿光做网站m0536
  • 那个相亲网站做的比较好查网站域名备案
  • 模板网站自助建站什么是网站反向链接
  • joomla 多语言网站wordpress分页效果
  • 设计制作一个网站智慧团建系统平台登录入口
  • 企业网站建设成本网站地区词优化
  • 手机免费建站教程php网站开发外包
  • 求个网站河南搜索引擎推广公司
  • 教育培训门户网站模板下载山西中考考生网上服务平台
  • angular适合 做 网站吗深圳装修公司前十强
  • 木匠手做网站tp框架做的网站
  • 玉山建设局网站流量推广app