Add alignment parameter to set_text (#419)

* add alignment parameter to set_text

* Fix doc comment
This commit is contained in:
Erik McClure 2025-09-07 11:40:42 -07:00 committed by GitHub
parent 750e1a4dd1
commit 3c1f6c9e8a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 30 additions and 11 deletions

View file

@ -26,7 +26,7 @@ fn layout(c: &mut Criterion) {
let mut run_on_text = |text: &str| {
buffer.lines.clear();
buffer.set_text(&mut fs, text, &ct::Attrs::new(), *shape);
buffer.set_text(&mut fs, text, &ct::Attrs::new(), *shape, None);
buffer.shape_until_scroll(&mut fs, false);
};

View file

@ -16,6 +16,7 @@ fn bench_ascii_fast_path(c: &mut Criterion) {
black_box(&ascii_text),
&ct::Attrs::new(),
ct::Shaping::Advanced,
None,
);
buffer.shape_until_scroll(&mut fs, false);
});
@ -36,6 +37,7 @@ fn bench_bidi_processing(c: &mut Criterion) {
black_box(&bidi_text),
&ct::Attrs::new(),
ct::Shaping::Advanced,
None,
);
buffer.shape_until_scroll(&mut fs, false);
});
@ -56,6 +58,7 @@ fn bench_layout_heavy(c: &mut Criterion) {
black_box(&layout_text),
&ct::Attrs::new(),
ct::Shaping::Advanced,
None,
);
buffer.shape_until_scroll(&mut fs, false);
});
@ -81,6 +84,7 @@ fn bench_combined_stress(c: &mut Criterion) {
black_box(&stress_text),
&ct::Attrs::new(),
ct::Shaping::Advanced,
None,
);
buffer.shape_until_scroll(&mut fs, false);
});

View file

@ -31,7 +31,7 @@ fn main() {
let attrs = Attrs::new().family(Family::Monospace);
match fs::read_to_string(&path) {
Ok(text) => buffer.set_text(&text, &attrs, Shaping::Advanced),
Ok(text) => buffer.set_text(&text, &attrs, Shaping::Advanced, None),
Err(err) => {
log::error!("failed to load {:?}: {}", path, err);
}

View file

@ -36,7 +36,7 @@ fn main() {
let text = std::env::args()
.nth(1)
.unwrap_or(" Hi, Rust! 🦀 ".to_string());
buffer.set_text(&text, &attrs, Shaping::Advanced);
buffer.set_text(&text, &attrs, Shaping::Advanced, None);
// Perform shaping as desired
buffer.shape_until_scroll(true);

View file

@ -271,7 +271,7 @@ impl Buffer {
/// Will panic if `metrics.line_height` is zero.
pub fn new(font_system: &mut FontSystem, metrics: Metrics) -> Self {
let mut buffer = Self::new_empty(metrics);
buffer.set_text(font_system, "", &Attrs::new(), Shaping::Advanced);
buffer.set_text(font_system, "", &Attrs::new(), Shaping::Advanced, None);
buffer
}
@ -679,6 +679,7 @@ impl Buffer {
text: &str,
attrs: &Attrs,
shaping: Shaping,
alignment: Option<Align>,
) {
self.lines.clear();
for (range, ending) in LineIter::new(text) {
@ -697,6 +698,13 @@ impl Buffer {
shaping,
));
}
if alignment.is_some() {
self.lines.iter_mut().for_each(|line| {
line.set_align(alignment);
});
}
self.scroll = Scroll::default();
self.shape_until_scroll(font_system, false);
}
@ -1424,8 +1432,15 @@ impl BorrowedWithFontSystem<'_, Buffer> {
}
/// Set text of buffer, using provided attributes for each line by default
pub fn set_text(&mut self, text: &str, attrs: &Attrs, shaping: Shaping) {
self.inner.set_text(self.font_system, text, attrs, shaping);
pub fn set_text(
&mut self,
text: &str,
attrs: &Attrs,
shaping: Shaping,
alignment: Option<Align>,
) {
self.inner
.set_text(self.font_system, text, attrs, shaping, alignment);
}
/// Set text of buffer, using an iterator of styled spans (pairs of text and attributes)

View file

@ -125,7 +125,7 @@ impl<'syntax_system, 'buffer> SyntaxEditor<'syntax_system, 'buffer> {
let text = fs::read_to_string(path)?;
self.editor.with_buffer_mut(|buffer| {
buffer.set_text(font_system, &text, &attrs, Shaping::Advanced);
buffer.set_text(font_system, &text, &attrs, Shaping::Advanced, None);
});
//TODO: re-use text

View file

@ -36,7 +36,7 @@
//! let attrs = Attrs::new();
//!
//! // Add some text!
//! buffer.set_text("Hello, Rust! 🦀\n", &attrs, Shaping::Advanced);
//! buffer.set_text("Hello, Rust! 🦀\n", &attrs, Shaping::Advanced, None);
//!
//! // Perform shaping as desired
//! buffer.shape_until_scroll(true);

View file

@ -92,7 +92,7 @@ impl DrawTestCfg {
Some((self.canvas_width - margins * 2) as f32),
Some((self.canvas_height - margins * 2) as f32),
);
buffer.set_text(&self.text, &self.font.as_attrs(), Shaping::Advanced);
buffer.set_text(&self.text, &self.font.as_attrs(), Shaping::Advanced, None);
buffer.shape_until_scroll(true);
// Black

View file

@ -105,7 +105,7 @@ fn wrap_extra_line() {
// Add some text!
buffer.set_wrap(Wrap::Word);
buffer.set_text("Lorem ipsum dolor sit amet, qui minim labore adipisicing\n\nweeewoooo minim sint cillum sint consectetur cupidatat.", &Attrs::new().family(cosmic_text::Family::Name("Inter")), Shaping::Advanced);
buffer.set_text("Lorem ipsum dolor sit amet, qui minim labore adipisicing\n\nweeewoooo minim sint cillum sint consectetur cupidatat.", &Attrs::new().family(cosmic_text::Family::Name("Inter")), Shaping::Advanced, None);
// Set a size for the text buffer, in pixels
buffer.set_size(Some(50.0), Some(1000.0));

View file

@ -15,7 +15,7 @@ fn wrap_word_fallback() {
let mut buffer = buffer.borrow_with(&mut font_system);
buffer.set_wrap(Wrap::WordOrGlyph);
buffer.set_text("Lorem ipsum dolor sit amet, qui minim labore adipisicing minim sint cillum sint consectetur cupidatat.", &Attrs::new().family(cosmic_text::Family::Name("Inter")), Shaping::Advanced);
buffer.set_text("Lorem ipsum dolor sit amet, qui minim labore adipisicing minim sint cillum sint consectetur cupidatat.", &Attrs::new().family(cosmic_text::Family::Name("Inter")), Shaping::Advanced, None);
buffer.set_size(Some(50.0), Some(1000.0));
buffer.shape_until_scroll(false);