Implement Clone for Buffer and use Arc::make_mut

This commit is contained in:
Jeremy Soller 2023-12-19 15:58:45 -07:00
parent 0a11fb1045
commit 46d60a3723
4 changed files with 21 additions and 10 deletions

View file

@ -237,6 +237,21 @@ pub struct Buffer {
scratch: ShapeBuffer,
}
impl Clone for Buffer {
fn clone(&self) -> Self {
Self {
lines: self.lines.clone(),
metrics: self.metrics,
width: self.width,
height: self.height,
scroll: self.scroll,
redraw: self.redraw,
wrap: self.wrap,
scratch: ShapeBuffer::default(),
}
}
}
impl Buffer {
/// Create an empty [`Buffer`] with the provided [`Metrics`].
/// This is useful for initializing a [`Buffer`] without a [`FontSystem`].

View file

@ -4,7 +4,7 @@ use alloc::{string::String, vec::Vec};
use crate::{Align, AttrsList, FontSystem, LayoutLine, ShapeBuffer, ShapeLine, Shaping, Wrap};
/// A line (or paragraph) of text that is shaped and laid out
#[derive(Debug)]
#[derive(Clone, Debug)]
pub struct BufferLine {
//TODO: make this not pub(crate)
text: String,

View file

@ -176,11 +176,7 @@ pub trait Edit<'buffer> {
match self.buffer_ref_mut() {
BufferRef::Owned(buffer) => f(buffer),
BufferRef::Borrowed(buffer) => f(buffer),
BufferRef::Arc(arc) => match Arc::get_mut(arc) {
Some(buffer) => f(buffer),
//TODO: use make_mut?
None => panic!("BufferRef::Arc cannot be accessed mutibly"),
},
BufferRef::Arc(buffer) => f(Arc::make_mut(buffer)),
}
}

View file

@ -379,7 +379,7 @@ fn shape_skip(
}
/// A shaped glyph
#[derive(Debug)]
#[derive(Clone, Debug)]
pub struct ShapeGlyph {
pub start: usize,
pub end: usize,
@ -423,7 +423,7 @@ impl ShapeGlyph {
}
/// A shaped word (for word wrapping)
#[derive(Debug)]
#[derive(Clone, Debug)]
pub struct ShapeWord {
pub blank: bool,
pub glyphs: Vec<ShapeGlyph>,
@ -527,7 +527,7 @@ impl ShapeWord {
}
/// A shaped span (for bidirectional processing)
#[derive(Debug)]
#[derive(Clone, Debug)]
pub struct ShapeSpan {
pub level: unicode_bidi::Level,
pub words: Vec<ShapeWord>,
@ -638,7 +638,7 @@ impl ShapeSpan {
}
/// A shaped line (or paragraph)
#[derive(Debug)]
#[derive(Clone, Debug)]
pub struct ShapeLine {
pub rtl: bool,
pub spans: Vec<ShapeSpan>,