diff --git a/CHANGELOG.md b/CHANGELOG.md
index d7157c59..f552164c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,13 @@
### Features/Changes
+- [#1619](https://github.com/lapce/lapce/pull/1619):
+ - Add active/inactive tab colours
+ - Add primary button colour
+ - Replace custom drawn checkboxes with icons in source control
+ - Add hover effect in source control panel
+ - Add colour preview in settings
+- [#1619](https://github.com/lapce/lapce/pull/1619): Add active/inactive tab colours, add primary button colour, replace custom drawn checkboxes with icons in source
- [#1617](https://github.com/lapce/lapce/pull/1617): Fixed a stack overflow that would crash lapce when attempting to sort a large number of PaletteItems
- [#1609](https://github.com/lapce/lapce/pull/1609): Add syntax highlighting for erlang
- [#1590](https://github.com/lapce/lapce/pull/1590): Added ability to open file and file diff from source control context menu
diff --git a/defaults/dark-theme.toml b/defaults/dark-theme.toml
index 6ed223a6..41f5e39a 100644
--- a/defaults/dark-theme.toml
+++ b/defaults/dark-theme.toml
@@ -60,22 +60,38 @@ magenta = "#C678DD"
"tag" = "$blue"
[color-theme.ui]
-"lapce.active_tab" = "#528BFF"
-"lapce.inactive_tab" = "#5C6370"
"lapce.error" = "$red"
"lapce.warn" = "$yellow"
"lapce.dropdown_shadow" = "#000000"
"lapce.border" = "#000000"
"lapce.scroll_bar" = "$grey"
-"lapce.icon_active" = "$white"
-"lapce.icon_inactive" = "$grey"
+"lapce.button.primary.background" = "#50a14f"
+"lapce.button.primary.foreground" = "$black"
+
+# tab
+"lapce.tab.active.background" = "$black"
+"lapce.tab.active.foreground" = "$white"
+"lapce.tab.active.underline" = "#528BFF"
+
+"lapce.tab.inactive.background" = "#1d2026"
+"lapce.tab.inactive.foreground" = "#7e838c"
+"lapce.tab.inactive.underline" = "#528BFF33"
+
+"lapce.tab.separator" = ""
+
+"lapce.icon.active" = "$white"
+"lapce.icon.inactive" = "$grey"
"lapce.remote.local" = "#4078F2"
"lapce.remote.connected" = "#50A14F"
"lapce.remote.connecting" = "#C18401"
"lapce.remote.disconnected" = "#E45649"
+"lapce.plugin.name" = "#DDDDDD"
+"lapce.plugin.description" = "$white"
+"lapce.plugin.author" = "#B0B0B0"
+
"editor.background" = "$black"
"editor.foreground" = "$white"
"editor.dim" = "#5C6370"
@@ -87,6 +103,7 @@ magenta = "#C678DD"
"editor.visible_whitespace" = "$grey"
"editor.indent_guide" = "$grey"
"editor.drag_drop_background" = "#79c1fc55"
+"editor.drag_drop_tab_background" = "#0b0e14EE"
"inlay_hint.foreground" = "$white"
"inlay_hint.background" = "#528abF37"
diff --git a/defaults/light-theme.toml b/defaults/light-theme.toml
index c1481321..3836330b 100644
--- a/defaults/light-theme.toml
+++ b/defaults/light-theme.toml
@@ -66,21 +66,36 @@ magenta = "#A626A4"
"tag" = "$blue"
[color-theme.ui]
-"lapce.active_tab" = "#526FFF"
-"lapce.inactive_tab" = "#A0A1A7"
"lapce.error" = "#E51400"
"lapce.warn" = "#E9A700"
"lapce.dropdown_shadow" = "#B4B4B4"
"lapce.border" = "#B4B4B4"
"lapce.scroll_bar" = "#B4B4B4"
-"lapce.icon_active" = "$black"
-"lapce.icon_inactive" = "$grey"
+
+"lapce.button.primary.background" = "#50a14f"
+"lapce.button.primary.foreground" = "$white"
+
+# tab
+"lapce.tab.active.background" = "$white"
+"lapce.tab.active.foreground" = "$black"
+"lapce.tab.active.underline" = "#528BFF"
+
+"lapce.tab.inactive.background" = "#d3d3d3"
+"lapce.tab.inactive.foreground" = "#17181c"
+"lapce.tab.inactive.underline" = ""
+
+"lapce.icon.active" = "$black"
+"lapce.icon.inactive" = "$grey"
"lapce.remote.local" = "#4078F2"
"lapce.remote.connected" = "#50A14F"
"lapce.remote.connecting" = "#C18401"
"lapce.remote.disconnected" = "#E45649"
+"lapce.plugin.name" = "#444444"
+"lapce.plugin.description" = "$black"
+"lapce.plugin.author" = "#707070"
+
"terminal.cursor" = "$black"
"terminal.foreground" = "$black"
"terminal.background" = "$white"
@@ -112,6 +127,7 @@ magenta = "#A626A4"
"editor.visible_whitespace" = "$grey"
"editor.indent_guide" = "$grey"
"editor.drag_drop_background" = "#79c1fc33"
+"editor.drag_drop_tab_background" = "#0b0e14EE"
"inlay_hint.foreground" = "$black"
"inlay_hint.background" = "#528bFF55"
diff --git a/defaults/settings.toml b/defaults/settings.toml
index 18c3d764..1a79668e 100644
--- a/defaults/settings.toml
+++ b/defaults/settings.toml
@@ -102,15 +102,28 @@ magenta = "#C678DD"
"symbol" = "$yellow"
[color-theme.ui]
-"lapce.active_tab" = "#528BFF"
-"lapce.inactive_tab" = "#5C6370"
"lapce.error" = "$red"
"lapce.warn" = "$yellow"
"lapce.dropdown_shadow" = "#000000"
"lapce.border" = "#000000"
"lapce.scroll_bar" = "$grey"
-"lapce.icon_active" = "$white"
-"lapce.icon_inactive" = "$grey"
+
+"lapce.button.primary.background" = "#50a14f"
+"lapce.button.primary.foreground" = "$black"
+
+# tab
+"lapce.tab.active.background" = "$black"
+"lapce.tab.active.foreground" = "$white"
+"lapce.tab.active.underline" = "#528BFF"
+
+"lapce.tab.inactive.background" = "#1d2026"
+"lapce.tab.inactive.foreground" = "#7e838c"
+"lapce.tab.inactive.underline" = "#528BFF33"
+
+"lapce.tab.separator" = ""
+
+"lapce.icon.active" = "$white"
+"lapce.icon.inactive" = "$grey"
"lapce.remote.local" = "#4078F2"
"lapce.remote.connected" = "#50A14F"
@@ -128,6 +141,7 @@ magenta = "#C678DD"
"editor.visible_whitespace" = "#5C6370"
"editor.indent_guide" = "$grey"
"editor.drag_drop_background" = "#79c1fc55"
+"editor.drag_drop_tab_background" = "#0b0e14EE"
"inlay_hint.foreground" = "$white"
"inlay_hint.background" = "#528bFF88"
@@ -218,6 +232,8 @@ name = ""
"scm.diff.added" = "diff-added.svg"
"scm.diff.removed" = "diff-removed.svg"
"scm.diff.renamed" = "diff-renamed.svg"
+"scm.change.add" = "add.svg"
+"scm.change.remove" = "remove.svg"
"palette.menu" = "chevron-down.svg"
diff --git a/icons/codicons/add.svg b/icons/codicons/add.svg
new file mode 100644
index 00000000..aed9bc69
--- /dev/null
+++ b/icons/codicons/add.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/lapce-data/src/config.rs b/lapce-data/src/config.rs
index b49e4349..d31ace21 100644
--- a/lapce-data/src/config.rs
+++ b/lapce-data/src/config.rs
@@ -41,19 +41,37 @@ pub struct LapceTheme {}
impl LapceTheme {
pub const LAPCE_WARN: &str = "lapce.warn";
pub const LAPCE_ERROR: &str = "lapce.error";
- pub const LAPCE_ACTIVE_TAB: &str = "lapce.active_tab";
- pub const LAPCE_INACTIVE_TAB: &str = "lapce.inactive_tab";
pub const LAPCE_DROPDOWN_SHADOW: &str = "lapce.dropdown_shadow";
pub const LAPCE_BORDER: &str = "lapce.border";
pub const LAPCE_SCROLL_BAR: &str = "lapce.scroll_bar";
- pub const LAPCE_ICON_ACTIVE: &str = "lapce.icon_active";
- pub const LAPCE_ICON_INACTIVE: &str = "lapce.icon_inactive";
+
+ pub const LAPCE_BUTTON_PRIMARY_BACKGROUND: &str =
+ "lapce.button.primary.background";
+ pub const LAPCE_BUTTON_PRIMARY_FOREGROUND: &str =
+ "lapce.button.primary.foreground";
+
+ pub const LAPCE_TAB_ACTIVE_BACKGROUND: &str = "lapce.tab.active.background";
+ pub const LAPCE_TAB_ACTIVE_FOREGROUND: &str = "lapce.tab.active.foreground";
+ pub const LAPCE_TAB_ACTIVE_UNDERLINE: &str = "lapce.tab.active.underline";
+
+ pub const LAPCE_TAB_INACTIVE_BACKGROUND: &str = "lapce.tab.inactive.background";
+ pub const LAPCE_TAB_INACTIVE_FOREGROUND: &str = "lapce.tab.inactive.foreground";
+ pub const LAPCE_TAB_INACTIVE_UNDERLINE: &str = "lapce.tab.inactive.underline";
+
+ pub const LAPCE_TAB_SEPARATOR: &str = "lapce.tab.separator";
+
+ pub const LAPCE_ICON_ACTIVE: &str = "lapce.icon.active";
+ pub const LAPCE_ICON_INACTIVE: &str = "lapce.icon.inactive";
pub const LAPCE_REMOTE_LOCAL: &str = "lapce.remote.local";
pub const LAPCE_REMOTE_CONNECTED: &str = "lapce.remote.connected";
pub const LAPCE_REMOTE_CONNECTING: &str = "lapce.remote.connecting";
pub const LAPCE_REMOTE_DISCONNECTED: &str = "lapce.remote.disconnected";
+ pub const LAPCE_PLUGIN_NAME: &str = "lapce.plugin.name";
+ pub const LAPCE_PLUGIN_DESCRIPTION: &str = "lapce.plugin.description";
+ pub const LAPCE_PLUGIN_AUTHOR: &str = "lapce.plugin.author";
+
pub const EDITOR_BACKGROUND: &str = "editor.background";
pub const EDITOR_FOREGROUND: &str = "editor.foreground";
pub const EDITOR_DIM: &str = "editor.dim";
@@ -65,6 +83,8 @@ impl LapceTheme {
pub const EDITOR_VISIBLE_WHITESPACE: &str = "editor.visible_whitespace";
pub const EDITOR_INDENT_GUIDE: &str = "editor.indent_guide";
pub const EDITOR_DRAG_DROP_BACKGROUND: &str = "editor.drag_drop_background";
+ pub const EDITOR_DRAG_DROP_TAB_BACKGROUND: &str =
+ "editor.drag_drop_tab_background";
pub const INLAY_HINT_FOREGROUND: &str = "inlay_hint.foreground";
pub const INLAY_HINT_BACKGROUND: &str = "inlay_hint.background";
@@ -179,6 +199,8 @@ impl LapceIcons {
pub const SCM_DIFF_ADDED: &str = "scm.diff.added";
pub const SCM_DIFF_REMOVED: &str = "scm.diff.removed";
pub const SCM_DIFF_RENAMED: &str = "scm.diff.renamed";
+ pub const SCM_CHANGE_ADD: &str = "scm.change.add";
+ pub const SCM_CHANGE_REMOVE: &str = "scm.change.remove";
pub const PALETTE_MENU: &str = "palette.menu";
@@ -764,7 +786,7 @@ fn default() -> Self {
}
impl ThemeBaseColor {
- fn get(&self, name: &str) -> Option<&Color> {
+ pub fn get(&self, name: &str) -> Option<&Color> {
Some(match name {
"white" => &self.white,
"black" => &self.black,
@@ -1046,8 +1068,6 @@ fn load_icon_themes(
Self::load_icon_theme_from_str(DEFAULT_ICON_THEME).unwrap();
themes.insert(name.to_lowercase(), (name, theme, None));
- log::debug!("{themes:?}");
-
themes
}
diff --git a/lapce-data/src/svg.rs b/lapce-data/src/svg.rs
index 3f3ecd61..62a616b8 100644
--- a/lapce-data/src/svg.rs
+++ b/lapce-data/src/svg.rs
@@ -44,7 +44,9 @@ pub fn get_default_svg(&mut self, name: &str) -> Svg {
let file = if name == "lapce_remote.svg" {
LAPCE_ICONS_DIR.get_file(name).unwrap()
} else {
- CODICONS_ICONS_DIR.get_file(name).unwrap()
+ CODICONS_ICONS_DIR
+ .get_file(name)
+ .unwrap_or_else(|| panic!("Failed to unwrap {name}"))
};
let content = file.contents_utf8().unwrap();
let svg = Svg::from_str(content).unwrap();
diff --git a/lapce-ui/src/app.rs b/lapce-ui/src/app.rs
index 15d728a6..15185e3d 100644
--- a/lapce-ui/src/app.rs
+++ b/lapce-ui/src/app.rs
@@ -89,6 +89,7 @@ pub fn launch() {
.level_for("sled", log::LevelFilter::Off)
.level_for("tracing", log::LevelFilter::Off)
.level_for("druid::core", log::LevelFilter::Off)
+ .level_for("druid::window", log::LevelFilter::Off)
.level_for("druid::box_constraints", log::LevelFilter::Off)
.level_for("cranelift_codegen", log::LevelFilter::Off)
.level_for("wasmtime_cranelift", log::LevelFilter::Off)
diff --git a/lapce-ui/src/editor/tab.rs b/lapce-ui/src/editor/tab.rs
index 6e04c884..1cf12ed8 100644
--- a/lapce-ui/src/editor/tab.rs
+++ b/lapce-ui/src/editor/tab.rs
@@ -643,23 +643,34 @@ fn paint(
let is_active_tab = tab_idx == editor_tab.active;
if is_active_tab {
- let color = if data.focus_area == FocusArea::Editor
+ let stroke = if data.focus_area == FocusArea::Editor
&& Some(widget_id) == *data.main_split.active_tab
{
data.config
- .get_color_unchecked(LapceTheme::LAPCE_ACTIVE_TAB)
+ .get_color_unchecked(LapceTheme::LAPCE_TAB_ACTIVE_UNDERLINE)
} else {
data.config
- .get_color_unchecked(LapceTheme::LAPCE_INACTIVE_TAB)
+ .get_color_unchecked(LapceTheme::LAPCE_TAB_INACTIVE_UNDERLINE)
};
+ ctx.fill(
+ self.rect,
+ data.config
+ .get_color_unchecked(LapceTheme::LAPCE_TAB_ACTIVE_BACKGROUND),
+ );
ctx.stroke(
Line::new(
Point::new(self.rect.x0 + 2.0, self.rect.y1 - 1.0),
Point::new(self.rect.x1 - 2.0, self.rect.y1 - 1.0),
),
- color,
+ stroke,
2.0,
);
+ } else {
+ ctx.fill(
+ self.rect,
+ data.config
+ .get_color_unchecked(LapceTheme::LAPCE_TAB_INACTIVE_BACKGROUND),
+ );
}
ctx.draw_svg(&self.svg, svg_rect, self.svg_color.as_ref());
ctx.draw_text(
@@ -681,7 +692,8 @@ fn paint(
Point::new(x - 0.5, (size.height * 0.8).round()),
Point::new(x - 0.5, size.height - (size.height * 0.8).round()),
),
- data.config.get_color_unchecked(LapceTheme::LAPCE_BORDER),
+ data.config
+ .get_color_unchecked(LapceTheme::LAPCE_TAB_SEPARATOR),
1.0,
);
if tab_idx == 0 {
@@ -698,15 +710,6 @@ fn paint(
);
}
- // Only show background of close button on hover
- if mouse_pos.map(|s| self.rect.contains(s)).unwrap_or(false) {
- ctx.fill(
- &self.close_rect,
- data.config
- .get_color_unchecked(LapceTheme::EDITOR_CURRENT_LINE),
- );
- }
-
// See if any of the children have unsaved changes
let is_pristine = match &editor_tab.children[tab_idx] {
EditorTabChild::Editor(editor_id, _, _) => data
@@ -719,13 +722,23 @@ fn paint(
};
let mut draw_icon = |name: &'static str| {
+ let close_color =
+ if mouse_pos.map(|s| self.rect.contains(s)).unwrap_or(false) {
+ Some(druid::Color::rgba(1.0, 0.0, 0.0, 1.0))
+ } else {
+ None
+ };
ctx.draw_svg(
&data.config.ui_svg(name),
self.close_rect.inflate(-padding, -padding),
- Some(
- data.config
- .get_color_unchecked(LapceTheme::LAPCE_ICON_ACTIVE),
- ),
+ if close_color.is_some() {
+ close_color.as_ref()
+ } else {
+ Some(
+ data.config
+ .get_color_unchecked(LapceTheme::LAPCE_ICON_ACTIVE),
+ )
+ },
);
};
diff --git a/lapce-ui/src/editor/tab_header.rs b/lapce-ui/src/editor/tab_header.rs
index 8ee9fd1f..38e88d0d 100644
--- a/lapce-ui/src/editor/tab_header.rs
+++ b/lapce-ui/src/editor/tab_header.rs
@@ -357,6 +357,12 @@ fn layout(
fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, env: &Env) {
let size = ctx.size();
let rect = size.to_rect();
+ ctx.fill(
+ size.to_rect(),
+ data.config
+ .get_color_unchecked(LapceTheme::LAPCE_TAB_INACTIVE_BACKGROUND),
+ );
+
let shadow_width = data.config.ui.drop_shadow_width() as f64;
if shadow_width > 0.0 {
ctx.with_save(|ctx| {
diff --git a/lapce-ui/src/editor/tab_header_content.rs b/lapce-ui/src/editor/tab_header_content.rs
index fae493a9..75ec3a4d 100644
--- a/lapce-ui/src/editor/tab_header_content.rs
+++ b/lapce-ui/src/editor/tab_header_content.rs
@@ -472,7 +472,16 @@ fn layout(
.font(data.config.ui.font_family(), font_size)
.text_color(
data.config
- .get_color_unchecked(LapceTheme::EDITOR_FOREGROUND)
+ .get_color_unchecked(
+ if editor_tab.active_child().is_some()
+ && editor_tab.active_child().unwrap().widget_id()
+ == child.widget_id()
+ {
+ LapceTheme::LAPCE_TAB_ACTIVE_FOREGROUND
+ } else {
+ LapceTheme::LAPCE_TAB_INACTIVE_FOREGROUND
+ },
+ )
.clone(),
)
.build()
@@ -520,6 +529,12 @@ fn layout(
fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, _env: &Env) {
let size = ctx.size();
+ ctx.fill(
+ size.to_rect(),
+ data.config
+ .get_color_unchecked(LapceTheme::LAPCE_TAB_INACTIVE_BACKGROUND),
+ );
+
for (tab_idx, tab_rect) in self.rects.iter().enumerate() {
tab_rect.paint(ctx, data, self.widget_id, tab_idx, size, self.mouse_pos);
}
diff --git a/lapce-ui/src/find.rs b/lapce-ui/src/find.rs
index 0f8f3181..867a1d5c 100644
--- a/lapce-ui/src/find.rs
+++ b/lapce-ui/src/find.rs
@@ -287,7 +287,7 @@ fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, env: &Env) {
ctx.fill(
&icon.rect,
data.config
- .get_color_unchecked(LapceTheme::LAPCE_ACTIVE_TAB),
+ .get_color_unchecked(LapceTheme::LAPCE_TAB_ACTIVE_UNDERLINE),
);
} else if icon.rect.contains(self.mouse_pos)
&& icon.icon != LapceIcons::SEARCH_CASE_SENSITIVE
diff --git a/lapce-ui/src/plugin.rs b/lapce-ui/src/plugin.rs
index a04f2357..dac23a91 100644
--- a/lapce-ui/src/plugin.rs
+++ b/lapce-ui/src/plugin.rs
@@ -6,10 +6,10 @@
PietTextLayout, Text, TextAttribute, TextLayout as TextLayoutTrait,
TextLayoutBuilder,
},
- ArcStr, BoxConstraints, Color, Command, Cursor, Env, Event, EventCtx,
- FontDescriptor, FontWeight, LayoutCtx, LifeCycle, LifeCycleCtx, MouseEvent,
- PaintCtx, Point, Rect, RenderContext, Size, Target, TextLayout, UpdateCtx,
- Widget, WidgetExt, WidgetId,
+ ArcStr, BoxConstraints, Command, Cursor, Env, Event, EventCtx, FontDescriptor,
+ FontWeight, LayoutCtx, LifeCycle, LifeCycleCtx, MouseEvent, PaintCtx, Point,
+ Rect, RenderContext, Size, Target, TextLayout, UpdateCtx, Widget, WidgetExt,
+ WidgetId,
};
use lapce_core::command::FocusCommand;
use lapce_data::{
@@ -172,7 +172,11 @@ fn paint_plugin(
.new_text_layout(display_name.to_string())
.font(config.ui.font_family(), config.ui.font_size() as f64)
.default_attribute(TextAttribute::Weight(FontWeight::BOLD))
- .text_color(config.get_color_unchecked(LapceTheme::EDITOR_FOCUS).clone())
+ .text_color(
+ config
+ .get_color_unchecked(LapceTheme::LAPCE_PLUGIN_NAME)
+ .clone(),
+ )
.build()
.unwrap();
ctx.draw_text(
@@ -187,7 +191,7 @@ fn paint_plugin(
.font(config.ui.font_family(), config.ui.font_size() as f64)
.text_color(
config
- .get_color_unchecked(LapceTheme::EDITOR_FOREGROUND)
+ .get_color_unchecked(LapceTheme::LAPCE_PLUGIN_DESCRIPTION)
.clone(),
)
.build()
@@ -212,7 +216,7 @@ fn paint_plugin(
.font(config.ui.font_family(), config.ui.font_size() as f64)
.text_color(
config
- .get_color_unchecked(LapceTheme::EDITOR_FOREGROUND)
+ .get_color_unchecked(LapceTheme::LAPCE_PLUGIN_DESCRIPTION)
.clone(),
)
.build()
@@ -240,7 +244,7 @@ fn paint_plugin(
.font(config.ui.font_family(), config.ui.font_size() as f64)
.text_color(
config
- .get_color_unchecked(LapceTheme::EDITOR_FOREGROUND)
+ .get_color_unchecked(LapceTheme::LAPCE_PLUGIN_AUTHOR)
.clone(),
)
.build()
@@ -263,7 +267,9 @@ fn paint_plugin(
.font(config.ui.font_family(), config.ui.font_size() as f64)
.text_color(
config
- .get_color_unchecked(LapceTheme::EDITOR_BACKGROUND)
+ .get_color_unchecked(
+ LapceTheme::LAPCE_BUTTON_PRIMARY_FOREGROUND,
+ )
.clone(),
)
.build()
@@ -272,12 +278,16 @@ fn paint_plugin(
let text_padding = 5.0;
let x = size.width - text_size.width - text_padding * 2.0 - padding;
let y = y + self.line_height * 2.0;
- let color = Color::rgb8(80, 161, 79);
let rect =
Size::new(text_size.width + text_padding * 2.0, self.line_height)
.to_rect()
.with_origin(Point::new(x, y));
- ctx.fill(rect, &color);
+ ctx.fill(
+ rect,
+ config.get_color_unchecked(
+ LapceTheme::LAPCE_BUTTON_PRIMARY_BACKGROUND,
+ ),
+ );
ctx.draw_text(
&text_layout,
Point::new(
@@ -789,7 +799,7 @@ fn layout(
.default_attribute(TextAttribute::Weight(FontWeight::BOLD))
.text_color(
data.config
- .get_color_unchecked(LapceTheme::EDITOR_FOCUS)
+ .get_color_unchecked(LapceTheme::LAPCE_PLUGIN_NAME)
.clone(),
)
.build()
@@ -804,7 +814,9 @@ fn layout(
)
.text_color(
data.config
- .get_color_unchecked(LapceTheme::EDITOR_FOREGROUND)
+ .get_color_unchecked(
+ LapceTheme::LAPCE_PLUGIN_DESCRIPTION,
+ )
.clone(),
)
.build()
@@ -819,7 +831,7 @@ fn layout(
)
.text_color(
data.config
- .get_color_unchecked(LapceTheme::EDITOR_FOREGROUND)
+ .get_color_unchecked(LapceTheme::LAPCE_PLUGIN_AUTHOR)
.clone(),
)
.build()
@@ -966,7 +978,9 @@ fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, _env: &Env) {
)
.text_color(
data.config
- .get_color_unchecked(LapceTheme::EDITOR_BACKGROUND)
+ .get_color_unchecked(
+ LapceTheme::LAPCE_BUTTON_PRIMARY_FOREGROUND,
+ )
.clone(),
)
.build()
@@ -983,7 +997,12 @@ fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, _env: &Env) {
button_y + self.line_height / 2.0,
))
.inflate(0.0, self.line_height / 2.0);
- ctx.fill(rect, &Color::rgb8(80, 161, 79));
+ ctx.fill(
+ rect,
+ data.config.get_color_unchecked(
+ LapceTheme::LAPCE_BUTTON_PRIMARY_BACKGROUND,
+ ),
+ );
self.status_rect = rect;
ctx.draw_text(
&button_text_layout,
diff --git a/lapce-ui/src/search.rs b/lapce-ui/src/search.rs
index 094788e8..4715a2e9 100644
--- a/lapce-ui/src/search.rs
+++ b/lapce-ui/src/search.rs
@@ -240,7 +240,7 @@ fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, env: &Env) {
ctx.fill(
&icon.rect,
data.config
- .get_color_unchecked(LapceTheme::LAPCE_ACTIVE_TAB),
+ .get_color_unchecked(LapceTheme::LAPCE_TAB_ACTIVE_UNDERLINE),
);
} else if icon.rect.contains(self.mouse_pos)
&& icon.icon != LapceIcons::SEARCH_CASE_SENSITIVE
diff --git a/lapce-ui/src/settings.rs b/lapce-ui/src/settings.rs
index 66277549..44b97fa4 100644
--- a/lapce-ui/src/settings.rs
+++ b/lapce-ui/src/settings.rs
@@ -1557,7 +1557,7 @@ fn layout(
}
};
if changed {
- let x = input.layout_rect().x1 + 10.0;
+ let x = input.layout_rect().x1 + input.layout_rect().height() + 15.0;
let y0 = input.layout_rect().y0;
let y1 = input.layout_rect().y1;
let rect = Rect::new(x, y0, x + reset_size.width + 20.0, y1);
@@ -1593,15 +1593,57 @@ fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, env: &Env) {
for (i, input) in self.inputs.iter_mut().enumerate() {
let text_layout = &self.text_layouts.as_ref().unwrap()[i];
+ let layout_rect = input.layout_rect();
ctx.draw_text(
text_layout,
Point::new(
0.0,
- input.layout_rect().y0
- + text_layout.y_offset(input.layout_rect().height()),
+ layout_rect.y0 + text_layout.y_offset(layout_rect.height()),
),
);
input.paint(ctx, data, env);
+ let preview_color_text = text_layout.text();
+ let preview_color = match self.kind {
+ ThemeKind::Base => data
+ .config
+ .color
+ .base
+ .get(preview_color_text)
+ .unwrap_or_else(|| {
+ data.config
+ .get_color_unchecked(LapceTheme::EDITOR_BACKGROUND)
+ }),
+ ThemeKind::UI => {
+ data.config.color.ui.get(preview_color_text).unwrap_or_else(
+ || {
+ data.config
+ .get_color_unchecked(LapceTheme::EDITOR_BACKGROUND)
+ },
+ )
+ }
+ ThemeKind::Syntax => data
+ .config
+ .color
+ .syntax
+ .get(preview_color_text)
+ .unwrap_or_else(|| {
+ data.config
+ .get_color_unchecked(LapceTheme::EDITOR_BACKGROUND)
+ }),
+ };
+ let color_rect = Rect::new(
+ layout_rect.x1 + 5.0,
+ layout_rect.y0,
+ layout_rect.x1 + 5.0 + layout_rect.height(),
+ layout_rect.y1,
+ )
+ .inflate(-0.5, -0.5);
+ ctx.stroke(
+ color_rect,
+ data.config.get_color_unchecked(LapceTheme::LAPCE_BORDER),
+ 1.0,
+ );
+ ctx.fill(color_rect.inflate(-0.5, -0.5), preview_color);
}
let reset_text = ctx
diff --git a/lapce-ui/src/source_control.rs b/lapce-ui/src/source_control.rs
index 8a0511fa..c0d51d4f 100644
--- a/lapce-ui/src/source_control.rs
+++ b/lapce-ui/src/source_control.rs
@@ -1,11 +1,10 @@
-use std::{path::PathBuf, sync::Arc};
+use std::sync::Arc;
use druid::{
- kurbo::BezPath,
piet::{Text, TextLayout as PietTextLayout, TextLayoutBuilder},
BoxConstraints, Command, Env, Event, EventCtx, LayoutCtx, LifeCycle,
- LifeCycleCtx, MouseButton, PaintCtx, Point, RenderContext, Size, Target,
- UpdateCtx, Widget, WidgetExt, WidgetId,
+ LifeCycleCtx, MouseButton, MouseEvent, PaintCtx, Point, Rect, RenderContext,
+ Size, Target, UpdateCtx, Widget, WidgetExt, WidgetId,
};
use lapce_data::{
command::{
@@ -85,7 +84,9 @@ pub fn new_source_control_panel(data: &LapceTabData) -> LapcePanel {
struct SourceControlFileList {
widget_id: WidgetId,
+ mouse_pos: Option,
mouse_down: Option,
+ line_rects: Vec,
line_height: f64,
}
@@ -93,7 +94,9 @@ impl SourceControlFileList {
pub fn new(widget_id: WidgetId) -> Self {
Self {
widget_id,
+ mouse_pos: None,
mouse_down: None,
+ line_rects: vec![],
line_height: 25.0,
}
}
@@ -105,6 +108,15 @@ pub fn request_focus(&self, ctx: &mut EventCtx, data: &mut LapceTabData) {
data.focus_area = FocusArea::Panel(PanelKind::SourceControl);
data.focus = Arc::new(self.widget_id);
}
+
+ fn icon_hit_test(&self, mouse_event: &MouseEvent) -> bool {
+ for rect in &self.line_rects {
+ if rect.contains(mouse_event.pos) {
+ return true;
+ }
+ }
+ false
+ }
}
impl Widget for SourceControlFileList {
@@ -120,8 +132,14 @@ fn event(
env: &Env,
) {
match event {
- Event::MouseMove(_mouse_event) => {
- ctx.set_cursor(&druid::Cursor::Pointer);
+ Event::MouseMove(mouse_event) => {
+ ctx.set_handled();
+ self.mouse_pos = Some(mouse_event.pos);
+ if self.icon_hit_test(mouse_event) {
+ ctx.set_cursor(&druid::Cursor::Pointer);
+ } else {
+ ctx.clear_cursor();
+ }
}
Event::MouseUp(mouse_event) => {
let y = mouse_event.pos.y;
@@ -325,19 +343,35 @@ fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, _env: &Env) {
let rect = ctx.region().bounding_box();
let start_line = (rect.y0 / self.line_height).floor() as usize;
let end_line = (rect.y1 / self.line_height).ceil() as usize;
+ self.line_rects = vec![];
for line in start_line..end_line {
if line >= diffs.len() {
break;
}
let y = self.line_height * line as f64;
+
+ let current_line = Size::new(ctx.size().width, self.line_height)
+ .to_rect()
+ .with_origin(Point::new(0.0, y));
+ self.line_rects.push(current_line);
+ if let Some(mouse_pos) = self.mouse_pos {
+ if current_line.contains(mouse_pos) {
+ ctx.fill(
+ current_line,
+ data.config.get_color_unchecked(LapceTheme::PANEL_CURRENT),
+ );
+ }
+ }
+
let (diff, checked) = diffs[line].clone();
- let mut path: PathBuf = diff.path().clone();
+ let mut path = diff.path().clone();
if let Some(workspace_path) = data.workspace.path.as_ref() {
path = path
.strip_prefix(workspace_path)
.unwrap_or(&path)
.to_path_buf();
}
+
{
let width = 13.0;
let height = 13.0;
@@ -346,26 +380,28 @@ fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, _env: &Env) {
(self.line_height - height) / 2.0 + y,
);
let rect = Size::new(width, height).to_rect().with_origin(origin);
- ctx.stroke(
- rect,
- data.config
- .get_color_unchecked(LapceTheme::LAPCE_ICON_ACTIVE),
- 1.0,
- );
if checked {
- let mut path = BezPath::new();
- path.move_to((origin.x + 3.0, origin.y + 7.0));
- path.line_to((origin.x + 6.0, origin.y + 9.5));
- path.line_to((origin.x + 10.0, origin.y + 3.0));
- ctx.stroke(
- path,
- data.config
- .get_color_unchecked(LapceTheme::LAPCE_ICON_ACTIVE),
- 2.0,
+ ctx.draw_svg(
+ &data.config.ui_svg(LapceIcons::SCM_CHANGE_ADD),
+ rect,
+ Some(
+ data.config
+ .get_color_unchecked(LapceTheme::LAPCE_ICON_ACTIVE),
+ ),
+ );
+ } else {
+ ctx.draw_svg(
+ &data.config.ui_svg(LapceIcons::SCM_CHANGE_REMOVE),
+ rect,
+ Some(
+ data.config
+ .get_color_unchecked(LapceTheme::LAPCE_ICON_ACTIVE),
+ ),
);
}
}
+
let svg_size = data.config.ui.icon_size() as f64;
let (svg, svg_color) = data.config.file_svg(&path);
let rect =
@@ -459,7 +495,6 @@ fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, _env: &Env) {
};
let svg = data.config.ui_svg(svg);
- let svg_size = 15.0;
let rect =
Size::new(svg_size, svg_size)
.to_rect()
@@ -468,7 +503,7 @@ fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, _env: &Env) {
line as f64 * self.line_height
+ (self.line_height - svg_size) / 2.0,
));
- ctx.draw_svg(&svg, rect, Some(&color.clone().with_alpha(0.9)));
+ ctx.draw_svg(&svg, rect, Some(color));
}
}
}
diff --git a/lapce-ui/src/status.rs b/lapce-ui/src/status.rs
index 7050878e..ed138204 100644
--- a/lapce-ui/src/status.rs
+++ b/lapce-ui/src/status.rs
@@ -440,8 +440,10 @@ fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, _env: &druid::Env)
for progress in data.progresses.iter() {
let mut text = progress.title.clone();
if let Some(message) = progress.message.as_ref() {
- text += ": ";
- text += message;
+ if text.len() + message.len() < 48 {
+ text += ": ";
+ text += message;
+ }
}
let text_layout = ctx
.text()
diff --git a/lapce-ui/src/tab.rs b/lapce-ui/src/tab.rs
index e9252f76..57f58b46 100644
--- a/lapce-ui/src/tab.rs
+++ b/lapce-ui/src/tab.rs
@@ -505,7 +505,7 @@ fn paint_drag_on_panel(&self, ctx: &mut PaintCtx, data: &LapceTabData) {
ctx.fill(
rect,
data.config.get_color_unchecked(
- LapceTheme::EDITOR_DRAG_DROP_BACKGROUND,
+ LapceTheme::EDITOR_DRAG_DROP_TAB_BACKGROUND,
),
);
break;