Display squiggly underlines underneath text with diagnostics
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
This commit is contained in:
parent
52594fe250
commit
b9b255652f
7 changed files with 119 additions and 72 deletions
|
@ -6,7 +6,7 @@ use crate::{
|
|||
vector::{vec2f, vec2i, Vector2F},
|
||||
},
|
||||
platform,
|
||||
scene::{Glyph, Icon, Image, Layer, Quad, Scene, Shadow},
|
||||
scene::{Glyph, Icon, Image, Layer, Quad, Scene, Shadow, Underline},
|
||||
};
|
||||
use cocoa::foundation::NSUInteger;
|
||||
use metal::{MTLPixelFormat, MTLResourceOptions, NSRange};
|
||||
|
@ -334,6 +334,13 @@ impl Renderer {
|
|||
drawable_size,
|
||||
command_encoder,
|
||||
);
|
||||
self.render_underlines(
|
||||
layer.underlines(),
|
||||
scale_factor,
|
||||
offset,
|
||||
drawable_size,
|
||||
command_encoder,
|
||||
);
|
||||
self.render_sprites(
|
||||
layer.glyphs(),
|
||||
layer.icons(),
|
||||
|
@ -349,13 +356,6 @@ impl Renderer {
|
|||
drawable_size,
|
||||
command_encoder,
|
||||
);
|
||||
self.render_underlines(
|
||||
layer.underlines(),
|
||||
scale_factor,
|
||||
offset,
|
||||
drawable_size,
|
||||
command_encoder,
|
||||
);
|
||||
}
|
||||
|
||||
command_encoder.end_encoding();
|
||||
|
@ -834,7 +834,7 @@ impl Renderer {
|
|||
|
||||
fn render_underlines(
|
||||
&mut self,
|
||||
underlines: &[Quad],
|
||||
underlines: &[Underline],
|
||||
scale_factor: f32,
|
||||
offset: &mut usize,
|
||||
drawable_size: Vector2F,
|
||||
|
@ -874,19 +874,22 @@ impl Renderer {
|
|||
(self.instances.contents() as *mut u8).offset(*offset as isize)
|
||||
as *mut shaders::GPUIUnderline
|
||||
};
|
||||
for (ix, quad) in underlines.iter().enumerate() {
|
||||
let bounds = quad.bounds * scale_factor;
|
||||
let shader_quad = shaders::GPUIUnderline {
|
||||
origin: bounds.origin().round().to_float2(),
|
||||
size: bounds.size().round().to_float2(),
|
||||
thickness: 1. * scale_factor,
|
||||
color: quad
|
||||
.background
|
||||
.unwrap_or(Color::transparent_black())
|
||||
.to_uchar4(),
|
||||
for (ix, underline) in underlines.iter().enumerate() {
|
||||
let origin = underline.origin * scale_factor;
|
||||
let mut height = underline.thickness;
|
||||
if underline.squiggly {
|
||||
height *= 3.;
|
||||
}
|
||||
let size = vec2f(underline.width, height) * scale_factor;
|
||||
let shader_underline = shaders::GPUIUnderline {
|
||||
origin: origin.round().to_float2(),
|
||||
size: size.round().to_float2(),
|
||||
thickness: underline.thickness * scale_factor,
|
||||
color: underline.color.to_uchar4(),
|
||||
squiggly: underline.squiggly as u8,
|
||||
};
|
||||
unsafe {
|
||||
*(buffer_contents.offset(ix as isize)) = shader_quad;
|
||||
*(buffer_contents.offset(ix as isize)) = shader_underline;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue