diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index 7b138853197a9f2189537e18a2b608772d25d05a..8af043293e55a54313174ad2bac91d7657e69864 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -196,6 +196,7 @@ impl EditorElement { ) { let bounds = gutter_bounds.union_rect(text_bounds); let scroll_top = layout.snapshot.scroll_position().y() * layout.line_height; + let start_row = layout.snapshot.scroll_position().y() as u32; let editor = self.view(cx.app); let style = &self.settings.style; cx.scene.push_quad(Quad { @@ -240,6 +241,51 @@ impl EditorElement { } } } + + // Draw block backgrounds + for (ixs, block_style) in &layout.block_layouts { + let row = start_row + ixs.start; + let offset = vec2f(0., row as f32 * layout.line_height - scroll_top); + let height = ixs.len() as f32 * layout.line_height; + cx.scene.push_quad(Quad { + bounds: RectF::new( + text_bounds.origin() + offset, + vec2f(text_bounds.width(), height), + ), + background: block_style.background, + border: block_style + .border + .map_or(Default::default(), |color| Border { + width: 1., + color, + overlay: true, + top: true, + right: false, + bottom: true, + left: false, + }), + corner_radius: 0., + }); + cx.scene.push_quad(Quad { + bounds: RectF::new( + gutter_bounds.origin() + offset, + vec2f(gutter_bounds.width(), height), + ), + background: block_style.gutter_background, + border: block_style + .gutter_border + .map_or(Default::default(), |color| Border { + width: 1., + color, + overlay: true, + top: true, + right: false, + bottom: true, + left: false, + }), + corner_radius: 0., + }); + } } fn paint_gutter( @@ -360,30 +406,6 @@ impl EditorElement { } if let Some(visible_text_bounds) = bounds.intersection(visible_bounds) { - // Draw blocks - for (ixs, block_style) in &layout.block_layouts { - let row = start_row + ixs.start; - let origin = content_origin - + vec2f(-scroll_left, row as f32 * layout.line_height - scroll_top); - let height = ixs.len() as f32 * layout.line_height; - cx.scene.push_quad(Quad { - bounds: RectF::new(origin, vec2f(visible_text_bounds.width(), height)), - background: block_style.background, - border: block_style - .border - .map_or(Default::default(), |color| Border { - width: 1., - color, - overlay: true, - top: true, - right: false, - bottom: true, - left: false, - }), - corner_radius: 0., - }); - } - // Draw glyphs for (ix, line) in layout.line_layouts.iter().enumerate() { let row = start_row + ix as u32; diff --git a/crates/theme/src/lib.rs b/crates/theme/src/lib.rs index 8f48ebbc13b8a11ee5a44878466ba440d9c72663..baeaba2e6956f9f22c9749c2fd2d5555761a4758 100644 --- a/crates/theme/src/lib.rs +++ b/crates/theme/src/lib.rs @@ -262,6 +262,8 @@ pub struct InputEditorStyle { pub struct BlockStyle { pub background: Option, pub border: Option, + pub gutter_background: Option, + pub gutter_border: Option, } impl EditorStyle {