Allow dynamic sizing
This commit is contained in:
parent
c82248831b
commit
7f245acf66
1 changed files with 16 additions and 16 deletions
32
src/lib.rs
32
src/lib.rs
|
@ -8,8 +8,6 @@ use range_map::RangeMap;
|
|||
|
||||
pub struct JotdownBufferIter<'a, T: Iterator<Item = Event<'a>>> {
|
||||
djot: T,
|
||||
width: f32,
|
||||
metrics: Metrics,
|
||||
indent: Vec<Indent>,
|
||||
}
|
||||
|
||||
|
@ -86,10 +84,7 @@ impl<'a, 'b, T: Iterator<Item = Event<'a>>> Iterator for JotdownIntoBuffer<'a, '
|
|||
}
|
||||
Event::Start(container, _) => match container {
|
||||
Container::Heading { level, .. } => {
|
||||
self.metrics = Metrics::new(
|
||||
self.metrics.font_size * (4.0 - level as f32),
|
||||
self.metrics.line_height * (4.0 - level as f32),
|
||||
);
|
||||
self.metrics = Metrics::new(4.0 - level as f32, 4.0 - level as f32);
|
||||
}
|
||||
Container::Emphasis => self.attrs = self.attrs.style(Style::Italic),
|
||||
Container::Strong => self.attrs = self.attrs.weight(Weight::BOLD),
|
||||
|
@ -141,12 +136,22 @@ pub struct JotdownItem<'a> {
|
|||
pub metrics: Metrics,
|
||||
pub image_url: Option<Cow<'a, str>>,
|
||||
pub url_map: Option<RangeMap<usize, &'a str>>,
|
||||
pub width: f32,
|
||||
}
|
||||
|
||||
impl<'a> JotdownItem<'a> {
|
||||
pub fn make_buffer(&self, font_system: &mut FontSystem) -> Buffer {
|
||||
let mut buffer = Buffer::new(font_system, self.metrics);
|
||||
pub fn make_buffer(
|
||||
&self,
|
||||
font_system: &mut FontSystem,
|
||||
width: f32,
|
||||
metrics: Metrics,
|
||||
) -> Buffer {
|
||||
let mut buffer = Buffer::new(
|
||||
font_system,
|
||||
Metrics::new(
|
||||
metrics.font_size * self.metrics.font_size,
|
||||
metrics.line_height * self.metrics.line_height,
|
||||
),
|
||||
);
|
||||
buffer.set_rich_text(
|
||||
font_system,
|
||||
self.buffer.iter().cloned(),
|
||||
|
@ -155,7 +160,7 @@ impl<'a> JotdownItem<'a> {
|
|||
);
|
||||
|
||||
buffer.set_wrap(font_system, cosmic_text::Wrap::WordOrGlyph);
|
||||
buffer.set_size(font_system, self.width - self.indent.indent, f32::MAX);
|
||||
buffer.set_size(font_system, width - self.indent.indent, f32::MAX);
|
||||
buffer.shape_until_scroll(font_system, false);
|
||||
buffer
|
||||
}
|
||||
|
@ -168,9 +173,9 @@ impl<'a, T: Iterator<Item = Event<'a>>> Iterator for JotdownBufferIter<'a, T> {
|
|||
let mut jot = JotdownIntoBuffer {
|
||||
djot: &mut self.djot,
|
||||
attrs: Attrs::new().family(Family::SansSerif),
|
||||
metrics: self.metrics,
|
||||
indent: &mut self.indent,
|
||||
image_url: None,
|
||||
metrics: Metrics::new(1.0, 1.0),
|
||||
added: false,
|
||||
link_start: 0,
|
||||
location: 0,
|
||||
|
@ -196,7 +201,6 @@ impl<'a, T: Iterator<Item = Event<'a>>> Iterator for JotdownBufferIter<'a, T> {
|
|||
buffer,
|
||||
image_url,
|
||||
metrics,
|
||||
width: self.width,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -204,13 +208,9 @@ impl<'a, T: Iterator<Item = Event<'a>>> Iterator for JotdownBufferIter<'a, T> {
|
|||
|
||||
pub fn jotdown_into_buffers<'a, T: Iterator<Item = Event<'a>>>(
|
||||
djot: T,
|
||||
metrics: Metrics,
|
||||
width: f32,
|
||||
) -> JotdownBufferIter<'a, T> {
|
||||
JotdownBufferIter {
|
||||
djot,
|
||||
width,
|
||||
metrics,
|
||||
indent: Vec::new(),
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue