render: implement render_refresh_margins()

For now, it will reset term->render.last_buf to NULL, and then calls
grid_render() to do a full screen refresh.
This commit is contained in:
Daniel Eklöf 2020-09-01 07:33:44 +02:00
parent 52af2694ff
commit 2488c3935b
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
3 changed files with 25 additions and 2 deletions

View file

@ -1932,11 +1932,13 @@ frame_callback(void *data, struct wl_callback *wl_callback, uint32_t callback_da
term->window->frame_callback = NULL; term->window->frame_callback = NULL;
bool grid = term->render.pending.grid; bool grid = term->render.pending.grid;
bool margins = term->render.pending.margins;
bool csd = term->render.pending.csd; bool csd = term->render.pending.csd;
bool search = term->render.pending.search; bool search = term->render.pending.search;
bool title = term->render.pending.title; bool title = term->render.pending.title;
term->render.pending.grid = false; term->render.pending.grid = false;
term->render.pending.margins = false;
term->render.pending.csd = false; term->render.pending.csd = false;
term->render.pending.search = false; term->render.pending.search = false;
term->render.pending.title = false; term->render.pending.title = false;
@ -1953,8 +1955,14 @@ frame_callback(void *data, struct wl_callback *wl_callback, uint32_t callback_da
if (search && term->is_searching) if (search && term->is_searching)
render_search_box(term); render_search_box(term);
if (grid && (!term->delayed_render_timer.is_armed || csd || search)) if (margins)
term->render.last_buf = NULL;
if ((grid || margins) &&
(!term->delayed_render_timer.is_armed || csd || search))
{
grid_render(term); grid_render(term);
}
} }
/* Move to terminal.c? */ /* Move to terminal.c? */
@ -2265,16 +2273,21 @@ fdm_hook_refresh_pending_terminals(struct fdm *fdm, void *data)
assert(term->window->is_configured); assert(term->window->is_configured);
bool grid = term->render.refresh.grid; bool grid = term->render.refresh.grid;
bool margins = term->render.refresh.margins;
bool csd = term->render.refresh.csd; bool csd = term->render.refresh.csd;
bool search = term->render.refresh.search; bool search = term->render.refresh.search;
bool title = term->render.refresh.title; bool title = term->render.refresh.title;
term->render.refresh.grid = false; term->render.refresh.grid = false;
term->render.refresh.margins = false;
term->render.refresh.csd = false; term->render.refresh.csd = false;
term->render.refresh.search = false; term->render.refresh.search = false;
term->render.refresh.title = false; term->render.refresh.title = false;
if (term->window->frame_callback == NULL) { if (term->window->frame_callback == NULL) {
if (margins)
term->render.last_buf = NULL;
if (csd && term->window->use_csd == CSD_YES) { if (csd && term->window->use_csd == CSD_YES) {
quirk_weston_csd_on(term); quirk_weston_csd_on(term);
render_csd(term); render_csd(term);
@ -2284,11 +2297,12 @@ fdm_hook_refresh_pending_terminals(struct fdm *fdm, void *data)
render_update_title(term); render_update_title(term);
if (search) if (search)
render_search_box(term); render_search_box(term);
if (grid) if (grid || margins)
grid_render(term); grid_render(term);
} else { } else {
/* Tells the frame callback to render again */ /* Tells the frame callback to render again */
term->render.pending.grid |= grid; term->render.pending.grid |= grid;
term->render.pending.margins |= margins;
term->render.pending.csd |= csd; term->render.pending.csd |= csd;
term->render.pending.search |= search; term->render.pending.search |= search;
term->render.pending.title |= title; term->render.pending.title |= title;
@ -2319,6 +2333,12 @@ render_refresh(struct terminal *term)
term->render.refresh.grid = true; term->render.refresh.grid = true;
} }
void
render_refresh_margins(struct terminal *term)
{
term->render.refresh.margins = true;
}
void void
render_refresh_csd(struct terminal *term) render_refresh_csd(struct terminal *term)
{ {

View file

@ -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); bool render_resize_force(struct terminal *term, int width, int height);
void render_refresh(struct terminal *term); void render_refresh(struct terminal *term);
void render_refresh_margins(struct terminal *term);
void render_refresh_csd(struct terminal *term); void render_refresh_csd(struct terminal *term);
void render_refresh_search(struct terminal *term); void render_refresh_search(struct terminal *term);
void render_refresh_title(struct terminal *term); void render_refresh_title(struct terminal *term);

View file

@ -373,6 +373,7 @@ struct terminal {
/* Scheduled for rendering, as soon-as-possible */ /* Scheduled for rendering, as soon-as-possible */
struct { struct {
bool grid; bool grid;
bool margins;
bool csd; bool csd;
bool search; bool search;
bool title; bool title;
@ -381,6 +382,7 @@ struct terminal {
/* Scheduled for rendering, in the next frame callback */ /* Scheduled for rendering, in the next frame callback */
struct { struct {
bool grid; bool grid;
bool margins;
bool csd; bool csd;
bool search; bool search;
bool title; bool title;