From a866370dc1f9ea51a8ee485adbe5038712372417 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Tue, 7 Nov 2023 12:25:33 +0100 Subject: [PATCH] Paint lines --- crates/editor2/src/editor.rs | 23 +- crates/editor2/src/element.rs | 293 +++++++++----------- crates/gpui2/src/elements/text.rs | 2 +- crates/gpui2/src/style.rs | 6 +- crates/gpui2/src/styled.rs | 21 +- crates/gpui2/src/text_system/line_layout.rs | 12 - crates/theme2/src/theme2.rs | 6 +- crates/zed2/src/main.rs | 3 +- 8 files changed, 176 insertions(+), 190 deletions(-) diff --git a/crates/editor2/src/editor.rs b/crates/editor2/src/editor.rs index 4e15519b62f2362898758f3e3cbdfb083ebd9fbd..0db0d5dcd5b8f7410907ced0980dfc3e876c627e 100644 --- a/crates/editor2/src/editor.rs +++ b/crates/editor2/src/editor.rs @@ -37,8 +37,8 @@ use futures::FutureExt; use fuzzy::{StringMatch, StringMatchCandidate}; use gpui::{ div, px, AnyElement, AppContext, BackgroundExecutor, Context, Div, Element, EventEmitter, - FocusHandle, Hsla, Model, Pixels, Render, Styled, Subscription, Task, TextStyle, View, - ViewContext, VisualContext, WeakView, WindowContext, + FocusHandle, FontStyle, FontWeight, Hsla, Model, Pixels, Render, Styled, Subscription, Task, + TextStyle, View, ViewContext, VisualContext, WeakView, WindowContext, }; use highlight_matching_bracket::refresh_matching_bracket_highlights; use hover_popover::{hide_hover, HoverState}; @@ -81,7 +81,7 @@ use std::{ pub use sum_tree::Bias; use sum_tree::TreeMap; use text::Rope; -use theme::{ActiveTheme, PlayerColor, ThemeColors, ThemeVariant}; +use theme::{ActiveTheme, PlayerColor, ThemeColors, ThemeSettings, ThemeVariant}; use util::{post_inc, RangeExt, ResultExt, TryFutureExt}; use workspace::{ItemNavHistory, SplitDirection, ViewId, Workspace}; @@ -1882,7 +1882,7 @@ impl Editor { ) -> Self { // let editor_view_id = cx.view_id(); let style = cx.text_style(); - let font_size = style.font_size * cx.rem_size(); + let font_size = style.font_size.to_pixels(cx.rem_size()); let display_map = cx.build_model(|cx| { // todo!() // let settings = settings::get::(cx); @@ -9325,11 +9325,22 @@ impl Render for Editor { type Element = EditorElement; fn render(&mut self, cx: &mut ViewContext) -> Self::Element { + let settings = ThemeSettings::get_global(cx); + let text_style = TextStyle { + color: cx.theme().colors().text, + font_family: settings.buffer_font.family.clone(), + font_features: settings.buffer_font.features, + font_size: settings.buffer_font_size.into(), + font_weight: FontWeight::NORMAL, + font_style: FontStyle::Normal, + line_height: Default::default(), + underline: None, + }; EditorElement::new(EditorStyle { background: cx.theme().colors().editor, local_player: cx.theme().players().local(), - text: cx.text_style(), - line_height_scalar: 1., + text: text_style, + line_height_scalar: settings.buffer_line_height.value(), scrollbar_width: px(12.), }) } diff --git a/crates/editor2/src/element.rs b/crates/editor2/src/element.rs index 071c103de0e2c0db6123f1b7206252b148a7a599..4ad22599d23d8b83307c3b4da541ee214e98ff9d 100644 --- a/crates/editor2/src/element.rs +++ b/crates/editor2/src/element.rs @@ -612,7 +612,7 @@ impl EditorElement { fn paint_gutter( &mut self, bounds: Bounds, - layout: &mut LayoutState, + layout: &LayoutState, editor: &mut Editor, cx: &mut ViewContext, ) { @@ -672,7 +672,7 @@ impl EditorElement { fn paint_diff_hunks( bounds: Bounds, - layout: &mut LayoutState, + layout: &LayoutState, cx: &mut ViewContext, ) { // todo!() @@ -761,11 +761,10 @@ impl EditorElement { fn paint_text( &mut self, bounds: Bounds, - layout: &mut LayoutState, + layout: &LayoutState, editor: &mut Editor, cx: &mut ViewContext, ) { - let style = &self.style; let scroll_position = layout.position_map.snapshot.scroll_position(); let start_row = layout.visible_display_row_range.start; let scroll_top = scroll_position.y * layout.position_map.line_height; @@ -896,33 +895,21 @@ impl EditorElement { .chars_at(cursor_position) .next() .and_then(|(character, _)| { - let font_id = - cursor_row_layout.font_for_index(cursor_column)?; let text = character.to_string(); - - cx.text_system().layout_text( - &text, - cursor_row_layout.font_size, - &[TextRun { - len: text.len(), - font: todo!(), - color: todo!(), - underline: todo!(), - }], - None, - ); - Some(cx.text_layout_cache().layout_str( - &text, - cursor_row_layout.font_size, - &[( - text.chars().count(), - RunStyle { - font_id, - color: style.background, - underline: Default::default(), - }, - )], - )) + cx.text_system() + .layout_text( + &text, + cursor_row_layout.font_size, + &[TextRun { + len: text.len(), + font: self.style.text.font(), + color: self.style.background, + underline: None, + }], + None, + ) + .unwrap() + .pop() }) } else { None @@ -958,125 +945,123 @@ impl EditorElement { scroll_top, content_origin, scroll_left, - visible_text_bounds, whitespace_setting, &invisible_display_ranges, - visible_bounds, cx, ) } - cx.scene().push_layer(Some(bounds)); + // cx.scene().push_layer(Some(bounds)); for cursor in cursors { cursor.paint(content_origin, cx); } - cx.scene().pop_layer(); - - if let Some((position, context_menu)) = layout.context_menu.as_mut() { - cx.scene().push_stacking_context(None, None); - let cursor_row_layout = - &layout.position_map.line_layouts[(position.row() - start_row) as usize].line; - let x = cursor_row_layout.x_for_index(position.column() as usize) - scroll_left; - let y = (position.row() + 1) as f32 * layout.position_map.line_height - scroll_top; - let mut list_origin = content_origin + point(x, y); - let list_width = context_menu.size().x; - let list_height = context_menu.size().y; - - // Snap the right edge of the list to the right edge of the window if - // its horizontal bounds overflow. - if list_origin.x + list_width > cx.window_size().x { - list_origin.set_x((cx.window_size().x - list_width).max(0.)); - } - - if list_origin.y + list_height > bounds.max_y { - list_origin - .set_y(list_origin.y - layout.position_map.line_height - list_height); - } - - context_menu.paint( - list_origin, - Bounds::::from_points( - gpui::Point::::zero(), - point(f32::MAX, f32::MAX), - ), // Let content bleed outside of editor - editor, - cx, - ); + // cx.scene().pop_layer(); + + // if let Some((position, context_menu)) = layout.context_menu.as_mut() { + // cx.scene().push_stacking_context(None, None); + // let cursor_row_layout = + // &layout.position_map.line_layouts[(position.row() - start_row) as usize].line; + // let x = cursor_row_layout.x_for_index(position.column() as usize) - scroll_left; + // let y = (position.row() + 1) as f32 * layout.position_map.line_height - scroll_top; + // let mut list_origin = content_origin + point(x, y); + // let list_width = context_menu.size().x; + // let list_height = context_menu.size().y; + + // // Snap the right edge of the list to the right edge of the window if + // // its horizontal bounds overflow. + // if list_origin.x + list_width > cx.window_size().x { + // list_origin.set_x((cx.window_size().x - list_width).max(0.)); + // } - cx.scene().pop_stacking_context(); - } + // if list_origin.y + list_height > bounds.max_y { + // list_origin + // .set_y(list_origin.y - layout.position_map.line_height - list_height); + // } - if let Some((position, hover_popovers)) = layout.hover_popovers.as_mut() { - cx.scene().push_stacking_context(None, None); - - // This is safe because we check on layout whether the required row is available - let hovered_row_layout = - &layout.position_map.line_layouts[(position.row() - start_row) as usize].line; - - // Minimum required size: Take the first popover, and add 1.5 times the minimum popover - // height. This is the size we will use to decide whether to render popovers above or below - // the hovered line. - let first_size = hover_popovers[0].size(); - let height_to_reserve = first_size.y - + 1.5 * MIN_POPOVER_LINE_HEIGHT as f32 * layout.position_map.line_height; - - // Compute Hovered Point - let x = hovered_row_layout.x_for_index(position.column() as usize) - scroll_left; - let y = position.row() as f32 * layout.position_map.line_height - scroll_top; - let hovered_point = content_origin + point(x, y); - - if hovered_point.y - height_to_reserve > 0.0 { - // There is enough space above. Render popovers above the hovered point - let mut current_y = hovered_point.y; - for hover_popover in hover_popovers { - let size = hover_popover.size(); - let mut popover_origin = point(hovered_point.x, current_y - size.y); - - let x_out_of_bounds = bounds.max_x - (popover_origin.x + size.x); - if x_out_of_bounds < 0.0 { - popover_origin.set_x(popover_origin.x + x_out_of_bounds); - } + // context_menu.paint( + // list_origin, + // Bounds::::from_points( + // gpui::Point::::zero(), + // point(f32::MAX, f32::MAX), + // ), // Let content bleed outside of editor + // editor, + // cx, + // ); - hover_popover.paint( - popover_origin, - Bounds::::from_points( - gpui::Point::::zero(), - point(f32::MAX, f32::MAX), - ), // Let content bleed outside of editor - editor, - cx, - ); - - current_y = popover_origin.y - HOVER_POPOVER_GAP; - } - } else { - // There is not enough space above. Render popovers below the hovered point - let mut current_y = hovered_point.y + layout.position_map.line_height; - for hover_popover in hover_popovers { - let size = hover_popover.size(); - let mut popover_origin = point(hovered_point.x, current_y); - - let x_out_of_bounds = bounds.max_x - (popover_origin.x + size.x); - if x_out_of_bounds < 0.0 { - popover_origin.set_x(popover_origin.x + x_out_of_bounds); - } + // cx.scene().pop_stacking_context(); + // } - hover_popover.paint( - popover_origin, - Bounds::::from_points( - gpui::Point::::zero(), - point(f32::MAX, f32::MAX), - ), // Let content bleed outside of editor - editor, - cx, - ); - - current_y = popover_origin.y + size.y + HOVER_POPOVER_GAP; - } - } + // if let Some((position, hover_popovers)) = layout.hover_popovers.as_mut() { + // cx.scene().push_stacking_context(None, None); + + // // This is safe because we check on layout whether the required row is available + // let hovered_row_layout = + // &layout.position_map.line_layouts[(position.row() - start_row) as usize].line; + + // // Minimum required size: Take the first popover, and add 1.5 times the minimum popover + // // height. This is the size we will use to decide whether to render popovers above or below + // // the hovered line. + // let first_size = hover_popovers[0].size(); + // let height_to_reserve = first_size.y + // + 1.5 * MIN_POPOVER_LINE_HEIGHT as f32 * layout.position_map.line_height; + + // // Compute Hovered Point + // let x = hovered_row_layout.x_for_index(position.column() as usize) - scroll_left; + // let y = position.row() as f32 * layout.position_map.line_height - scroll_top; + // let hovered_point = content_origin + point(x, y); + + // if hovered_point.y - height_to_reserve > 0.0 { + // // There is enough space above. Render popovers above the hovered point + // let mut current_y = hovered_point.y; + // for hover_popover in hover_popovers { + // let size = hover_popover.size(); + // let mut popover_origin = point(hovered_point.x, current_y - size.y); + + // let x_out_of_bounds = bounds.max_x - (popover_origin.x + size.x); + // if x_out_of_bounds < 0.0 { + // popover_origin.set_x(popover_origin.x + x_out_of_bounds); + // } + + // hover_popover.paint( + // popover_origin, + // Bounds::::from_points( + // gpui::Point::::zero(), + // point(f32::MAX, f32::MAX), + // ), // Let content bleed outside of editor + // editor, + // cx, + // ); + + // current_y = popover_origin.y - HOVER_POPOVER_GAP; + // } + // } else { + // // There is not enough space above. Render popovers below the hovered point + // let mut current_y = hovered_point.y + layout.position_map.line_height; + // for hover_popover in hover_popovers { + // let size = hover_popover.size(); + // let mut popover_origin = point(hovered_point.x, current_y); + + // let x_out_of_bounds = bounds.max_x - (popover_origin.x + size.x); + // if x_out_of_bounds < 0.0 { + // popover_origin.set_x(popover_origin.x + x_out_of_bounds); + // } + + // hover_popover.paint( + // popover_origin, + // Bounds::::from_points( + // gpui::Point::::zero(), + // point(f32::MAX, f32::MAX), + // ), // Let content bleed outside of editor + // editor, + // cx, + // ); + + // current_y = popover_origin.y + size.y + HOVER_POPOVER_GAP; + // } + // } - cx.scene().pop_stacking_context(); - } + // cx.scene().pop_stacking_context(); + // } }) } @@ -1369,7 +1354,7 @@ impl EditorElement { fn column_pixels(&self, column: usize, cx: &ViewContext) -> Pixels { let style = &self.style; - let font_size = style.text.font_size * cx.rem_size(); + let font_size = style.text.font_size.to_pixels(cx.rem_size()); let layout = cx .text_system() .layout_text( @@ -1478,7 +1463,7 @@ impl EditorElement { Vec>, Vec>, ) { - let font_size = self.style.text.font_size * cx.rem_size(); + let font_size = self.style.text.font_size.to_pixels(cx.rem_size()); let include_line_numbers = snapshot.mode == EditorMode::Full; let mut line_number_layouts = Vec::with_capacity(rows.len()); let mut fold_statuses = Vec::with_capacity(rows.len()); @@ -1555,8 +1540,8 @@ impl EditorElement { } // When the editor is empty and unfocused, then show the placeholder. - if snapshot.is_empty { - let font_size = self.style.text.font_size * cx.rem_size(); + if snapshot.is_empty() { + let font_size = self.style.text.font_size.to_pixels(cx.rem_size()); let placeholder_color = cx.theme().styles.colors.text_placeholder; let placeholder_text = snapshot.placeholder_text(); let placeholder_lines = placeholder_text @@ -1615,7 +1600,7 @@ impl EditorElement { let snapshot = editor.snapshot(cx); let style = self.style.clone(); let font_id = cx.text_system().font_id(&style.text.font()).unwrap(); - let font_size = style.text.font_size * cx.rem_size(); + let font_size = style.text.font_size.to_pixels(cx.rem_size()); let line_height = (font_size * style.line_height_scalar).round(); let em_width = cx .text_system() @@ -1716,7 +1701,7 @@ impl EditorElement { .anchor_before(DisplayPoint::new(start_row, 0).to_offset(&snapshot, Bias::Left)) }; let end_anchor = if end_row > max_row { - Anchor::max + Anchor::max() } else { snapshot .buffer_snapshot @@ -1847,7 +1832,7 @@ impl EditorElement { (is_singleton && scrollbar_settings.git_diff && snapshot.buffer_snapshot.has_git_diffs()) || // Selections - (is_singleton && scrollbar_settings.selections && !highlighted_ranges.is_empty) + (is_singleton && scrollbar_settings.selections && !highlighted_ranges.is_empty()) // Scrollmanager || editor.scroll_manager.scrollbars_visible() } @@ -1902,14 +1887,14 @@ impl EditorElement { let line_layouts = self.layout_lines(start_row..end_row, &line_number_layouts, &snapshot, cx); for line_with_invisibles in &line_layouts { - if line_with_invisibles.line.width() > max_visible_line_width { - max_visible_line_width = line_with_invisibles.line.width(); + if line_with_invisibles.line.width > max_visible_line_width { + max_visible_line_width = line_with_invisibles.line.width; } } let longest_line_width = layout_line(snapshot.longest_row(), &snapshot, &style, cx) .unwrap() - .width(); + .width; let scroll_width = longest_line_width.max(max_visible_line_width) + overscroll.width; // todo!("blocks") // let (scroll_width, blocks) = self.layout_blocks( @@ -2373,7 +2358,7 @@ impl LineWithInvisibles { let mut non_whitespace_added = false; let mut row = 0; let mut line_exceeded_max_len = false; - let font_size = text_style.font_size * cx.rem_size(); + let font_size = text_style.font_size.to_pixels(cx.rem_size()); for highlighted_chunk in chunks.chain([HighlightedChunk { chunk: "\n", @@ -2400,7 +2385,7 @@ impl LineWithInvisibles { } } - if !line_chunk.is_empty && !line_exceeded_max_len { + if !line_chunk.is_empty() && !line_exceeded_max_len { let text_style = if let Some(style) = highlighted_chunk.style { text_style .clone() @@ -2473,7 +2458,6 @@ impl LineWithInvisibles { scroll_top: Pixels, content_origin: gpui::Point, scroll_left: Pixels, - visible_text_bounds: Bounds, whitespace_setting: ShowWhitespaceSetting, selection_ranges: &[Range], cx: &mut ViewContext, @@ -2525,9 +2509,8 @@ impl LineWithInvisibles { }; let x_offset = self.line.x_for_index(token_offset); - let invisible_offset = (layout.position_map.em_width - invisible_symbol.width()) - .max(Pixels::from(0.0)) - / 2.0; + let invisible_offset = + (layout.position_map.em_width - invisible_symbol.width).max(Pixels::ZERO) / 2.0; let origin = content_origin + gpui::point(-scroll_left + x_offset + invisible_offset, line_y); @@ -2600,9 +2583,9 @@ impl Element for EditorElement { self.paint_background(gutter_bounds, text_bounds, &layout, cx); if layout.gutter_size.width > Pixels::ZERO { - self.paint_gutter(gutter_bounds, layout, editor, cx); + self.paint_gutter(gutter_bounds, &layout, editor, cx); } - self.paint_text(text_bounds, layout, editor, cx); + self.paint_text(text_bounds, &layout, editor, cx); }); } } @@ -3342,7 +3325,7 @@ fn layout_line( .text_system() .layout_text( &line, - style.text.font_size * cx.rem_size(), + style.text.font_size.to_pixels(cx.rem_size()), &[TextRun { len: snapshot.line_len(row) as usize, font: style.text.font(), @@ -3475,7 +3458,7 @@ impl HighlightedRange { bounds: Bounds, cx: &mut WindowContext, ) { - if lines.is_empty { + if lines.is_empty() { return; } diff --git a/crates/gpui2/src/elements/text.rs b/crates/gpui2/src/elements/text.rs index 4bc37054902653a85f931d82354183edc9142fe3..76c587d22f3e641c248f38e79a96b2651aa7ab43 100644 --- a/crates/gpui2/src/elements/text.rs +++ b/crates/gpui2/src/elements/text.rs @@ -74,7 +74,7 @@ impl Element for Text { ) -> LayoutId { let text_system = cx.text_system().clone(); let text_style = cx.text_style(); - let font_size = text_style.font_size * cx.rem_size(); + let font_size = text_style.font_size.to_pixels(cx.rem_size()); let line_height = text_style .line_height .to_pixels(font_size.into(), cx.rem_size()); diff --git a/crates/gpui2/src/style.rs b/crates/gpui2/src/style.rs index b30d4aa00250f981f48301f6e3c8007b55b1bb36..d6aad7e68e69c82d94fad4d176b9f4fb7f4757fd 100644 --- a/crates/gpui2/src/style.rs +++ b/crates/gpui2/src/style.rs @@ -1,7 +1,7 @@ use crate::{ black, phi, point, rems, AbsoluteLength, BorrowAppContext, BorrowWindow, Bounds, ContentMask, Corners, CornersRefinement, DefiniteLength, Edges, EdgesRefinement, Font, FontFeatures, - FontStyle, FontWeight, Hsla, Length, Pixels, Point, PointRefinement, Rems, Result, Rgba, + FontStyle, FontWeight, Hsla, Length, Pixels, Point, PointRefinement, Result, Rgba, SharedString, Size, SizeRefinement, Styled, TextRun, ViewContext, WindowContext, }; use refineable::{Cascade, Refineable}; @@ -121,7 +121,7 @@ pub struct TextStyle { pub color: Hsla, pub font_family: SharedString, pub font_features: FontFeatures, - pub font_size: Rems, + pub font_size: AbsoluteLength, pub line_height: DefiniteLength, pub font_weight: FontWeight, pub font_style: FontStyle, @@ -134,7 +134,7 @@ impl Default for TextStyle { color: black(), font_family: "Helvetica".into(), // todo!("Get a font we know exists on the system") font_features: FontFeatures::default(), - font_size: rems(1.), + font_size: rems(1.).into(), line_height: phi(), font_weight: FontWeight::default(), font_style: FontStyle::default(), diff --git a/crates/gpui2/src/styled.rs b/crates/gpui2/src/styled.rs index 1eed74f0969a437ae3827815345b10962091f6fb..746211325acbc8e2e332d318638615cca141ce4d 100644 --- a/crates/gpui2/src/styled.rs +++ b/crates/gpui2/src/styled.rs @@ -1,6 +1,7 @@ use crate::{ - self as gpui2, hsla, point, px, relative, rems, AlignItems, DefiniteLength, Display, Fill, - FlexDirection, Hsla, JustifyContent, Length, Position, Rems, SharedString, StyleRefinement, + self as gpui2, hsla, point, px, relative, rems, AbsoluteLength, AlignItems, DefiniteLength, + Display, Fill, FlexDirection, Hsla, JustifyContent, Length, Position, SharedString, + StyleRefinement, }; use crate::{BoxShadow, TextStyleRefinement}; use smallvec::smallvec; @@ -384,7 +385,7 @@ pub trait Styled { self } - fn text_size(mut self, size: impl Into) -> Self + fn text_size(mut self, size: impl Into) -> Self where Self: Sized, { @@ -400,7 +401,7 @@ pub trait Styled { { self.text_style() .get_or_insert_with(Default::default) - .font_size = Some(rems(0.75)); + .font_size = Some(rems(0.75).into()); self } @@ -410,7 +411,7 @@ pub trait Styled { { self.text_style() .get_or_insert_with(Default::default) - .font_size = Some(rems(0.875)); + .font_size = Some(rems(0.875).into()); self } @@ -420,7 +421,7 @@ pub trait Styled { { self.text_style() .get_or_insert_with(Default::default) - .font_size = Some(rems(1.0)); + .font_size = Some(rems(1.0).into()); self } @@ -430,7 +431,7 @@ pub trait Styled { { self.text_style() .get_or_insert_with(Default::default) - .font_size = Some(rems(1.125)); + .font_size = Some(rems(1.125).into()); self } @@ -440,7 +441,7 @@ pub trait Styled { { self.text_style() .get_or_insert_with(Default::default) - .font_size = Some(rems(1.25)); + .font_size = Some(rems(1.25).into()); self } @@ -450,7 +451,7 @@ pub trait Styled { { self.text_style() .get_or_insert_with(Default::default) - .font_size = Some(rems(1.5)); + .font_size = Some(rems(1.5).into()); self } @@ -460,7 +461,7 @@ pub trait Styled { { self.text_style() .get_or_insert_with(Default::default) - .font_size = Some(rems(1.875)); + .font_size = Some(rems(1.875).into()); self } diff --git a/crates/gpui2/src/text_system/line_layout.rs b/crates/gpui2/src/text_system/line_layout.rs index a310c32cd1f369ed5d6ef3e579ef45c1fdd0d4be..1b5e28c95836518da5ddbb16262a295ae698a2ff 100644 --- a/crates/gpui2/src/text_system/line_layout.rs +++ b/crates/gpui2/src/text_system/line_layout.rs @@ -82,18 +82,6 @@ impl LineLayout { self.width } - pub fn font_for_index(&self, index: usize) -> Option { - for run in &self.runs { - for glyph in &run.glyphs { - if glyph.index >= index { - return Some(run.font_id); - } - } - } - - None - } - fn compute_wrap_boundaries( &self, text: &str, diff --git a/crates/theme2/src/theme2.rs b/crates/theme2/src/theme2.rs index dfd0e4b3c8de78d5cd646f8578fbbbba277a2a49..e2a3885e215b44811288d15ab82d6eb3d5e05f5c 100644 --- a/crates/theme2/src/theme2.rs +++ b/crates/theme2/src/theme2.rs @@ -6,6 +6,8 @@ mod scale; mod settings; mod syntax; +use std::sync::Arc; + use ::settings::Settings; pub use colors::*; pub use default_colors::*; @@ -29,11 +31,11 @@ pub fn init(cx: &mut AppContext) { } pub trait ActiveTheme { - fn theme(&self) -> &ThemeVariant; + fn theme(&self) -> &Arc; } impl ActiveTheme for AppContext { - fn theme(&self) -> &ThemeVariant { + fn theme(&self) -> &Arc { &ThemeSettings::get_global(self).active_theme } } diff --git a/crates/zed2/src/main.rs b/crates/zed2/src/main.rs index 79ba132e4ffedaa275d1c3cbdb64cf3692970b13..2b44c9ddc467df2400561c0230c69a9eb96a5c02 100644 --- a/crates/zed2/src/main.rs +++ b/crates/zed2/src/main.rs @@ -38,6 +38,7 @@ use std::{ thread, time::{SystemTime, UNIX_EPOCH}, }; +use theme::ActiveTheme; use util::{ async_maybe, channel::{parse_zed_link, ReleaseChannel, RELEASE_CHANNEL}, @@ -164,7 +165,7 @@ fn main() { // .detach(); // watch_file_types(fs.clone(), cx); - // languages.set_theme(theme::current(cx).clone()); + languages.set_theme(cx.theme().clone()); // cx.observe_global::({ // let languages = languages.clone(); // move |cx| languages.set_theme(theme::current(cx).clone())