A simple CPU rendered GUI IDE experience.
apply underlining
| -rw-r--r-- | src/main.rs | 13 | ||||
| -rw-r--r-- | src/text.rs | 11 |
2 files changed, 24 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs index c45a9e4..21cdd8c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -486,6 +486,16 @@ pub(crate) fn entry(event_loop: EventLoop<()>) { (t_ox, 0), x, |(_c, _r), text, mut x| { + if let Some(LocationLink { + origin_selection_range: Some(r), .. + }) = def.result { _ = try { + let (x1, y1) = text.map_to_visual((r.start.character as _, r.start.line as _))?; + let (x2, y2) = text.map_to_visual((r.end.character as _, r.end.line as _))?; + x.get_simple((x1, y1), (x2, y2))?.iter_mut().for_each(|x| { + x.style.flags |= Style::UNDERLINE; + x.style.color = col!("#FFD173"); + }); + } } if let Some((lsp, p)) = lsp!() && let uri = Url::from_file_path(p).unwrap() && let Some(diag) = lsp.diagnostics.get(&uri, &lsp.diagnostics.guard()) { #[derive(Copy, Clone, Debug)] enum EType { @@ -892,6 +902,8 @@ pub(crate) fn entry(event_loop: EventLoop<()>) { }) { def.result = None; } + } else { + def.result = None; } if let Some((_, c)) = hovering.request && c == cursor_position { break 'out; @@ -943,6 +955,7 @@ hovering.request = (DropH::new(handle), cursor_position).into(); // }); } Some(Do::Hover) => { + def.result = None; hovering.result = None; window.request_redraw(); } diff --git a/src/text.rs b/src/text.rs index d8e4787..fd1f520 100644 --- a/src/text.rs +++ b/src/text.rs @@ -1672,6 +1672,17 @@ impl<'a> Output<'a> { // self.output.from_point(b), // ) } + + // oughtnt really be multiline + pub fn get_simple( + &mut self, + s: (usize, usize), + e: (usize, usize), + ) -> Option<&mut [Cell]> { + let s = self.from_point_global(self.translate(s)?); + let e = self.from_point_global(self.translate(e)?); + self.into.get_mut(s..e) + } // impl<'a> IndexMut<(usize, usize)> for Output<'a> { // fn index_mut(&mut self, p: (usize, usize)) -> &mut Self::Output { // let x = self.from_point_global(self.translate(p).unwrap()); |