Vertically center linebox child element

Co-Authored-By: Nathan Sobo <nathan@zed.dev>
This commit is contained in:
Max Brunsfeld
2021-04-06 13:03:19 -07:00
co-authored by Nathan Sobo
parent 2a9e71d725
commit c632aab382
3 changed files with 13 additions and 22 deletions
+11 -20
View File
@@ -1,6 +1,6 @@
use crate::{
font_cache::FamilyId,
fonts::{FontId, Properties},
fonts::Properties,
geometry::vector::{vec2f, Vector2F},
AfterLayoutContext, Element, ElementBox, Event, EventContext, LayoutContext, PaintContext,
SizeConstraint,
@@ -25,7 +25,7 @@ impl LineBox {
}
impl Element for LineBox {
type LayoutState = Option<FontId>;
type LayoutState = f32;
type PaintState = ();
fn layout(
@@ -38,26 +38,20 @@ impl Element for LineBox {
.select_font(self.family_id, &self.font_properties)
{
Ok(font_id) => {
let line_height = ctx
.font_cache
.bounding_box(font_id, self.font_size)
.y()
.ceil();
let child_max = vec2f(
constraint.max.x(),
ctx.font_cache.ascent(font_id, self.font_size)
- ctx.font_cache.descent(font_id, self.font_size),
);
let line_height = ctx.font_cache.line_height(font_id, self.font_size);
let character_height = ctx.font_cache.ascent(font_id, self.font_size)
+ ctx.font_cache.descent(font_id, self.font_size);
let child_max = vec2f(constraint.max.x(), character_height);
let child_size = self.child.layout(
SizeConstraint::new(constraint.min.min(child_max), child_max),
ctx,
);
let size = vec2f(child_size.x(), line_height);
(size, Some(font_id))
(size, (line_height - character_height) / 2.)
}
Err(error) => {
log::error!("can't find font for LineBox: {}", error);
(constraint.min, None)
(constraint.min, 0.0)
}
}
}
@@ -74,14 +68,11 @@ impl Element for LineBox {
fn paint(
&mut self,
bounds: pathfinder_geometry::rect::RectF,
font_id: &mut Option<FontId>,
padding_top: &mut f32,
ctx: &mut PaintContext,
) -> Self::PaintState {
if let Some(font_id) = font_id {
let descent = ctx.font_cache.descent(*font_id, self.font_size);
self.child
.paint(bounds.origin() + vec2f(0.0, -descent), ctx);
}
self.child
.paint(bounds.origin() + vec2f(0., *padding_top), ctx);
}
fn dispatch_event(
+1 -1
View File
@@ -145,7 +145,7 @@ impl FontCache {
}
pub fn descent(&self, font_id: FontId, font_size: f32) -> f32 {
self.scale_metric(self.metric(font_id, |m| m.descent), font_id, font_size)
self.scale_metric(self.metric(font_id, |m| -m.descent), font_id, font_size)
}
pub fn scale_metric(&self, metric: f32, font_id: FontId, font_size: f32) -> f32 {
+1 -1
View File
@@ -17,7 +17,7 @@ impl Settings {
buffer_font_family: font_cache.load_family(&["Fira Code", "Monaco"])?,
buffer_font_size: 14.0,
tab_size: 4,
ui_font_family: font_cache.load_family(&["SF Pro Display", "Helvetica"])?,
ui_font_family: font_cache.load_family(&["SF Pro", "Helvetica"])?,
ui_font_size: 12.0,
})
}