forked from enlightenment/terminology
tidy yp tycat - handle edj and mp3/audio files - ahare extensions
handling and filtering, actually free tup termblocks when no longer referenced without needing a gc, etc. ... SVN revision: 83441
This commit is contained in:
parent
510e14530f
commit
0015767f4b
|
@ -37,9 +37,12 @@ termptygfx.c termptygfx.h \
|
||||||
termptyext.c termptyext.h \
|
termptyext.c termptyext.h \
|
||||||
utf8.c utf8.h \
|
utf8.c utf8.h \
|
||||||
win.c win.h \
|
win.c win.h \
|
||||||
utils.c utils.h
|
utils.c utils.h \
|
||||||
|
extns.h
|
||||||
|
|
||||||
tycat_SOURCES = tycat.c
|
tycat_SOURCES = \
|
||||||
|
tycat.c \
|
||||||
|
extns.h
|
||||||
|
|
||||||
tycat_CPPFLAGS = -I. \
|
tycat_CPPFLAGS = -I. \
|
||||||
-DPACKAGE_BIN_DIR=\"$(bindir)\" -DPACKAGE_LIB_DIR=\"$(libdir)\" \
|
-DPACKAGE_BIN_DIR=\"$(bindir)\" -DPACKAGE_LIB_DIR=\"$(libdir)\" \
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
static const char *extn_img[] =
|
||||||
|
{
|
||||||
|
".png", ".jpg", ".jpeg", ".jpe", ".jfif", ".tif", ".tiff", ".gif",
|
||||||
|
".bmp", ".ico", ".ppm", ".pgm", ".pbm", ".pnm", ".xpm", ".psd", ".wbmp",
|
||||||
|
".cur", ".xcf", ".xcf.gz", ".arw", ".cr2", ".crw", ".dcr", ".dng", ".k25",
|
||||||
|
".kdc", ".erf", ".mrw", ".nef", ".nrf", ".nrw", ".orf", ".raw", ".rw2",
|
||||||
|
".rw2", ".pef", ".raf", ".sr2", ".srf", ".x3f", ".webp",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char *extn_scale[] =
|
||||||
|
{
|
||||||
|
".svg", ".svgz", ".svg.gz", ".ps", ".ps.gz", ".pdf",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char *extn_edj[] =
|
||||||
|
{
|
||||||
|
".edj",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char *extn_mov[] =
|
||||||
|
{
|
||||||
|
".asf", ".avi", ".bdm", ".bdmv", ".clpi", ".cpi", ".dv", ".fla", ".flv",
|
||||||
|
".m1v", ".m2t", ".m2v", ".m4v", ".mkv", ".mov", ".mp2", ".mp2ts", ".mp4",
|
||||||
|
".mpe", ".mpeg", ".mpg", ".mpl", ".mpls", ".mts", ".mxf", ".nut", ".nuv",
|
||||||
|
".ogg", ".ogm", ".ogv", ".qt", ".rm", ".rmj", ".rmm", ".rms", ".rmvb",
|
||||||
|
".rmx", ".rv", ".swf", ".ts", ".weba", ".webm", ".wmv", ".3g2", ".3gp",
|
||||||
|
".3gp2", ".3gpp", ".3gpp2", ".3p2", ".264",
|
||||||
|
".mp3", ".aac", ".wav",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char *extn_aud[] =
|
||||||
|
{
|
||||||
|
".mp3", ".aac", ".wav",
|
||||||
|
NULL
|
||||||
|
};
|
|
@ -38,39 +38,7 @@ struct _Media
|
||||||
static Evas_Smart *_smart = NULL;
|
static Evas_Smart *_smart = NULL;
|
||||||
static Evas_Smart_Class _parent_sc = EVAS_SMART_CLASS_INIT_NULL;
|
static Evas_Smart_Class _parent_sc = EVAS_SMART_CLASS_INIT_NULL;
|
||||||
|
|
||||||
static const char *extn_img[] =
|
#include "extns.h"
|
||||||
{
|
|
||||||
".png", ".jpg", ".jpeg", ".jpe", ".jfif", ".tif", ".tiff", ".gif",
|
|
||||||
".bmp", ".ico", ".ppm", ".pgm", ".pbm", ".pnm", ".xpm", ".psd", ".wbmp",
|
|
||||||
".cur", ".xcf", ".xcf.gz", ".arw", ".cr2", ".crw", ".dcr", ".dng", ".k25",
|
|
||||||
".kdc", ".erf", ".mrw", ".nef", ".nrf", ".nrw", ".orf", ".raw", ".rw2",
|
|
||||||
".rw2", ".pef", ".raf", ".sr2", ".srf", ".x3f", ".webp",
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
static const char *extn_scale[] =
|
|
||||||
{
|
|
||||||
".svg", ".svgz", ".svg.gz", ".ps", ".ps.gz", ".pdf",
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
static const char *extn_edj[] =
|
|
||||||
{
|
|
||||||
".edj",
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
static const char *extn_mov[] =
|
|
||||||
{
|
|
||||||
".asf", ".avi", ".bdm", ".bdmv", ".clpi", ".cpi", ".dv", ".fla", ".flv",
|
|
||||||
".m1v", ".m2t", ".m2v", ".m4v", ".mkv", ".mov", ".mp2", ".mp2ts", ".mp4",
|
|
||||||
".mpe", ".mpeg", ".mpg", ".mpl", ".mpls", ".mts", ".mxf", ".nut", ".nuv",
|
|
||||||
".ogg", ".ogm", ".ogv", ".qt", ".rm", ".rmj", ".rmm", ".rms", ".rmvb",
|
|
||||||
".rmx", ".rv", ".swf", ".ts", ".weba", ".webm", ".wmv", ".3g2", ".3gp",
|
|
||||||
".3gp2", ".3gpp", ".3gpp2", ".3p2", ".264",
|
|
||||||
".mp3", ".aac", ".wav",
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
static const char *
|
static const char *
|
||||||
_is_fmt(const char *f, const char **extn)
|
_is_fmt(const char *f, const char **extn)
|
||||||
|
|
|
@ -514,10 +514,12 @@ termpty_resize(Termpty *ty, int w, int h)
|
||||||
c1 = &(olds[y * oldw]);
|
c1 = &(olds[y * oldw]);
|
||||||
c2 = &(TERMPTY_SCREEN(ty, 0, y));
|
c2 = &(TERMPTY_SCREEN(ty, 0, y));
|
||||||
_termpty_text_copy(ty, c1, c2, ww);
|
_termpty_text_copy(ty, c1, c2, ww);
|
||||||
|
termpty_cell_fill(ty, NULL, c1, ww);
|
||||||
|
|
||||||
c1 = &(olds2[y * oldw]);
|
c1 = &(olds2[y * oldw]);
|
||||||
c2 = &(ty->screen2[y * ty->w]);
|
c2 = &(ty->screen2[y * ty->w]);
|
||||||
_termpty_text_copy(ty, c1, c2, ww);
|
_termpty_text_copy(ty, c1, c2, ww);
|
||||||
|
termpty_cell_fill(ty, NULL, c1, ww);
|
||||||
}
|
}
|
||||||
|
|
||||||
ty->circular_offset = 0;
|
ty->circular_offset = 0;
|
||||||
|
@ -634,5 +636,103 @@ termpty_block_id_get(Termcell *cell, int *x, int *y)
|
||||||
Termblock *
|
Termblock *
|
||||||
termpty_block_get(Termpty *ty, int id)
|
termpty_block_get(Termpty *ty, int id)
|
||||||
{
|
{
|
||||||
|
if (!ty->block.blocks) return NULL;
|
||||||
return eina_hash_find(ty->block.blocks, &id);
|
return eina_hash_find(ty->block.blocks, &id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
_handle_block_codepoint_overwrite(Termpty *ty, int oldc, int newc)
|
||||||
|
{
|
||||||
|
Termblock *tb;
|
||||||
|
int ido = 0, idn = 0;
|
||||||
|
|
||||||
|
if (oldc & 0x80000000) ido = (oldc >> 18) & 0x1fff;
|
||||||
|
if (newc & 0x80000000) idn = (newc >> 18) & 0x1fff;
|
||||||
|
if (((oldc & 0x80000000) && (newc & 0x80000000)) && (idn == ido)) return;
|
||||||
|
|
||||||
|
if (oldc & 0x80000000)
|
||||||
|
{
|
||||||
|
tb = termpty_block_get(ty, ido);
|
||||||
|
if (!tb) return;
|
||||||
|
tb->refs--;
|
||||||
|
if (tb->refs == 0)
|
||||||
|
{
|
||||||
|
if (tb->active)
|
||||||
|
ty->block.active = eina_list_remove(ty->block.active, tb);
|
||||||
|
eina_hash_del(ty->block.blocks, &ido, tb);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newc & 0x80000000)
|
||||||
|
{
|
||||||
|
tb = termpty_block_get(ty, idn);
|
||||||
|
if (!tb) return;
|
||||||
|
tb->refs++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
termpty_cell_copy(Termpty *ty, Termcell *src, Termcell *dst, int n)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < n; i++)
|
||||||
|
{
|
||||||
|
_handle_block_codepoint_overwrite(ty, dst[i].codepoint, src[i].codepoint);
|
||||||
|
dst[i] = src[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
termpty_cell_swap(Termpty *ty __UNUSED__, Termcell *src, Termcell *dst, int n)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
Termcell t;
|
||||||
|
|
||||||
|
for (i = 0; i < n; i++)
|
||||||
|
{
|
||||||
|
t = dst[i];
|
||||||
|
dst[i] = src[i];
|
||||||
|
dst[i] = t;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
termpty_cell_fill(Termpty *ty, Termcell *src, Termcell *dst, int n)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (src)
|
||||||
|
{
|
||||||
|
for (i = 0; i < n; i++)
|
||||||
|
{
|
||||||
|
_handle_block_codepoint_overwrite(ty, dst[i].codepoint, src[0].codepoint);
|
||||||
|
dst[i] = src[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (i = 0; i < n; i++)
|
||||||
|
{
|
||||||
|
_handle_block_codepoint_overwrite(ty, dst[i].codepoint, 0);
|
||||||
|
memset(&(dst[i]), 0, sizeof(*dst));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
termpty_cell_codepoint_att_fill(Termpty *ty, int codepoint, Termatt att, Termcell *dst, int n)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < n; i++)
|
||||||
|
{
|
||||||
|
_handle_block_codepoint_overwrite(ty, dst[i].codepoint, codepoint);
|
||||||
|
dst[i].codepoint = codepoint;
|
||||||
|
dst[i].att = att;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -141,6 +141,7 @@ struct _Termblock
|
||||||
{
|
{
|
||||||
int id;
|
int id;
|
||||||
int type;
|
int type;
|
||||||
|
int refs;
|
||||||
short w, h;
|
short w, h;
|
||||||
short x, y;
|
short x, y;
|
||||||
const char *path;
|
const char *path;
|
||||||
|
@ -177,6 +178,11 @@ void termpty_block_insert(Termpty *ty, int ch, Termblock *blk);
|
||||||
int termpty_block_id_get(Termcell *cell, int *x, int *y);
|
int termpty_block_id_get(Termcell *cell, int *x, int *y);
|
||||||
Termblock *termpty_block_get(Termpty *ty, int id);
|
Termblock *termpty_block_get(Termpty *ty, int id);
|
||||||
|
|
||||||
|
void termpty_cell_copy(Termpty *ty, Termcell *src, Termcell *dst, int n);
|
||||||
|
void termpty_cell_swap(Termpty *ty, Termcell *src, Termcell *dst, int n);
|
||||||
|
void termpty_cell_fill(Termpty *ty, Termcell *src, Termcell *dst, int n);
|
||||||
|
void termpty_cell_codepoint_att_fill(Termpty *ty, int codepoint, Termatt att, Termcell *dst, int n);
|
||||||
|
|
||||||
extern int _termpty_log_dom;
|
extern int _termpty_log_dom;
|
||||||
|
|
||||||
#define TERMPTY_SCREEN(Tpty, X, Y) \
|
#define TERMPTY_SCREEN(Tpty, X, Y) \
|
||||||
|
|
|
@ -461,9 +461,9 @@ _handle_esc_csi(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
|
||||||
for (x = ty->state.cx; x < (ty->w); x++)
|
for (x = ty->state.cx; x < (ty->w); x++)
|
||||||
{
|
{
|
||||||
if (x < lim)
|
if (x < lim)
|
||||||
cells[x] = cells[x + arg];
|
termpty_cell_copy(ty, &(cells[x + arg]), &(cells[x]), 1);
|
||||||
else
|
else
|
||||||
memset(&(cells[x]), 0, sizeof(*cells));
|
termpty_cell_fill(ty, NULL, &(cells[x]), 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -702,13 +702,10 @@ _handle_esc_csi(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
|
||||||
size = ty->w * ty->h;
|
size = ty->w * ty->h;
|
||||||
// swap screen content now
|
// swap screen content now
|
||||||
for (i = 0; i < size; i++)
|
for (i = 0; i < size; i++)
|
||||||
{
|
termpty_cell_swap(ty,
|
||||||
Termcell t;
|
&(ty->screen[(i + ty->circular_offset) % ty->h]),
|
||||||
|
&(ty->screen2[i]),
|
||||||
t = ty->screen[(i + ty->circular_offset) % ty->h];
|
1);
|
||||||
ty->screen[(i + ty->circular_offset) % ty->h] = ty->screen2[i];
|
|
||||||
ty->screen2[i] = t;
|
|
||||||
}
|
|
||||||
ty->altbuf = !ty->altbuf;
|
ty->altbuf = !ty->altbuf;
|
||||||
if (ty->cb.cancel_sel.func)
|
if (ty->cb.cancel_sel.func)
|
||||||
ty->cb.cancel_sel.func(ty->cb.cancel_sel.data);
|
ty->cb.cancel_sel.func(ty->cb.cancel_sel.data);
|
||||||
|
@ -963,10 +960,18 @@ static int
|
||||||
_handle_esc_terminology(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
|
_handle_esc_terminology(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
|
||||||
{
|
{
|
||||||
Eina_Unicode *cc;
|
Eina_Unicode *cc;
|
||||||
Eina_Unicode buf[4096], *b;
|
Eina_Unicode *buf, bufsmall[1024], *b;
|
||||||
char *s;
|
char *s;
|
||||||
int slen = 0;
|
int blen = 0, slen = 0;
|
||||||
|
|
||||||
|
cc = (Eina_Unicode *)c;
|
||||||
|
while ((cc < ce) && (*cc != 0x0))
|
||||||
|
{
|
||||||
|
blen++;
|
||||||
|
cc++;
|
||||||
|
}
|
||||||
|
buf = bufsmall;
|
||||||
|
if (blen > (int)(sizeof(bufsmall) - 10)) buf = malloc(blen + 10);
|
||||||
cc = (Eina_Unicode *)c;
|
cc = (Eina_Unicode *)c;
|
||||||
b = buf;
|
b = buf;
|
||||||
while ((cc < ce) && (*cc != 0x0))
|
while ((cc < ce) && (*cc != 0x0))
|
||||||
|
@ -976,8 +981,12 @@ _handle_esc_terminology(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
|
||||||
cc++;
|
cc++;
|
||||||
}
|
}
|
||||||
*b = 0;
|
*b = 0;
|
||||||
if (*cc == 0x0) cc++;
|
if ((*cc == 0x0) && (cc < ce)) cc++;
|
||||||
else return 0;
|
else
|
||||||
|
{
|
||||||
|
if (buf != bufsmall) free(buf);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
// commands are stored in the buffer, 0 bytes not allowd (end marker)
|
// commands are stored in the buffer, 0 bytes not allowd (end marker)
|
||||||
s = eina_unicode_unicode_to_utf8(buf, &slen);
|
s = eina_unicode_unicode_to_utf8(buf, &slen);
|
||||||
ty->cur_cmd = s;
|
ty->cur_cmd = s;
|
||||||
|
@ -987,6 +996,7 @@ _handle_esc_terminology(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
|
||||||
}
|
}
|
||||||
ty->cur_cmd = NULL;
|
ty->cur_cmd = NULL;
|
||||||
if (s) free(s);
|
if (s) free(s);
|
||||||
|
if (buf != bufsmall) free(buf);
|
||||||
return cc - c;
|
return cc - c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1112,7 +1122,7 @@ _handle_esc(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
|
||||||
if (len < 2) return 0;
|
if (len < 2) return 0;
|
||||||
if (c[1] == '8')
|
if (c[1] == '8')
|
||||||
{
|
{
|
||||||
int i, size;
|
int size;
|
||||||
Termcell *cells;
|
Termcell *cells;
|
||||||
|
|
||||||
DBG("reset to init mode and clear then fill with E");
|
DBG("reset to init mode and clear then fill with E");
|
||||||
|
@ -1126,7 +1136,10 @@ _handle_esc(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
|
||||||
size = ty->w * ty->h;
|
size = ty->w * ty->h;
|
||||||
if (cells)
|
if (cells)
|
||||||
{
|
{
|
||||||
for (i = 0; i < size; i++) cells[i].codepoint = 'E';
|
Termatt att;
|
||||||
|
|
||||||
|
memset((&att), 0, sizeof(att));
|
||||||
|
termpty_cell_codepoint_att_fill(ty, 'E', att, cells, size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 2;
|
return 2;
|
||||||
|
@ -1293,6 +1306,7 @@ _termpty_handle_seq(Termpty *ty, Eina_Unicode *c, Eina_Unicode *ce)
|
||||||
default:
|
default:
|
||||||
ERR("unhandled char 0x%02x", c[0]);
|
ERR("unhandled char 0x%02x", c[0]);
|
||||||
ty->state.had_cr = 0;
|
ty->state.had_cr = 0;
|
||||||
|
sleep(1);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,17 +20,12 @@
|
||||||
static void
|
static void
|
||||||
_text_clear(Termpty *ty, Termcell *cells, int count, int val, Eina_Bool inherit_att)
|
_text_clear(Termpty *ty, Termcell *cells, int count, int val, Eina_Bool inherit_att)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
Termcell src;
|
Termcell src;
|
||||||
|
|
||||||
memset(&src, 0, sizeof (src));
|
memset(&src, 0, sizeof(src));
|
||||||
|
|
||||||
src.codepoint = val;
|
src.codepoint = val;
|
||||||
|
|
||||||
if (inherit_att) src.att = ty->state.att;
|
if (inherit_att) src.att = ty->state.att;
|
||||||
|
termpty_cell_fill(ty, &src, cells, count);
|
||||||
for (i = 0; i < count; i++)
|
|
||||||
memcpy(cells + i, &src, sizeof (src));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -43,7 +38,12 @@ _text_save_top(Termpty *ty)
|
||||||
ts->w = ty->w;
|
ts->w = ty->w;
|
||||||
_termpty_text_copy(ty, &(TERMPTY_SCREEN(ty, 0, 0)), ts->cell, ty->w);
|
_termpty_text_copy(ty, &(TERMPTY_SCREEN(ty, 0, 0)), ts->cell, ty->w);
|
||||||
if (!ty->back) ty->back = calloc(1, sizeof(Termsave *) * ty->backmax);
|
if (!ty->back) ty->back = calloc(1, sizeof(Termsave *) * ty->backmax);
|
||||||
if (ty->back[ty->backpos]) free(ty->back[ty->backpos]);
|
if (ty->back[ty->backpos])
|
||||||
|
{
|
||||||
|
termpty_cell_fill(ty, NULL, ty->back[ty->backpos]->cell,
|
||||||
|
ty->back[ty->backpos]->w);
|
||||||
|
free(ty->back[ty->backpos]);
|
||||||
|
}
|
||||||
ty->back[ty->backpos] = ts;
|
ty->back[ty->backpos] = ts;
|
||||||
ty->backpos++;
|
ty->backpos++;
|
||||||
if (ty->backpos >= ty->backmax) ty->backpos = 0;
|
if (ty->backpos >= ty->backmax) ty->backpos = 0;
|
||||||
|
@ -52,9 +52,9 @@ _text_save_top(Termpty *ty)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_termpty_text_copy(Termpty *ty __UNUSED__, Termcell *cells, Termcell *dest, int count)
|
_termpty_text_copy(Termpty *ty, Termcell *cells, Termcell *dest, int count)
|
||||||
{
|
{
|
||||||
memcpy(dest, cells, sizeof(*(cells)) * count);
|
termpty_cell_copy(ty, cells, dest, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -190,20 +190,18 @@ _termpty_text_append(Termpty *ty, const Eina_Unicode *codepoints, int len)
|
||||||
if (ty->state.insert)
|
if (ty->state.insert)
|
||||||
{
|
{
|
||||||
for (j = ty->w - 1; j > ty->state.cx; j--)
|
for (j = ty->w - 1; j > ty->state.cx; j--)
|
||||||
cells[j] = cells[j - 1];
|
termpty_cell_copy(ty, &(cells[j - 1]), &(cells[j]), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
g = _termpty_charset_trans(codepoints[i], ty->state.charsetch);
|
g = _termpty_charset_trans(codepoints[i], ty->state.charsetch);
|
||||||
|
|
||||||
cells[ty->state.cx].codepoint = g;
|
termpty_cell_codepoint_att_fill(ty, g, ty->state.att,
|
||||||
cells[ty->state.cx].att = ty->state.att;
|
&(cells[ty->state.cx]), 1);
|
||||||
#if defined(SUPPORT_DBLWIDTH)
|
#if defined(SUPPORT_DBLWIDTH)
|
||||||
cells[ty->state.cx].att.dblwidth = _termpty_is_dblwidth_get(ty, g);
|
cells[ty->state.cx].att.dblwidth = _termpty_is_dblwidth_get(ty, g);
|
||||||
if ((cells[ty->state.cx].att.dblwidth) && (ty->state.cx < (ty->w - 1)))
|
if ((cells[ty->state.cx].att.dblwidth) && (ty->state.cx < (ty->w - 1)))
|
||||||
{
|
termpty_cell_codepoint_att_fill(ty, 0, cells[ty->state.cx].att,
|
||||||
cells[ty->state.cx + 1].codepoint = 0;
|
&(cells[ty->state.cx + 1]), 1);
|
||||||
cells[ty->state.cx + 1].att = cells[ty->state.cx].att;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
if (ty->state.wrap)
|
if (ty->state.wrap)
|
||||||
{
|
{
|
||||||
|
@ -330,7 +328,7 @@ void
|
||||||
_termpty_clear_all(Termpty *ty)
|
_termpty_clear_all(Termpty *ty)
|
||||||
{
|
{
|
||||||
if (!ty->screen) return;
|
if (!ty->screen) return;
|
||||||
memset(ty->screen, 0, sizeof(*(ty->screen)) * ty->w * ty->h);
|
termpty_cell_fill(ty, NULL, ty->screen, ty->w * ty->h);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -24,6 +24,8 @@ Evas_Object *o = NULL;
|
||||||
struct termios told, tnew;
|
struct termios told, tnew;
|
||||||
int tw = 0, th = 0, cw = 0, ch = 0;
|
int tw = 0, th = 0, cw = 0, ch = 0;
|
||||||
|
|
||||||
|
#include "extns.h"
|
||||||
|
|
||||||
static int
|
static int
|
||||||
echo_off(void)
|
echo_off(void)
|
||||||
{
|
{
|
||||||
|
@ -55,6 +57,21 @@ scaleterm(int w, int h, int *iw, int *ih)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
is_fmt(const char *f, const char **extn)
|
||||||
|
{
|
||||||
|
int i, len, l;
|
||||||
|
|
||||||
|
len = strlen(f);
|
||||||
|
for (i = 0; extn[i]; i++)
|
||||||
|
{
|
||||||
|
l = strlen(extn[i]);
|
||||||
|
if (len < l) continue;
|
||||||
|
if (!strcasecmp(extn[i], f + len - l)) return extn[i];
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
prnt(const char *path, int w, int h, int mode)
|
prnt(const char *path, int w, int h, int mode)
|
||||||
{
|
{
|
||||||
|
@ -84,7 +101,6 @@ prnt(const char *path, int w, int h, int mode)
|
||||||
line[i++] = 'e';
|
line[i++] = 'e';
|
||||||
line[i++] = 0;
|
line[i++] = 0;
|
||||||
line[i++] = '\n';
|
line[i++] = '\n';
|
||||||
line[i++] = 0;
|
|
||||||
for (y = 0; y < h; y++)
|
for (y = 0; y < h; y++)
|
||||||
{
|
{
|
||||||
if (write(0, line, i) < 0) perror("write");
|
if (write(0, line, i) < 0) perror("write");
|
||||||
|
@ -164,15 +180,24 @@ main(int argc, char **argv)
|
||||||
rp = ecore_file_realpath(path);
|
rp = ecore_file_realpath(path);
|
||||||
if (rp)
|
if (rp)
|
||||||
{
|
{
|
||||||
o = evas_object_image_add(evas);
|
if ((is_fmt(rp, extn_img)) ||
|
||||||
evas_object_image_file_set(o, rp, NULL);
|
(is_fmt(rp, extn_scale)) ||
|
||||||
evas_object_image_size_get(o, &w, &h);
|
(is_fmt(rp, extn_mov)))
|
||||||
if ((w >= 0) && (h > 0))
|
|
||||||
{
|
{
|
||||||
scaleterm(w, h, &iw, &ih);
|
o = evas_object_image_add(evas);
|
||||||
prnt(rp, iw, ih, mode);
|
evas_object_image_file_set(o, rp, NULL);
|
||||||
|
evas_object_image_size_get(o, &w, &h);
|
||||||
|
if ((w >= 0) && (h > 0))
|
||||||
|
{
|
||||||
|
scaleterm(w, h, &iw, &ih);
|
||||||
|
prnt(rp, iw, ih, mode);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
evas_object_del(o);
|
||||||
|
o = NULL;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if (is_fmt(rp, extn_edj))
|
||||||
{
|
{
|
||||||
Eina_Bool ok = EINA_TRUE;
|
Eina_Bool ok = EINA_TRUE;
|
||||||
|
|
||||||
|
@ -199,36 +224,44 @@ main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
scaleterm(mw, mh, &iw, &ih);
|
scaleterm(mw, mh, &iw, &ih);
|
||||||
prnt(rp, iw, ih, mode);
|
prnt(rp, iw, ih, mode);
|
||||||
|
goto done;
|
||||||
}
|
}
|
||||||
else
|
evas_object_del(o);
|
||||||
|
o = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((is_fmt(rp, extn_aud)) ||
|
||||||
|
(is_fmt(rp, extn_mov)))
|
||||||
|
{
|
||||||
|
Eina_Bool ok = EINA_TRUE;
|
||||||
|
|
||||||
|
o = emotion_object_add(evas);
|
||||||
|
ok = emotion_object_init(o, NULL);
|
||||||
|
if (ok)
|
||||||
{
|
{
|
||||||
ok = EINA_TRUE;
|
if (emotion_object_file_set(o, rp))
|
||||||
|
|
||||||
evas_object_del(o);
|
|
||||||
|
|
||||||
o = emotion_object_add(evas);
|
|
||||||
ok = emotion_object_init(o, NULL);
|
|
||||||
if (ok)
|
|
||||||
{
|
{
|
||||||
if (emotion_object_file_set(o, rp))
|
emotion_object_audio_mute_set(o, EINA_TRUE);
|
||||||
|
if (emotion_object_video_handled_get(o))
|
||||||
{
|
{
|
||||||
emotion_object_audio_mute_set(o, EINA_TRUE);
|
emotion_object_size_get(o, &w, &h);
|
||||||
if (emotion_object_video_handled_get(o))
|
if ((w >= 0) && (h > 0))
|
||||||
{
|
{
|
||||||
emotion_object_size_get(o, &w, &h);
|
scaleterm(w, h, &iw, &ih);
|
||||||
if ((w >= 0) && (h > 0))
|
prnt(rp, iw, ih, mode);
|
||||||
{
|
|
||||||
scaleterm(w, h, &iw, &ih);
|
|
||||||
prnt(rp, iw, ih, mode);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
prnt(rp, tw, 3, NOIMG);
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
prnt(rp, tw, 3, NOIMG);
|
||||||
|
goto done;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
evas_object_del(o);
|
||||||
|
o = NULL;
|
||||||
}
|
}
|
||||||
evas_object_del(o);
|
done:
|
||||||
|
if (o) evas_object_del(o);
|
||||||
|
o = NULL;
|
||||||
free(rp);
|
free(rp);
|
||||||
}
|
}
|
||||||
evas_norender(evas);
|
evas_norender(evas);
|
||||||
|
|
Loading…
Reference in New Issue