diff --git a/gpui/examples/text.rs b/gpui/examples/text.rs index 315ed20f25..599a1a25af 100644 --- a/gpui/examples/text.rs +++ b/gpui/examples/text.rs @@ -1,11 +1,10 @@ use gpui::{ + color::ColorU, fonts::{Properties, Weight}, platform::{current as platform, Runner}, - scene::Glyph, - Element as _, + Border, Element as _, Quad, }; use log::LevelFilter; -use pathfinder_color::ColorU; use simplelog::SimpleLogger; fn main() { @@ -15,29 +14,29 @@ fn main() { platform::runner() .on_finish_launching(move || { app.platform().activate(true); - app.add_window(|_| View); + app.add_window(|_| TextView); }) .run(); } -struct View; -struct Element; +struct TextView; +struct TextElement; -impl gpui::Entity for View { +impl gpui::Entity for TextView { type Event = (); } -impl gpui::View for View { +impl gpui::View for TextView { fn ui_name() -> &'static str { - "view" + "View" } fn render<'a>(&self, app: &gpui::AppContext) -> gpui::ElementBox { - Element.boxed() + TextElement.boxed() } } -impl gpui::Element for Element { +impl gpui::Element for TextElement { type LayoutState = (); type PaintState = (); @@ -45,27 +44,27 @@ impl gpui::Element for Element { fn layout( &mut self, constraint: gpui::SizeConstraint, - ctx: &mut gpui::LayoutContext, + _: &mut gpui::LayoutContext, ) -> (pathfinder_geometry::vector::Vector2F, Self::LayoutState) { (constraint.max, ()) } fn after_layout( &mut self, - size: pathfinder_geometry::vector::Vector2F, - layout: &mut Self::LayoutState, - ctx: &mut gpui::AfterLayoutContext, + _: pathfinder_geometry::vector::Vector2F, + _: &mut Self::LayoutState, + _: &mut gpui::AfterLayoutContext, ) { } fn paint( &mut self, bounds: pathfinder_geometry::rect::RectF, - layout: &mut Self::LayoutState, + _: &mut Self::LayoutState, ctx: &mut gpui::PaintContext, ) -> Self::PaintState { - let font_size = 18.; - let family = ctx.font_cache.load_family(&["Fira Code"]).unwrap(); + let font_size = 12.; + let family = ctx.font_cache.load_family(&["SF Pro Display"]).unwrap(); let normal = ctx .font_cache .select_font(family, &Default::default()) @@ -81,32 +80,39 @@ impl gpui::Element for Element { ) .unwrap(); + let text = "Hello world!"; let line = ctx.text_layout_cache.layout_str( - "xxXX", + text, font_size, - &[(0..1, normal), (1..2, bold), (2..3, normal), (3..4, bold)], + &[ + (0..1, normal), + (1..2, bold), + (2..3, normal), + (3..4, bold), + (4..text.len(), normal), + ], ); - for run in line.runs { - for glyph in run.glyphs { - ctx.scene.push_glyph(Glyph { - font_id: run.font_id, - font_size, - id: glyph.id, - origin: glyph.position, - color: ColorU::black(), - }); - } - } + ctx.scene.push_quad(Quad { + bounds: bounds, + background: Some(ColorU::white()), + ..Default::default() + }); + line.paint( + bounds.origin(), + bounds, + &[(0..text.len(), ColorU::black())], + ctx, + ); } fn dispatch_event( &mut self, - event: &gpui::Event, - bounds: pathfinder_geometry::rect::RectF, - layout: &mut Self::LayoutState, - paint: &mut Self::PaintState, - ctx: &mut gpui::EventContext, + _: &gpui::Event, + _: pathfinder_geometry::rect::RectF, + _: &mut Self::LayoutState, + _: &mut Self::PaintState, + _: &mut gpui::EventContext, ) -> bool { false }