summaryrefslogtreecommitdiff
path: root/src/panes/code_view.rs
diff options
context:
space:
mode:
authorpml68 <contact@pml68.dev>2025-04-28 10:59:52 +0200
committerpml68 <contact@pml68.dev>2025-04-28 23:45:43 +0200
commite17ce59fa4c907511f38795c342b2232a7bba26d (patch)
tree0bbeddd19696de817a97f2109bae316e3a564f3a /src/panes/code_view.rs
parentfeat: switch to modified `iced_fontello` for custom Theme support (diff)
downloadiced-builder-e17ce59fa4c907511f38795c342b2232a7bba26d.tar.gz
feat: switch to fully custom, Material3-based theme
Diffstat (limited to 'src/panes/code_view.rs')
-rw-r--r--src/panes/code_view.rs46
1 files changed, 26 insertions, 20 deletions
diff --git a/src/panes/code_view.rs b/src/panes/code_view.rs
index 890af8a..5999b8f 100644
--- a/src/panes/code_view.rs
+++ b/src/panes/code_view.rs
@@ -1,27 +1,36 @@
use iced::advanced::text::highlighter::Format;
-use iced::widget::{Space, button, pane_grid, row, text, text_editor};
-use iced::{Alignment, Background, Border, Font, Length, Theme};
+use iced::border::Radius;
+use iced::widget::{button, pane_grid, row, text, text_editor};
+use iced::{Alignment, Border, Font, Length};
use iced_custom_highlighter::{Highlight, Highlighter, Scope, Settings};
+use material_theme::Theme;
use super::style;
use crate::icon;
use crate::types::{DesignerPane, Message};
use crate::widget::tip;
+// TODO: implement a highlight style for the material theme
fn highlight_style(theme: &Theme, scope: &Scope) -> Format<Font> {
+ let theme = if theme.is_dark() {
+ iced::Theme::SolarizedDark
+ } else {
+ iced::Theme::SolarizedLight
+ };
+
match scope {
Scope::Custom { .. } | Scope::Other => Format {
color: Some(theme.extended_palette().primary.strong.color),
font: None,
},
- _ => Highlight::default_style(theme, scope),
+ _ => Highlight::default_style(&theme, scope),
}
}
pub fn view(
editor_content: &text_editor::Content,
is_focused: bool,
-) -> pane_grid::Content<'_, Message> {
+) -> pane_grid::Content<'_, Message, Theme> {
let title_bar = pane_grid::TitleBar::new(text("Generated Code").center())
.controls(pane_grid::Controls::dynamic(
row![
@@ -29,28 +38,28 @@ pub fn view(
button(icon::copy())
.on_press(Message::CopyCode)
.padding([2, 7])
- .style(button::text),
+ .style(material_theme::button::text),
"Copy",
tip::Position::FollowCursor
),
- Space::with_width(20),
button("Switch to Designer view")
.on_press(Message::SwitchPage(DesignerPane::DesignerView))
]
+ .spacing(20)
.align_y(Alignment::Center),
row![
tip(
button(icon::copy())
.on_press(Message::CopyCode)
.padding([2, 7])
- .style(button::text),
+ .style(material_theme::button::text),
"Copy",
tip::Position::FollowCursor
),
- Space::with_width(20),
button(icon::switch())
.on_press(Message::SwitchPage(DesignerPane::DesignerView))
]
+ .spacing(20)
.align_y(Alignment::Center),
))
.padding(10)
@@ -60,25 +69,22 @@ pub fn view(
text_editor(editor_content)
.on_action(Message::EditorAction)
.font(Font::MONOSPACE)
- .highlight_with::<Highlighter>(
+ .highlight_with::<Highlighter<Theme>>(
Settings::new(vec![], highlight_style, "rs"),
Highlight::to_format,
)
.style(|theme, _| {
- let palette = theme.extended_palette();
+ let style = material_theme::text_editor::default(
+ theme,
+ text_editor::Status::Active,
+ );
+
text_editor::Style {
- background: Background::Color(
- palette.background.base.color,
- ),
border: Border {
- radius: 2.into(),
- width: 1.0,
- color: palette.background.strong.color,
+ radius: Radius::default(),
+ ..style.border
},
- icon: palette.background.weak.text,
- placeholder: palette.background.strong.color,
- value: palette.background.base.text,
- selection: palette.primary.weak.color,
+ ..style
}
})
.height(Length::Fill)