Use a 'damage' list to communicate what needs to be updated

Instead of having each cell in the grid track it's own dirtiness, grid
operations now append "damage" to a list.

This list is consumed every time we render the grid.

This allows us to special case some operations, like erase (and in the
future, scroll).
This commit is contained in:
Daniel Eklöf 2019-06-19 14:17:43 +02:00
parent 10765687db
commit 304f15d696
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
5 changed files with 269 additions and 89 deletions

View file

@ -9,6 +9,8 @@
#include <xkbcommon/xkbcommon.h>
#include <xkbcommon/xkbcommon-keysyms.h>
#include "tllist.h"
struct attributes {
bool bold;
bool italic;
@ -22,11 +24,22 @@ struct attributes {
};
struct cell {
bool dirty;
char c[5];
struct attributes attrs;
};
enum damage_type {DAMAGE_UPDATE, DAMAGE_ERASE, DAMAGE_SCROLL};
struct damage {
enum damage_type type;
union {
struct {
int start;
int length;
} range; /* DAMAGE_UPDATE, DAMAGE_ERASE */
int lines; /* DAMAGE_SCROLL */
};
};
struct grid {
int cols;
int rows;
@ -45,8 +58,7 @@ struct grid {
uint32_t foreground;
uint32_t background;
bool dirty;
bool all_dirty;
tll(struct damage) damage;
};
struct vt {