Propagate wrap edits to block map when folding / unfolding
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
This commit is contained in:
parent
d2f4d37af8
commit
b4bc7906d2
2 changed files with 16 additions and 8 deletions
|
@ -80,12 +80,16 @@ impl DisplayMap {
|
||||||
) {
|
) {
|
||||||
let (mut fold_map, snapshot, edits) = self.fold_map.write(cx);
|
let (mut fold_map, snapshot, edits) = self.fold_map.write(cx);
|
||||||
let (snapshot, edits) = self.tab_map.sync(snapshot, edits);
|
let (snapshot, edits) = self.tab_map.sync(snapshot, edits);
|
||||||
self.wrap_map
|
let (snapshot, edits) = self
|
||||||
|
.wrap_map
|
||||||
.update(cx, |map, cx| map.sync(snapshot, edits, cx));
|
.update(cx, |map, cx| map.sync(snapshot, edits, cx));
|
||||||
|
self.block_map.sync(&snapshot, edits, cx);
|
||||||
let (snapshot, edits) = fold_map.fold(ranges, cx);
|
let (snapshot, edits) = fold_map.fold(ranges, cx);
|
||||||
let (snapshot, edits) = self.tab_map.sync(snapshot, edits);
|
let (snapshot, edits) = self.tab_map.sync(snapshot, edits);
|
||||||
self.wrap_map
|
let (snapshot, edits) = self
|
||||||
|
.wrap_map
|
||||||
.update(cx, |map, cx| map.sync(snapshot, edits, cx));
|
.update(cx, |map, cx| map.sync(snapshot, edits, cx));
|
||||||
|
self.block_map.sync(&snapshot, edits, cx);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn unfold<T: ToOffset>(
|
pub fn unfold<T: ToOffset>(
|
||||||
|
@ -95,12 +99,16 @@ impl DisplayMap {
|
||||||
) {
|
) {
|
||||||
let (mut fold_map, snapshot, edits) = self.fold_map.write(cx);
|
let (mut fold_map, snapshot, edits) = self.fold_map.write(cx);
|
||||||
let (snapshot, edits) = self.tab_map.sync(snapshot, edits);
|
let (snapshot, edits) = self.tab_map.sync(snapshot, edits);
|
||||||
self.wrap_map
|
let (snapshot, edits) = self
|
||||||
|
.wrap_map
|
||||||
.update(cx, |map, cx| map.sync(snapshot, edits, cx));
|
.update(cx, |map, cx| map.sync(snapshot, edits, cx));
|
||||||
|
self.block_map.sync(&snapshot, edits, cx);
|
||||||
let (snapshot, edits) = fold_map.unfold(ranges, cx);
|
let (snapshot, edits) = fold_map.unfold(ranges, cx);
|
||||||
let (snapshot, edits) = self.tab_map.sync(snapshot, edits);
|
let (snapshot, edits) = self.tab_map.sync(snapshot, edits);
|
||||||
self.wrap_map
|
let (snapshot, edits) = self
|
||||||
|
.wrap_map
|
||||||
.update(cx, |map, cx| map.sync(snapshot, edits, cx));
|
.update(cx, |map, cx| map.sync(snapshot, edits, cx));
|
||||||
|
self.block_map.sync(&snapshot, edits, cx);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn insert_blocks<P, T>(
|
pub fn insert_blocks<P, T>(
|
||||||
|
|
|
@ -113,7 +113,7 @@ impl BlockMap {
|
||||||
edits: Vec<WrapEdit>,
|
edits: Vec<WrapEdit>,
|
||||||
cx: &AppContext,
|
cx: &AppContext,
|
||||||
) -> BlockSnapshot {
|
) -> BlockSnapshot {
|
||||||
self.apply_edits(&wrap_snapshot, edits, cx);
|
self.sync(&wrap_snapshot, edits, cx);
|
||||||
*self.wrap_snapshot.lock() = wrap_snapshot.clone();
|
*self.wrap_snapshot.lock() = wrap_snapshot.clone();
|
||||||
BlockSnapshot {
|
BlockSnapshot {
|
||||||
wrap_snapshot,
|
wrap_snapshot,
|
||||||
|
@ -127,12 +127,12 @@ impl BlockMap {
|
||||||
edits: Vec<WrapEdit>,
|
edits: Vec<WrapEdit>,
|
||||||
cx: &AppContext,
|
cx: &AppContext,
|
||||||
) -> BlockMapWriter {
|
) -> BlockMapWriter {
|
||||||
self.apply_edits(&wrap_snapshot, edits, cx);
|
self.sync(&wrap_snapshot, edits, cx);
|
||||||
*self.wrap_snapshot.lock() = wrap_snapshot;
|
*self.wrap_snapshot.lock() = wrap_snapshot;
|
||||||
BlockMapWriter(self)
|
BlockMapWriter(self)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn apply_edits(&self, wrap_snapshot: &WrapSnapshot, edits: Vec<WrapEdit>, cx: &AppContext) {
|
pub fn sync(&self, wrap_snapshot: &WrapSnapshot, edits: Vec<WrapEdit>, cx: &AppContext) {
|
||||||
if edits.is_empty() {
|
if edits.is_empty() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -356,7 +356,7 @@ impl<'a> BlockMapWriter<'a> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.0.apply_edits(&*self.0.wrap_snapshot.lock(), edits, cx);
|
self.0.sync(&*self.0.wrap_snapshot.lock(), edits, cx);
|
||||||
ids
|
ids
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue