mirror of
https://github.com/zed-industries/zed.git
synced 2024-09-20 10:57:22 +03:00
Fix wrapping when parent has a max_width
(Also avoid re-wrapping text we already wrapped)
This commit is contained in:
parent
242a0b85b5
commit
cf47ed2c5f
@ -1,5 +1,5 @@
|
|||||||
use crate::{
|
use crate::{
|
||||||
AnyElement, BorrowWindow, Bounds, Component, Element, ElementId, LayoutId, Pixels,
|
px, AnyElement, BorrowWindow, Bounds, Component, Element, ElementId, LayoutId, Pixels,
|
||||||
SharedString, Size, TextRun, ViewContext, WrappedLine,
|
SharedString, Size, TextRun, ViewContext, WrappedLine,
|
||||||
};
|
};
|
||||||
use parking_lot::{Mutex, MutexGuard};
|
use parking_lot::{Mutex, MutexGuard};
|
||||||
@ -70,6 +70,14 @@ impl<V: 'static> Element<V> for Text {
|
|||||||
_ => None,
|
_ => None,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if let Some(text_state) = element_state.0.lock().as_ref() {
|
||||||
|
if text_state.size.is_some()
|
||||||
|
&& (wrap_width.is_none() || wrap_width == text_state.wrap_width)
|
||||||
|
{
|
||||||
|
return text_state.size.unwrap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let Some(lines) = text_system
|
let Some(lines) = text_system
|
||||||
.shape_text(
|
.shape_text(
|
||||||
&text,
|
&text,
|
||||||
@ -82,6 +90,8 @@ impl<V: 'static> Element<V> for Text {
|
|||||||
element_state.lock().replace(TextStateInner {
|
element_state.lock().replace(TextStateInner {
|
||||||
lines: Default::default(),
|
lines: Default::default(),
|
||||||
line_height,
|
line_height,
|
||||||
|
wrap_width,
|
||||||
|
size: Some(Size::default()),
|
||||||
});
|
});
|
||||||
return Size::default();
|
return Size::default();
|
||||||
};
|
};
|
||||||
@ -93,9 +103,12 @@ impl<V: 'static> Element<V> for Text {
|
|||||||
size.width = size.width.max(line_size.width);
|
size.width = size.width.max(line_size.width);
|
||||||
}
|
}
|
||||||
|
|
||||||
element_state
|
element_state.lock().replace(TextStateInner {
|
||||||
.lock()
|
lines,
|
||||||
.replace(TextStateInner { lines, line_height });
|
line_height,
|
||||||
|
wrap_width,
|
||||||
|
size: Some(size),
|
||||||
|
});
|
||||||
|
|
||||||
size
|
size
|
||||||
}
|
}
|
||||||
@ -138,6 +151,8 @@ impl TextState {
|
|||||||
struct TextStateInner {
|
struct TextStateInner {
|
||||||
lines: SmallVec<[WrappedLine; 1]>,
|
lines: SmallVec<[WrappedLine; 1]>,
|
||||||
line_height: Pixels,
|
line_height: Pixels,
|
||||||
|
wrap_width: Option<Pixels>,
|
||||||
|
size: Option<Size<Pixels>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
struct InteractiveText {
|
struct InteractiveText {
|
||||||
|
Loading…
Reference in New Issue
Block a user