fix: CJK text rendering issue where the input popup component overlaps with images

This commit is contained in:
sxyazi 2024-04-06 08:50:04 +08:00
parent 1b910ddc96
commit 16731e6138
No known key found for this signature in database

View file

@ -1,6 +1,6 @@
use std::{io::{stderr, BufWriter}, sync::atomic::Ordering}; use std::{io::{stderr, BufWriter}, sync::atomic::Ordering};
use ratatui::{backend::{Backend, CrosstermBackend}, CompletedFrame}; use ratatui::{backend::{Backend, CrosstermBackend}, buffer::Buffer, CompletedFrame};
use yazi_plugin::elements::COLLISION; use yazi_plugin::elements::COLLISION;
use crate::{app::App, lives::Lives, root::Root}; use crate::{app::App, lives::Lives, root::Root};
@ -61,16 +61,18 @@ impl App {
#[inline] #[inline]
fn patch(frame: CompletedFrame, cursor: Option<(u16, u16)>) { fn patch(frame: CompletedFrame, cursor: Option<(u16, u16)>) {
let mut patches = vec![]; let mut new = Buffer::empty(frame.area);
for y in frame.area.top()..frame.area.bottom() { for y in new.area.top()..new.area.bottom() {
for x in frame.area.left()..frame.area.right() { for x in new.area.left()..new.area.right() {
let cell = frame.buffer.get(x, y); let cell = frame.buffer.get(x, y);
if cell.skip { if cell.skip {
patches.push((x, y, cell)); *new.get_mut(x, y) = cell.clone();
} }
new.get_mut(x, y).set_skip(!cell.skip);
} }
} }
let patches = frame.buffer.diff(&new);
let mut backend = CrosstermBackend::new(BufWriter::new(stderr().lock())); let mut backend = CrosstermBackend::new(BufWriter::new(stderr().lock()));
backend.draw(patches.into_iter()).ok(); backend.draw(patches.into_iter()).ok();
if let Some((x, y)) = cursor { if let Some((x, y)) = cursor {