mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-11 04:27:49 -05:00
Merge branch 'refresh-margins-on-background-palette-change' into master
Closes #94
This commit is contained in:
commit
bb8d9378c9
4 changed files with 28 additions and 7 deletions
2
osc.c
2
osc.c
|
|
@ -619,6 +619,7 @@ osc_dispatch(struct terminal *term)
|
|||
|
||||
term_damage_view(term);
|
||||
render_refresh(term);
|
||||
render_refresh_margins(term);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -706,6 +707,7 @@ osc_dispatch(struct terminal *term)
|
|||
term->colors.bg = term->colors.default_bg;
|
||||
term_damage_view(term);
|
||||
render_refresh(term);
|
||||
render_refresh_margins(term);
|
||||
break;
|
||||
|
||||
case 112:
|
||||
|
|
|
|||
30
render.c
30
render.c
|
|
@ -1535,7 +1535,7 @@ static const struct wl_callback_listener frame_listener = {
|
|||
};
|
||||
|
||||
static void
|
||||
grid_render(struct terminal *term)
|
||||
grid_render(struct terminal *term, bool redraw_margins)
|
||||
{
|
||||
if (term->is_shutting_down)
|
||||
return;
|
||||
|
|
@ -1554,14 +1554,16 @@ grid_render(struct terminal *term)
|
|||
/* If we resized the window, or is flashing, or just stopped flashing */
|
||||
if (term->render.last_buf != buf ||
|
||||
term->flash.active || term->render.was_flashing ||
|
||||
term->is_searching != term->render.was_searching)
|
||||
term->is_searching != term->render.was_searching ||
|
||||
redraw_margins)
|
||||
{
|
||||
if (term->render.last_buf != NULL &&
|
||||
term->render.last_buf->width == buf->width &&
|
||||
term->render.last_buf->height == buf->height &&
|
||||
!term->flash.active &&
|
||||
!term->render.was_flashing &&
|
||||
term->is_searching == term->render.was_searching)
|
||||
term->is_searching == term->render.was_searching &&
|
||||
!redraw_margins)
|
||||
{
|
||||
static bool has_warned = false;
|
||||
if (!has_warned) {
|
||||
|
|
@ -1932,11 +1934,13 @@ frame_callback(void *data, struct wl_callback *wl_callback, uint32_t callback_da
|
|||
term->window->frame_callback = NULL;
|
||||
|
||||
bool grid = term->render.pending.grid;
|
||||
bool margins = term->render.pending.margins;
|
||||
bool csd = term->render.pending.csd;
|
||||
bool search = term->render.pending.search;
|
||||
bool title = term->render.pending.title;
|
||||
|
||||
term->render.pending.grid = false;
|
||||
term->render.pending.margins = false;
|
||||
term->render.pending.csd = false;
|
||||
term->render.pending.search = false;
|
||||
term->render.pending.title = false;
|
||||
|
|
@ -1953,8 +1957,11 @@ frame_callback(void *data, struct wl_callback *wl_callback, uint32_t callback_da
|
|||
if (search && term->is_searching)
|
||||
render_search_box(term);
|
||||
|
||||
if (grid && (!term->delayed_render_timer.is_armed || csd || search))
|
||||
grid_render(term);
|
||||
if ((grid || margins) &&
|
||||
(!term->delayed_render_timer.is_armed || csd || search))
|
||||
{
|
||||
grid_render(term, margins);
|
||||
}
|
||||
}
|
||||
|
||||
/* Move to terminal.c? */
|
||||
|
|
@ -2265,11 +2272,13 @@ fdm_hook_refresh_pending_terminals(struct fdm *fdm, void *data)
|
|||
assert(term->window->is_configured);
|
||||
|
||||
bool grid = term->render.refresh.grid;
|
||||
bool margins = term->render.refresh.margins;
|
||||
bool csd = term->render.refresh.csd;
|
||||
bool search = term->render.refresh.search;
|
||||
bool title = term->render.refresh.title;
|
||||
|
||||
term->render.refresh.grid = false;
|
||||
term->render.refresh.margins = false;
|
||||
term->render.refresh.csd = false;
|
||||
term->render.refresh.search = false;
|
||||
term->render.refresh.title = false;
|
||||
|
|
@ -2284,11 +2293,12 @@ fdm_hook_refresh_pending_terminals(struct fdm *fdm, void *data)
|
|||
render_update_title(term);
|
||||
if (search)
|
||||
render_search_box(term);
|
||||
if (grid)
|
||||
grid_render(term);
|
||||
if (grid || margins)
|
||||
grid_render(term, margins);
|
||||
} else {
|
||||
/* Tells the frame callback to render again */
|
||||
term->render.pending.grid |= grid;
|
||||
term->render.pending.margins |= margins;
|
||||
term->render.pending.csd |= csd;
|
||||
term->render.pending.search |= search;
|
||||
term->render.pending.title |= title;
|
||||
|
|
@ -2319,6 +2329,12 @@ render_refresh(struct terminal *term)
|
|||
term->render.refresh.grid = true;
|
||||
}
|
||||
|
||||
void
|
||||
render_refresh_margins(struct terminal *term)
|
||||
{
|
||||
term->render.refresh.margins = true;
|
||||
}
|
||||
|
||||
void
|
||||
render_refresh_csd(struct terminal *term)
|
||||
{
|
||||
|
|
|
|||
1
render.h
1
render.h
|
|
@ -13,6 +13,7 @@ bool render_resize(struct terminal *term, int width, int height);
|
|||
bool render_resize_force(struct terminal *term, int width, int height);
|
||||
|
||||
void render_refresh(struct terminal *term);
|
||||
void render_refresh_margins(struct terminal *term);
|
||||
void render_refresh_csd(struct terminal *term);
|
||||
void render_refresh_search(struct terminal *term);
|
||||
void render_refresh_title(struct terminal *term);
|
||||
|
|
|
|||
|
|
@ -373,6 +373,7 @@ struct terminal {
|
|||
/* Scheduled for rendering, as soon-as-possible */
|
||||
struct {
|
||||
bool grid;
|
||||
bool margins;
|
||||
bool csd;
|
||||
bool search;
|
||||
bool title;
|
||||
|
|
@ -381,6 +382,7 @@ struct terminal {
|
|||
/* Scheduled for rendering, in the next frame callback */
|
||||
struct {
|
||||
bool grid;
|
||||
bool margins;
|
||||
bool csd;
|
||||
bool search;
|
||||
bool title;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue