WIP: Try rendering underlines after all other quads

I thought this would allow underlines to show up in tabs, but it doesn't seem to be working.
This commit is contained in:
Nathan Sobo
2021-09-06 16:57:58 -06:00
parent 9346aa300d
commit 6323e8cc59
3 changed files with 23 additions and 6 deletions
+6 -4
View File
@@ -396,11 +396,13 @@ impl Renderer {
drawable_size: Vector2F,
command_encoder: &metal::RenderCommandEncoderRef,
) {
if layer.quads().is_empty() {
if layer.quads().is_empty() && layer.underlines().is_empty() {
return;
}
align_offset(offset);
let next_offset = *offset + layer.quads().len() * mem::size_of::<shaders::GPUIQuad>();
let next_offset = *offset
+ (layer.quads().len() + layer.underlines().len())
* mem::size_of::<shaders::GPUIQuad>();
assert!(
next_offset <= INSTANCE_BUFFER_SIZE,
"instance buffer exhausted"
@@ -430,7 +432,7 @@ impl Renderer {
(self.instances.contents() as *mut u8).offset(*offset as isize)
as *mut shaders::GPUIQuad
};
for (ix, quad) in layer.quads().iter().enumerate() {
for (ix, quad) in layer.quads().iter().chain(layer.underlines()).enumerate() {
let bounds = quad.bounds * scene.scale_factor();
let border_width = quad.border.width * scene.scale_factor();
let shader_quad = shaders::GPUIQuad {
@@ -456,7 +458,7 @@ impl Renderer {
metal::MTLPrimitiveType::Triangle,
0,
6,
layer.quads().len() as u64,
(layer.quads().len() + layer.underlines().len()) as u64,
);
*offset = next_offset;
}
+14
View File
@@ -24,6 +24,7 @@ struct StackingContext {
pub struct Layer {
clip_bounds: Option<RectF>,
quads: Vec<Quad>,
underlines: Vec<Quad>,
shadows: Vec<Shadow>,
glyphs: Vec<Glyph>,
icons: Vec<Icon>,
@@ -165,6 +166,10 @@ impl Scene {
self.active_layer().push_quad(quad)
}
pub fn push_underline(&mut self, underline: Quad) {
self.active_layer().push_underline(underline)
}
pub fn push_shadow(&mut self, shadow: Shadow) {
self.active_layer().push_shadow(shadow)
}
@@ -234,6 +239,7 @@ impl Layer {
Self {
clip_bounds,
quads: Vec::new(),
underlines: Vec::new(),
shadows: Vec::new(),
glyphs: Vec::new(),
icons: Vec::new(),
@@ -253,6 +259,14 @@ impl Layer {
self.quads.as_slice()
}
fn push_underline(&mut self, underline: Quad) {
self.underlines.push(underline);
}
pub fn underlines(&self) -> &[Quad] {
self.underlines.as_slice()
}
fn push_shadow(&mut self, shadow: Shadow) {
self.shadows.push(shadow);
}
+3 -2
View File
@@ -271,7 +271,7 @@ impl Line {
if let Some((run_len, run_color, run_underlined)) = style_runs.next() {
if let Some(underline_origin) = underline_start {
if !*run_underlined || *run_color != color {
cx.scene.push_quad(scene::Quad {
cx.scene.push_underline(scene::Quad {
bounds: RectF::from_points(
underline_origin,
glyph_origin + vec2f(0., 1.),
@@ -307,7 +307,8 @@ impl Line {
if let Some(underline_start) = underline_start.take() {
let line_end = origin + baseline_offset + vec2f(self.layout.width, 0.);
cx.scene.push_quad(scene::Quad {
cx.scene.push_underline(scene::Quad {
bounds: RectF::from_points(underline_start, line_end + vec2f(0., 1.)),
background: Some(color),
border: Default::default(),