diff options
| author | Polesznyák Márk László <116908301+pml68@users.noreply.github.com> | 2025-02-21 21:13:18 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-02-21 21:13:18 +0100 |
| commit | 53819b29b843326117feac310a6f97e594022cc9 (patch) | |
| tree | c81a88bf256ea7205c02e7bc57843375eb2ed079 /src | |
| parent | feat!: add name to `Theme`, `is_dark` -> `dark` (diff) | |
| parent | feat: update to `iced` 0.14-dev (diff) | |
| download | iced-builder-53819b29b843326117feac310a6f97e594022cc9.tar.gz | |
Merge pull request #6 from pml68/feat/0.14
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.rs | 16 | ||||
| -rw-r--r-- | src/panes/code_view.rs | 9 | ||||
| -rw-r--r-- | src/theme.rs | 38 | ||||
| -rw-r--r-- | src/types.rs | 2 | ||||
| -rw-r--r-- | src/types/project.rs | 2 |
5 files changed, 49 insertions, 18 deletions
diff --git a/src/main.rs b/src/main.rs index 5f25a28..743797c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -24,8 +24,6 @@ use panes::{code_view, designer_view, element_list}; use tokio::runtime; use types::{Action, DesignerPane, ElementName, Message, Project}; -//pub(crate) type Result<T> = core::result::Result<T, Error>; - fn main() -> Result<(), Box<dyn std::error::Error>> { let mut args = std::env::args(); let _ = args.next(); @@ -146,7 +144,7 @@ impl App { fn update(&mut self, message: Message) -> Task<Message> { match message { - Message::ToggleTheme(event) => { + Message::SwitchTheme(event) => { self.theme.update(event); } Message::CopyCode => { @@ -320,7 +318,7 @@ impl App { } fn subscription(&self) -> iced::Subscription<Message> { - keyboard::on_key_press(|key, modifiers| { + let hotkeys = keyboard::on_key_press(|key, modifiers| { if modifiers.command() { match key.as_ref() { keyboard::Key::Character("o") => Some(Message::OpenFile), @@ -337,14 +335,16 @@ impl App { } else { None } - }) + }); + + hotkeys } fn view(&self) -> Element<'_, Message> { let header = row![pick_list( self.config.theme.all.clone(), - Some(self.theme.target().clone()), - |theme| { Message::ToggleTheme(theme.into()) } + Some(self.theme.target()), + |theme| Message::SwitchTheme(theme.into()) )] .width(200); let pane_grid = @@ -383,7 +383,7 @@ impl App { .width(Length::Fill); Animation::new(&self.theme, container(content).height(Length::Fill)) - .on_update(Message::ToggleTheme) + .on_update(Message::SwitchTheme) .into() } } diff --git a/src/panes/code_view.rs b/src/panes/code_view.rs index bb21530..1037b5d 100644 --- a/src/panes/code_view.rs +++ b/src/panes/code_view.rs @@ -4,7 +4,7 @@ use iced::{Alignment, Background, Border, Font, Length, Theme}; use iced_custom_highlighter::{Highlight, Highlighter, Scope, Settings}; use super::style; -use crate::icon::copy; +use crate::icon; use crate::types::{DesignerPane, Message}; use crate::widget::tip; @@ -27,8 +27,11 @@ pub fn view( text("Generated Code"), Space::with_width(Length::Fill), tip( - button(copy()).on_press(Message::CopyCode), - "Copy code to clipboard", + button(icon::copy()) + .on_press(Message::CopyCode) + .padding([2, 7]) + .style(button::text), + "Copy", tip::Position::FollowCursor ), Space::with_width(20), diff --git a/src/theme.rs b/src/theme.rs index 7cb51c1..6547c6b 100644 --- a/src/theme.rs +++ b/src/theme.rs @@ -67,19 +67,21 @@ fn palette_to_string(palette: &iced::theme::Palette) -> String { primary: color!(0x{}), success: color!(0x{}), danger: color!(0x{}), + warning: color!(0x{}), }}", color_to_hex(palette.background), color_to_hex(palette.text), color_to_hex(palette.primary), color_to_hex(palette.success), color_to_hex(palette.danger), + color_to_hex(palette.warning), ) } fn extended_to_string(extended: &Extended) -> String { format!( r" -Extended{{background:Background{{base:Pair{{color:color!(0x{}),text:color!(0x{}),}},weak:Pair{{color:color!(0x{}),text:color!(0x{}),}},strong:Pair{{color:color!(0x{}),text:color!(0x{}),}},}},primary:Primary{{base:Pair{{color:color!(0x{}),text:color!(0x{}),}},weak:Pair{{color:color!(0x{}),text:color!(0x{}),}},strong:Pair{{color:color!(0x{}),text:color!(0x{}),}},}},secondary:Secondary{{base:Pair{{color:color!(0x{}),text:color!(0x{}),}},weak:Pair{{color:color!(0x{}),text:color!(0x{}),}},strong:Pair{{color:color!(0x{}),text:color!(0x{}),}},}},success:Success{{base:Pair{{color:color!(0x{}),text:color!(0x{}),}},weak:Pair{{color:color!(0x{}),text:color!(0x{}),}},strong:Pair{{color:color!(0x{}),text:color!(0x{}),}},}},danger:Danger{{base:Pair{{color:color!(0x{}),text:color!(0x{}),}},weak:Pair{{color:color!(0x{}),text:color!(0x{}),}},strong:Pair{{color:color!(0x{}),text:color!(0x{}),}},}},is_dark:true,}}", +Extended{{background:Background{{base:Pair{{color:color!(0x{}),text:color!(0x{}),}},weak:Pair{{color:color!(0x{}),text:color!(0x{}),}},strong:Pair{{color:color!(0x{}),text:color!(0x{}),}},}},primary:Primary{{base:Pair{{color:color!(0x{}),text:color!(0x{}),}},weak:Pair{{color:color!(0x{}),text:color!(0x{}),}},strong:Pair{{color:color!(0x{}),text:color!(0x{}),}},}},secondary:Secondary{{base:Pair{{color:color!(0x{}),text:color!(0x{}),}},weak:Pair{{color:color!(0x{}),text:color!(0x{}),}},strong:Pair{{color:color!(0x{}),text:color!(0x{}),}},}},success:Success{{base:Pair{{color:color!(0x{}),text:color!(0x{}),}},weak:Pair{{color:color!(0x{}),text:color!(0x{}),}},strong:Pair{{color:color!(0x{}),text:color!(0x{}),}},}},danger:Danger{{base:Pair{{color:color!(0x{}),text:color!(0x{}),}},weak:Pair{{color:color!(0x{}),text:color!(0x{}),}},strong:Pair{{color:color!(0x{}),text:color!(0x{}),}},}},warning:Warning{{base:Pair{{color:color!(0x{}),text:color!(0x{}),}},weak:Pair{{color:color!(0x{}),text:color!(0x{}),}},strong:Pair{{color:color!(0x{}),text:color!(0x{}),}},}},is_dark:true,}}", color_to_hex(extended.background.base.color), color_to_hex(extended.background.base.text), color_to_hex(extended.background.weak.color), @@ -110,6 +112,12 @@ Extended{{background:Background{{base:Pair{{color:color!(0x{}),text:color!(0x{}) color_to_hex(extended.danger.weak.text), color_to_hex(extended.danger.strong.color), color_to_hex(extended.danger.strong.text), + color_to_hex(extended.warning.base.color), + color_to_hex(extended.warning.base.text), + color_to_hex(extended.warning.weak.color), + color_to_hex(extended.warning.weak.text), + color_to_hex(extended.warning.strong.color), + color_to_hex(extended.warning.strong.text), ) } @@ -216,6 +224,8 @@ pub struct ThemePalette { success: Color, #[serde(with = "color_serde")] danger: Color, + #[serde(with = "color_serde")] + warning: Color, } impl Default for ThemePalette { @@ -227,6 +237,7 @@ impl Default for ThemePalette { primary: palette.primary, success: palette.success, danger: palette.danger, + warning: palette.warning, } } } @@ -239,6 +250,7 @@ impl From<ThemePalette> for iced::theme::Palette { primary: palette.primary, success: palette.success, danger: palette.danger, + warning: palette.warning, } } } @@ -264,7 +276,6 @@ impl From<Theme> for Extended { } } - // Handle primary if let Some(primary) = extended_palette.primary { if let Some(base) = primary.base { extended.primary.base = base.into(); @@ -277,7 +288,6 @@ impl From<Theme> for Extended { } } - // Handle secondary if let Some(secondary) = extended_palette.secondary { if let Some(base) = secondary.base { extended.secondary.base = base.into(); @@ -290,7 +300,6 @@ impl From<Theme> for Extended { } } - // Handle success if let Some(success) = extended_palette.success { if let Some(base) = success.base { extended.success.base = base.into(); @@ -303,7 +312,6 @@ impl From<Theme> for Extended { } } - // Handle danger if let Some(danger) = extended_palette.danger { if let Some(base) = danger.base { extended.danger.base = base.into(); @@ -315,6 +323,18 @@ impl From<Theme> for Extended { extended.danger.strong = strong.into(); } } + + if let Some(warning) = extended_palette.warning { + if let Some(base) = warning.base { + extended.warning.base = base.into(); + } + if let Some(weak) = warning.weak { + extended.warning.weak = weak.into(); + } + if let Some(strong) = warning.strong { + extended.warning.strong = strong.into(); + } + } } extended @@ -328,6 +348,7 @@ struct ExtendedThemePalette { secondary: Option<ThemeSecondary>, success: Option<ThemeSuccess>, danger: Option<ThemeDanger>, + warning: Option<ThemeWarning>, } #[derive(Debug, Default, serde::Deserialize)] @@ -366,6 +387,13 @@ struct ThemeDanger { } #[derive(Debug, Default, serde::Deserialize)] +struct ThemeWarning { + base: Option<ThemePair>, + weak: Option<ThemePair>, + strong: Option<ThemePair>, +} + +#[derive(Debug, Default, serde::Deserialize)] struct ThemePair { #[serde(with = "color_serde")] color: Color, diff --git a/src/types.rs b/src/types.rs index b9fd68f..7a6be71 100644 --- a/src/types.rs +++ b/src/types.rs @@ -15,7 +15,7 @@ use crate::Error; #[derive(Debug, Clone)] pub enum Message { - ToggleTheme(Event<Theme>), + SwitchTheme(Event<Theme>), CopyCode, SwitchPage(DesignerPane), EditorAction(text_editor::Action), diff --git a/src/types/project.rs b/src/types/project.rs index 18247ae..ee0ff6c 100644 --- a/src/types/project.rs +++ b/src/types/project.rs @@ -114,7 +114,7 @@ impl Project { let mut theme_imports = ""; if theme_index(&theme.to_string(), Theme::ALL).is_none() { if theme_code.contains("Extended") { - theme_imports = "use iced::{{color,theme::{{Palette,palette::{{Extended,Background,Primary,Secondary,Success,Danger,Pair}}}}}};\n"; + theme_imports = "use iced::{{color,theme::{{Palette,palette::{{Extended,Background,Primary,Secondary,Success,Danger,Warning,Pair}}}}}};\n"; } else { theme_imports = "use iced::{{color,theme::Palette}};\n"; } |
