miniview: display correct colors
This commit is contained in:
parent
42cbf2f0ed
commit
b38defd518
147
src/bin/col.c
147
src/bin/col.c
|
@ -7,11 +7,14 @@ typedef struct _Color Color;
|
||||||
|
|
||||||
struct _Color
|
struct _Color
|
||||||
{
|
{
|
||||||
unsigned char r, g, b, a;
|
unsigned char r;
|
||||||
|
unsigned char g;
|
||||||
|
unsigned char b;
|
||||||
|
unsigned char a;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static Color colors[2][2][12];
|
||||||
static const Color colors[2][2][12] =
|
static const Color default_colors[2][2][12] =
|
||||||
{
|
{
|
||||||
{ // normal
|
{ // normal
|
||||||
{ // normal
|
{ // normal
|
||||||
|
@ -75,7 +78,8 @@ static const Color colors[2][2][12] =
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static const Color colors256[256] =
|
static Color colors256[256];
|
||||||
|
static const Color default_colors256[256] =
|
||||||
{
|
{
|
||||||
// basic 16 repeated
|
// basic 16 repeated
|
||||||
{ 0x00, 0x00, 0x00, 0xff }, // COL_BLACK
|
{ 0x00, 0x00, 0x00, 0xff }, // COL_BLACK
|
||||||
|
@ -381,84 +385,62 @@ void
|
||||||
colors_term_init(Evas_Object *textgrid, Evas_Object *bg, Config *config)
|
colors_term_init(Evas_Object *textgrid, Evas_Object *bg, Config *config)
|
||||||
{
|
{
|
||||||
int c, n;
|
int c, n;
|
||||||
int r, g, b, a;
|
|
||||||
char buf[32];
|
char buf[32];
|
||||||
|
Color *color;
|
||||||
|
|
||||||
for (c = 0; c < 4 * 12; c++)
|
for (c = 0; c < 4 * 12; c++)
|
||||||
{
|
{
|
||||||
|
n = c + (24 * (c / 24));
|
||||||
|
color = &colors[c / 24][(c % 24) / 12][c % 12];
|
||||||
if (config->colors_use)
|
if (config->colors_use)
|
||||||
{
|
{
|
||||||
n = c + (24 * (c / 24));
|
color->r = config->colors[c].r;
|
||||||
|
color->g = config->colors[c].g;
|
||||||
r = config->colors[c].r;
|
color->b = config->colors[c].b;
|
||||||
g = config->colors[c].g;
|
color->a = config->colors[c].a;
|
||||||
b = config->colors[c].b;
|
|
||||||
a = config->colors[c].a;
|
|
||||||
/* normal */
|
|
||||||
evas_object_textgrid_palette_set
|
|
||||||
(textgrid, EVAS_TEXTGRID_PALETTE_STANDARD, n,
|
|
||||||
r, g, b, a);
|
|
||||||
/* faint */
|
|
||||||
evas_object_textgrid_palette_set
|
|
||||||
(textgrid, EVAS_TEXTGRID_PALETTE_STANDARD, n + 24,
|
|
||||||
r / 2, g / 2, b / 2, a / 2);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
snprintf(buf, sizeof(buf) - 1, "c%i", c);
|
snprintf(buf, sizeof(buf) - 1, "c%i", c);
|
||||||
|
if (!edje_object_color_class_get(bg, buf,
|
||||||
n = c + (24 * (c / 24));
|
(int*)&color->r,
|
||||||
|
(int*)&color->g,
|
||||||
if (edje_object_color_class_get(bg, buf,
|
(int*)&color->b,
|
||||||
&r, &g, &b, &a,
|
(int*)&color->a,
|
||||||
NULL, NULL, NULL, NULL,
|
NULL, NULL, NULL, NULL,
|
||||||
NULL, NULL, NULL, NULL))
|
NULL, NULL, NULL, NULL))
|
||||||
{
|
{
|
||||||
/* normal */
|
*color = default_colors[c / 24][(c % 24) / 12][c % 12];
|
||||||
evas_object_textgrid_palette_set
|
|
||||||
(textgrid, EVAS_TEXTGRID_PALETTE_STANDARD, n,
|
|
||||||
r, g, b, a);
|
|
||||||
/* faint */
|
|
||||||
evas_object_textgrid_palette_set
|
|
||||||
(textgrid, EVAS_TEXTGRID_PALETTE_STANDARD, n + 24,
|
|
||||||
r / 2, g / 2, b / 2, a / 2);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Color color = colors[c / 24][(c % 24) / 12][c % 12];
|
|
||||||
|
|
||||||
/* normal */
|
|
||||||
evas_object_textgrid_palette_set
|
|
||||||
(textgrid, EVAS_TEXTGRID_PALETTE_STANDARD, n,
|
|
||||||
color.r, color.g, color.b, color.a);
|
|
||||||
/* faint */
|
|
||||||
evas_object_textgrid_palette_set
|
|
||||||
(textgrid, EVAS_TEXTGRID_PALETTE_STANDARD, n + 24,
|
|
||||||
color.r / 2, color.g / 2, color.b / 2, color.a / 2);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* normal */
|
||||||
|
evas_object_textgrid_palette_set(
|
||||||
|
textgrid, EVAS_TEXTGRID_PALETTE_STANDARD, n,
|
||||||
|
color->r, color->g, color->b, color->a);
|
||||||
|
|
||||||
|
/* faint */
|
||||||
|
evas_object_textgrid_palette_set(
|
||||||
|
textgrid, EVAS_TEXTGRID_PALETTE_STANDARD, n + 24,
|
||||||
|
color->r / 2, color->g / 2, color->b / 2, color->a / 2);
|
||||||
}
|
}
|
||||||
for (c = 0; c < 256; c++)
|
for (c = 0; c < 256; c++)
|
||||||
{
|
{
|
||||||
snprintf(buf, sizeof(buf) - 1, "C%i", c);
|
snprintf(buf, sizeof(buf) - 1, "C%i", c);
|
||||||
|
color = &colors256[c];
|
||||||
|
|
||||||
if (edje_object_color_class_get(bg, buf,
|
if (!edje_object_color_class_get(bg, buf,
|
||||||
&r, &g, &b, &a,
|
(int*)&colors256[c].r,
|
||||||
NULL, NULL, NULL, NULL,
|
(int*)&colors256[c].g,
|
||||||
NULL, NULL, NULL, NULL))
|
(int*)&colors256[c].b,
|
||||||
|
(int*)&colors256[c].a,
|
||||||
|
NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL))
|
||||||
{
|
{
|
||||||
evas_object_textgrid_palette_set(
|
*color = default_colors256[c];
|
||||||
textgrid, EVAS_TEXTGRID_PALETTE_EXTENDED, c,
|
|
||||||
r, g, b, a);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Color color = colors256[c];
|
|
||||||
|
|
||||||
evas_object_textgrid_palette_set(
|
|
||||||
textgrid, EVAS_TEXTGRID_PALETTE_EXTENDED, c,
|
|
||||||
color.r, color.g, color.b, color.a);
|
|
||||||
}
|
}
|
||||||
|
evas_object_textgrid_palette_set(
|
||||||
|
textgrid, EVAS_TEXTGRID_PALETTE_EXTENDED, c,
|
||||||
|
color->r, color->g, color->b, color->a);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -468,13 +450,13 @@ colors_standard_get(int set, int col, unsigned char *r, unsigned char *g, unsign
|
||||||
if ((set >= 0) && (set < 4))
|
if ((set >= 0) && (set < 4))
|
||||||
{
|
{
|
||||||
int s1, s2;
|
int s1, s2;
|
||||||
|
|
||||||
s1 = set / 2;
|
s1 = set / 2;
|
||||||
s2 = set % 2;
|
s2 = set % 2;
|
||||||
*r = colors[s1][s2][col].r;
|
*r = default_colors[s1][s2][col].r;
|
||||||
*g = colors[s1][s2][col].g;
|
*g = default_colors[s1][s2][col].g;
|
||||||
*b = colors[s1][s2][col].b;
|
*b = default_colors[s1][s2][col].b;
|
||||||
*a = colors[s1][s2][col].a;
|
*a = default_colors[s1][s2][col].a;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
*r = 0;
|
*r = 0;
|
||||||
|
@ -482,3 +464,34 @@ colors_standard_get(int set, int col, unsigned char *r, unsigned char *g, unsign
|
||||||
*b = 0;
|
*b = 0;
|
||||||
*a = 0;
|
*a = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* if pos >= 256, it's in the 256 colors set */
|
||||||
|
unsigned int color_get(unsigned int pos)
|
||||||
|
{
|
||||||
|
Color *c;
|
||||||
|
|
||||||
|
if (pos >= 256)
|
||||||
|
{
|
||||||
|
pos -= 256;
|
||||||
|
if (pos >= sizeof(colors256)/sizeof(Color))
|
||||||
|
{
|
||||||
|
ERR("AAAAAA");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
c = &colors256[pos];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (pos >= sizeof(colors)/sizeof(Color))
|
||||||
|
{
|
||||||
|
ERR("AAAAAA");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
c = ((Color *)colors) + pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (c->a << 24) |
|
||||||
|
(c->r << 16) |
|
||||||
|
(c->g << 8) |
|
||||||
|
(c->b);
|
||||||
|
}
|
||||||
|
|
|
@ -6,5 +6,6 @@
|
||||||
|
|
||||||
void colors_term_init(Evas_Object *textgrid, Evas_Object *bg, Config *config);
|
void colors_term_init(Evas_Object *textgrid, Evas_Object *bg, Config *config);
|
||||||
void colors_standard_get(int set, int col, unsigned char *r, unsigned char *g, unsigned char *b, unsigned char *a);
|
void colors_standard_get(int set, int col, unsigned char *r, unsigned char *g, unsigned char *b, unsigned char *a);
|
||||||
|
unsigned int color_get(unsigned int pos);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -63,50 +63,73 @@ struct _Miniview
|
||||||
|
|
||||||
static Evas_Smart *_smart = NULL;
|
static Evas_Smart *_smart = NULL;
|
||||||
|
|
||||||
|
static void
|
||||||
|
_draw_cell(const Termpty *ty, unsigned int *pixel, const Termcell *cell)
|
||||||
|
{
|
||||||
|
int fg, bg, fgext, bgext;
|
||||||
|
int inv = ty->state.reverse;
|
||||||
|
|
||||||
|
if (cell->codepoint == 0 ||
|
||||||
|
cell->att.newline ||
|
||||||
|
cell->att.invisible)
|
||||||
|
{
|
||||||
|
*pixel = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// colors
|
||||||
|
fg = cell->att.fg;
|
||||||
|
bg = cell->att.bg;
|
||||||
|
fgext = cell->att.fg256;
|
||||||
|
bgext = cell->att.bg256;
|
||||||
|
|
||||||
|
if ((fg == COL_DEF) && (cell->att.inverse ^ inv))
|
||||||
|
fg = COL_INVERSEBG;
|
||||||
|
if (bg == COL_DEF)
|
||||||
|
{
|
||||||
|
if (cell->att.inverse ^ inv)
|
||||||
|
bg = COL_INVERSE;
|
||||||
|
else if (!bgext)
|
||||||
|
bg = COL_INVIS;
|
||||||
|
}
|
||||||
|
if ((cell->att.fgintense) && (!fgext))
|
||||||
|
fg += 48;
|
||||||
|
if ((cell->att.bgintense) && (!bgext))
|
||||||
|
bg += 48;
|
||||||
|
if (cell->att.inverse ^ inv)
|
||||||
|
{
|
||||||
|
int t;
|
||||||
|
t = fgext; fgext = bgext; bgext = t;
|
||||||
|
t = fg; fg = bg; bg = t;
|
||||||
|
}
|
||||||
|
if ((cell->att.bold) && (!fgext))
|
||||||
|
fg += 12;
|
||||||
|
if ((cell->att.faint) && (!fgext))
|
||||||
|
fg += 24;
|
||||||
|
|
||||||
|
if (bgext)
|
||||||
|
*pixel = color_get(bg + 256);
|
||||||
|
else if (bg && (bg % 12) != COL_INVIS)
|
||||||
|
*pixel = color_get(bg);
|
||||||
|
else if (!isspace(cell->codepoint))
|
||||||
|
{
|
||||||
|
if (fgext)
|
||||||
|
*pixel = color_get(fg + 256);
|
||||||
|
else
|
||||||
|
*pixel = color_get(fg);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
*pixel = 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_draw_line(unsigned int *pixels, Termcell *cells, int length)
|
_draw_line(const Termpty *ty, unsigned int *pixels,
|
||||||
|
const Termcell *cells, int length)
|
||||||
{
|
{
|
||||||
int x;
|
int x;
|
||||||
|
|
||||||
for (x = 0 ; x < length; x++)
|
for (x = 0 ; x < length; x++)
|
||||||
{
|
{
|
||||||
int r, g, b;
|
_draw_cell(ty, pixels + x, cells + x);
|
||||||
|
|
||||||
if (cells[x].codepoint > 0 && !isspace(cells[x].codepoint) &&
|
|
||||||
!cells[x].att.newline && !cells[x].att.tab &&
|
|
||||||
!cells[x].att.invisible && cells[x].att.bg != COL_INVIS)
|
|
||||||
{
|
|
||||||
switch (cells[x].att.fg)
|
|
||||||
{
|
|
||||||
// TODO: get pixel colors from current theme...
|
|
||||||
case 0:
|
|
||||||
r = 180; g = 180; b = 180;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
r = 204; g = 51; b = 51;
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
r = 51; g = 204; b = 51;
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
r = 204; g = 136; b = 51;
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
r = 51; g = 51; b = 204;
|
|
||||||
break;
|
|
||||||
case 6:
|
|
||||||
r = 204; g = 51; b = 204;
|
|
||||||
break;
|
|
||||||
case 7:
|
|
||||||
r = 51; g = 204; b = 204;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
r = 180; g = 180; b = 180;
|
|
||||||
}
|
|
||||||
pixels[x] = (0xff << 24) | (r << 16) | (g << 8) | b;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -301,7 +324,6 @@ _deferred_renderer(void *data)
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
|
|
||||||
|
|
||||||
DBG("ow:%d oh:%d cols:%d img_h:%d", ow, oh, mv->cols, mv->img_h);
|
|
||||||
pixels = evas_object_image_data_get(mv->img, EINA_TRUE);
|
pixels = evas_object_image_data_get(mv->img, EINA_TRUE);
|
||||||
memset(pixels, 0, sizeof(*pixels) * ow * oh);
|
memset(pixels, 0, sizeof(*pixels) * ow * oh);
|
||||||
mv->img_h = oh;
|
mv->img_h = oh;
|
||||||
|
@ -318,15 +340,10 @@ _deferred_renderer(void *data)
|
||||||
{
|
{
|
||||||
cells = termpty_cellrow_get(ty, mv->img_hist + y, &wret);
|
cells = termpty_cellrow_get(ty, mv->img_hist + y, &wret);
|
||||||
if (cells == NULL)
|
if (cells == NULL)
|
||||||
{
|
|
||||||
DBG("y:%d get:%d", y, mv->img_hist + y);
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
_draw_line(&pixels[y * mv->cols], cells, wret);
|
_draw_line(ty, &pixels[y * mv->cols], cells, wret);
|
||||||
}
|
}
|
||||||
DBG("history_len:%d hist:%d img_h:%d rows:%d cols:%d",
|
|
||||||
history_len, mv->img_hist, mv->img_h, mv->rows, mv->cols);
|
|
||||||
evas_object_image_data_set(mv->img, pixels);
|
evas_object_image_data_set(mv->img, pixels);
|
||||||
evas_object_image_pixels_dirty_set(mv->img, EINA_FALSE);
|
evas_object_image_pixels_dirty_set(mv->img, EINA_FALSE);
|
||||||
evas_object_image_data_update_add(mv->img, 0, 0, ow, oh);
|
evas_object_image_data_update_add(mv->img, 0, 0, ow, oh);
|
||||||
|
|
Loading…
Reference in New Issue