rgba: drop alpha channel support

This commit is contained in:
Daniel Eklöf 2019-07-08 15:56:15 +02:00
parent 69e7744e5d
commit 1e2a7e77f0
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
4 changed files with 43 additions and 53 deletions

50
csi.c
View file

@ -16,29 +16,29 @@
#define min(x, y) ((x) < (y) ? (x) : (y)) #define min(x, y) ((x) < (y) ? (x) : (y))
static const struct rgba colors_regular[] = { static const struct rgb colors_regular[] = {
{0.000000, 0.000000, 0.000000, 1.000000}, /* 0x000000ff */ {0.000000, 0.000000, 0.000000}, /* 0x000000 */
{0.800000, 0.576471, 0.576471, 1.000000}, /* 0xcc9393ff */ {0.800000, 0.576471, 0.576471}, /* 0xcc9393 */
{0.498039, 0.623529, 0.498039, 1.000000}, /* 0x7f9f7fff */ {0.498039, 0.623529, 0.498039}, /* 0x7f9f7f */
{0.815686, 0.749020, 0.560784, 1.000000}, /* 0xd0bf8fff */ {0.815686, 0.749020, 0.560784}, /* 0xd0bf8f */
{0.423529, 0.627451, 0.639216, 1.000000}, /* 0x6ca0a3ff */ {0.423529, 0.627451, 0.639216}, /* 0x6ca0a3 */
{0.862745, 0.549020, 0.764706, 1.000000}, /* 0xdc8cc3ff */ {0.862745, 0.549020, 0.764706}, /* 0xdc8cc3 */
{0.576471, 0.878431, 0.890196, 1.000000}, /* 0x93e0e3ff */ {0.576471, 0.878431, 0.890196}, /* 0x93e0e3 */
{0.862745, 0.862745, 0.800000, 1.000000}, /* 0xdcdcccff */ {0.862745, 0.862745, 0.800000}, /* 0xdcdccc */
}; };
static const struct rgba colors_bright[] = { static const struct rgb colors_bright[] = {
{0.000000, 0.000000, 0.000000, 1.000000}, /* 0x000000ff */ {0.000000, 0.000000, 0.000000}, /* 0x000000 */
{0.862745, 0.639216, 0.639216, 1.000000}, /* 0xdca3a3ff */ {0.862745, 0.639216, 0.639216}, /* 0xdca3a3 */
{0.749020, 0.921569, 0.749020, 1.000000}, /* 0xbfebbfff */ {0.749020, 0.921569, 0.749020}, /* 0xbfebbf */
{0.941176, 0.874510, 0.686275, 1.000000}, /* 0xf0dfafff */ {0.941176, 0.874510, 0.686275}, /* 0xf0dfaf */
{0.549020, 0.815686, 0.827451, 1.000000}, /* 0x8cd0d3ff */ {0.549020, 0.815686, 0.827451}, /* 0x8cd0d3 */
{0.862745, 0.549020, 0.764706, 1.000000}, /* 0xdc8cc3ff */ {0.862745, 0.549020, 0.764706}, /* 0xdc8cc3 */
{0.576471, 0.878431, 0.890196, 1.000000}, /* 0x93e0e3ff */ {0.576471, 0.878431, 0.890196}, /* 0x93e0e3 */
{1.000000, 1.000000, 1.000000, 1.000000}, /* 0xffffffff */ {1.000000, 1.000000, 1.000000}, /* 0xffffff */
}; };
static struct rgba colors256[256]; static struct rgb colors256[256];
static void __attribute__((constructor)) static void __attribute__((constructor))
initialize_colors256(void) initialize_colors256(void)
@ -51,22 +51,20 @@ initialize_colors256(void)
for (size_t r = 0; r < 6; r++) { for (size_t r = 0; r < 6; r++) {
for (size_t g = 0; g < 6; g++) { for (size_t g = 0; g < 6; g++) {
for (size_t b = 0; b < 6; b++) { for (size_t b = 0; b < 6; b++) {
colors256[16 + r * 6 * 6 + g * 6 + b] = (struct rgba) { colors256[16 + r * 6 * 6 + g * 6 + b] = (struct rgb) {
r * 51 / 255.0, r * 51 / 255.0,
g * 51 / 255.0, g * 51 / 255.0,
b * 51 / 255.0, b * 51 / 255.0,
1.0,
}; };
} }
} }
} }
for (size_t i = 0; i < 24; i++){ for (size_t i = 0; i < 24; i++){
colors256[232 + i] = (struct rgba) { colors256[232 + i] = (struct rgb) {
i * 11 / 255.0, i * 11 / 255.0,
i * 11 / 255.0, i * 11 / 255.0,
i * 11 / 255.0, i * 11 / 255.0,
1.0
}; };
} }
} }
@ -152,11 +150,10 @@ csi_sgr(struct terminal *term)
uint8_t r = term->vt.params.v[i + 2].value; uint8_t r = term->vt.params.v[i + 2].value;
uint8_t g = term->vt.params.v[i + 3].value; uint8_t g = term->vt.params.v[i + 3].value;
uint8_t b = term->vt.params.v[i + 4].value; uint8_t b = term->vt.params.v[i + 4].value;
term->vt.attrs.foreground = (struct rgba) { term->vt.attrs.foreground = (struct rgb) {
r / 255.0, r / 255.0,
g / 255.0, g / 255.0,
b / 255.0, b / 255.0,
1.0,
}; };
term->vt.attrs.have_foreground = true; term->vt.attrs.have_foreground = true;
i += 4; i += 4;
@ -199,11 +196,10 @@ csi_sgr(struct terminal *term)
uint8_t r = term->vt.params.v[i + 2].value; uint8_t r = term->vt.params.v[i + 2].value;
uint8_t g = term->vt.params.v[i + 3].value; uint8_t g = term->vt.params.v[i + 3].value;
uint8_t b = term->vt.params.v[i + 4].value; uint8_t b = term->vt.params.v[i + 4].value;
term->vt.attrs.background = (struct rgba) { term->vt.attrs.background = (struct rgb) {
r / 255.0, r / 255.0,
g / 255.0, g / 255.0,
b / 255.0, b / 255.0,
1.0
}; };
term->vt.attrs.have_background = true; term->vt.attrs.have_background = true;
i += 4; i += 4;

4
main.c
View file

@ -32,8 +32,8 @@
#define min(x, y) ((x) < (y) ? (x) : (y)) #define min(x, y) ((x) < (y) ? (x) : (y))
#define max(x, y) ((x) > (y) ? (x) : (y)) #define max(x, y) ((x) > (y) ? (x) : (y))
static const struct rgba default_foreground = {0.86, 0.86, 0.86, 1.0}; static const struct rgb default_foreground = {0.86, 0.86, 0.86};
static const struct rgba default_background = {0.067, 0.067, 0.067, 1.0}; static const struct rgb default_background = {0.067, 0.067, 0.067};
static void static void
shm_format(void *data, struct wl_shm *wl_shm, uint32_t format) shm_format(void *data, struct wl_shm *wl_shm, uint32_t format)

View file

@ -28,7 +28,7 @@ struct glyph_sequence {
int count; int count;
struct attributes attrs; struct attributes attrs;
struct rgba foreground; struct rgb foreground;
}; };
static struct glyph_sequence gseq; static struct glyph_sequence gseq;
@ -47,28 +47,22 @@ render_cell(struct terminal *term, struct buffer *buf, const struct cell *cell,
double x = col * width; double x = col * width;
double y = row * height; double y = row * height;
const struct rgba *foreground = cell->attrs.have_foreground const struct rgb *foreground = cell->attrs.have_foreground
? &cell->attrs.foreground ? &cell->attrs.foreground
: !term->reverse ? &term->foreground : &term->background; : !term->reverse ? &term->foreground : &term->background;
const struct rgba *background = cell->attrs.have_background const struct rgb *background = cell->attrs.have_background
? &cell->attrs.background ? &cell->attrs.background
: !term->reverse ? &term->background : &term->foreground; : !term->reverse ? &term->background : &term->foreground;
if (has_cursor) { /* If *one* is set, we reverse */
const struct rgba *swap = foreground; if (has_cursor != cell->attrs.reverse) {
foreground = background; const struct rgb *swap = foreground;
background = swap;
}
if (cell->attrs.reverse) {
const struct rgba *swap = foreground;
foreground = background; foreground = background;
background = swap; background = swap;
} }
/* Background */ /* Background */
cairo_set_source_rgba( cairo_set_source_rgb(buf->cairo, background->r, background->g, background->b);
buf->cairo, background->r, background->g, background->b, background->a);
cairo_rectangle(buf->cairo, x, y, width, height); cairo_rectangle(buf->cairo, x, y, width, height);
cairo_fill(buf->cairo); cairo_fill(buf->cairo);
@ -95,9 +89,9 @@ render_cell(struct terminal *term, struct buffer *buf, const struct cell *cell,
LOG_WARN("hit glyph limit"); LOG_WARN("hit glyph limit");
cairo_set_scaled_font(buf->cairo, attrs_to_font(term, &gseq.attrs)); cairo_set_scaled_font(buf->cairo, attrs_to_font(term, &gseq.attrs));
cairo_set_source_rgba( cairo_set_source_rgb(
buf->cairo, gseq.foreground.r, gseq.foreground.g, buf->cairo, gseq.foreground.r, gseq.foreground.g,
gseq.foreground.b, gseq.foreground.a); gseq.foreground.b);
cairo_show_glyphs(buf->cairo, gseq.glyphs, gseq.count); cairo_show_glyphs(buf->cairo, gseq.glyphs, gseq.count);
@ -469,9 +463,9 @@ grid_render(struct terminal *term)
int rmargin_width = term->width - rmargin; int rmargin_width = term->width - rmargin;
int bmargin_height = term->height - bmargin; int bmargin_height = term->height - bmargin;
const struct rgba *bg = !term->reverse ? const struct rgb *bg = !term->reverse ?
&term->background : &term->foreground; &term->background : &term->foreground;
cairo_set_source_rgba(buf->cairo, bg->r, bg->g, bg->b, bg->a); cairo_set_source_rgb(buf->cairo, bg->r, bg->g, bg->b);
cairo_rectangle(buf->cairo, rmargin, 0, rmargin_width, term->height); cairo_rectangle(buf->cairo, rmargin, 0, rmargin_width, term->height);
cairo_rectangle(buf->cairo, 0, bmargin, term->width, bmargin_height); cairo_rectangle(buf->cairo, 0, bmargin, term->width, bmargin_height);
@ -599,9 +593,9 @@ grid_render(struct terminal *term)
if (gseq.count > 0) { if (gseq.count > 0) {
cairo_set_scaled_font(buf->cairo, attrs_to_font(term, &gseq.attrs)); cairo_set_scaled_font(buf->cairo, attrs_to_font(term, &gseq.attrs));
cairo_set_source_rgba( cairo_set_source_rgb(
buf->cairo, gseq.foreground.r, gseq.foreground.g, buf->cairo, gseq.foreground.r, gseq.foreground.g,
gseq.foreground.b, gseq.foreground.a); gseq.foreground.b);
cairo_show_glyphs(buf->cairo, gseq.glyphs, gseq.count); cairo_show_glyphs(buf->cairo, gseq.glyphs, gseq.count);
} }

View file

@ -36,7 +36,7 @@ struct wayland {
struct xdg_toplevel *xdg_toplevel; struct xdg_toplevel *xdg_toplevel;
}; };
struct rgba { double r, g, b, a; } __attribute__((packed)); struct rgb { double r, g, b; } __attribute__((packed));
struct attributes { struct attributes {
#if 0 #if 0
@ -60,8 +60,8 @@ struct attributes {
uint8_t have_foreground:1; uint8_t have_foreground:1;
uint8_t have_background:1; uint8_t have_background:1;
#endif #endif
struct rgba foreground; /* Only valid when have_foreground == true */ struct rgb foreground; /* Only valid when have_foreground == true */
struct rgba background; /* Only valid when have_background == true */ struct rgb background; /* Only valid when have_background == true */
} __attribute__((packed)); } __attribute__((packed));
struct cell { struct cell {
@ -231,8 +231,8 @@ struct terminal {
bool print_needs_wrap; bool print_needs_wrap;
struct scroll_region scroll_region; struct scroll_region scroll_region;
struct rgba foreground; struct rgb foreground;
struct rgba background; struct rgb background;
struct { struct {
int col; int col;