fix: CJK text rendering issue where the input popup component overlaps with images (#879)

This commit is contained in:
三咲雅 · Misaki Masa 2024-04-06 08:53:48 +08:00 committed by GitHub
parent 1b910ddc96
commit 0650affb76
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 9 additions and 7 deletions

View File

@ -1,6 +1,6 @@
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 crate::{app::App, lives::Lives, root::Root};
@ -61,16 +61,18 @@ impl App {
#[inline]
fn patch(frame: CompletedFrame, cursor: Option<(u16, u16)>) {
let mut patches = vec![];
for y in frame.area.top()..frame.area.bottom() {
for x in frame.area.left()..frame.area.right() {
let mut new = Buffer::empty(frame.area);
for y in new.area.top()..new.area.bottom() {
for x in new.area.left()..new.area.right() {
let cell = frame.buffer.get(x, y);
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()));
backend.draw(patches.into_iter()).ok();
if let Some((x, y)) = cursor {

View File

@ -37,8 +37,8 @@ impl ratatui::widgets::Widget for Clear {
ADAPTOR.image_erase(r).ok();
COLLISION.store(true, Ordering::Relaxed);
for y in area.top()..area.bottom() {
for x in area.left()..area.right() {
for y in r.top()..r.bottom() {
for x in r.left()..r.right() {
buf.get_mut(x, y).set_skip(true);
}
}