mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-03-14 05:33:59 -04:00
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:
parent
10765687db
commit
304f15d696
5 changed files with 269 additions and 89 deletions
18
terminal.h
18
terminal.h
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue