* Add n_terminal_image argument to put_image_{sixel|osc5379}(). * Use struct winsize to calculate ppc and ppl.
This commit is contained in:
committed by
Tatsuya Kinoshita
parent
f64d6bb899
commit
982a8feab0
7
image.c
7
image.c
@@ -195,8 +195,8 @@ syncImage(void)
|
||||
n_terminal_image = 0;
|
||||
}
|
||||
|
||||
void put_image_osc5379(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh);
|
||||
void put_image_sixel(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh);
|
||||
void put_image_osc5379(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image);
|
||||
void put_image_sixel(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image);
|
||||
|
||||
void
|
||||
drawImage()
|
||||
@@ -247,7 +247,8 @@ drawImage()
|
||||
i->sx / pixel_per_char_i,
|
||||
i->sy / pixel_per_line_i,
|
||||
(i->width + i->sx % pixel_per_char_i + pixel_per_char_i - 1) / pixel_per_char_i,
|
||||
(i->height + i->sy % pixel_per_line_i + pixel_per_line_i - 1) / pixel_per_line_i);
|
||||
(i->height + i->sy % pixel_per_line_i + pixel_per_line_i - 1) / pixel_per_line_i,
|
||||
n_terminal_image);
|
||||
|
||||
continue ;
|
||||
}
|
||||
|
24
terms.c
24
terms.c
@@ -468,7 +468,7 @@ writestr(char *s)
|
||||
#define MOVE(line,column) writestr(tgoto(T_cm,column,line));
|
||||
|
||||
void
|
||||
put_image_osc5379(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh)
|
||||
put_image_osc5379(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image)
|
||||
{
|
||||
Str buf;
|
||||
char *size ;
|
||||
@@ -578,10 +578,10 @@ void ttymode_set(int mode, int imode);
|
||||
void ttymode_reset(int mode, int imode);
|
||||
|
||||
void
|
||||
put_image_sixel(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh)
|
||||
put_image_sixel(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image)
|
||||
{
|
||||
pid_t pid;
|
||||
int do_anim;
|
||||
int do_anim;
|
||||
MySignalHandler(*volatile previntr) (SIGNAL_ARG);
|
||||
MySignalHandler(*volatile prevquit) (SIGNAL_ARG);
|
||||
MySignalHandler(*volatile prevstop) (SIGNAL_ARG);
|
||||
@@ -589,7 +589,7 @@ put_image_sixel(char *url, int x, int y, int w, int h, int sx, int sy, int sw, i
|
||||
MOVE(y,x);
|
||||
flush_tty();
|
||||
|
||||
do_anim = (x == 0 && y == 0 && sx == 0 && sy == 0) ;
|
||||
do_anim = (n_terminal_image == 1 && x == 0 && y == 0 && sx == 0 && sy == 0);
|
||||
|
||||
previntr = mySignal(SIGINT, SIG_IGN);
|
||||
prevquit = mySignal(SIGQUIT, SIG_IGN);
|
||||
@@ -663,18 +663,14 @@ get_pixel_per_cell(int *ppc, int *ppl)
|
||||
int wp,hp,wc,hc;
|
||||
int i;
|
||||
|
||||
/* screen replaces ws.ws_col and ws.ws_row alone. */
|
||||
#if 0
|
||||
#ifdef TIOCGWINSZ
|
||||
struct winsize ws;
|
||||
if (ioctl(tty, TIOCGWINSZ, &ws) == 0 && ws.ws_ypixel > 0 && ws.ws_row > 0 &&
|
||||
ws.ws_xpixel > 0 && ws.ws_col > 0) {
|
||||
*ppc = ws.ws_xpixel / ws.ws_col;
|
||||
*ppl = ws.ws_ypixel / ws.ws_row;
|
||||
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
fputs("\x1b[14t\x1b[18t",ttyf); flush_tty();
|
||||
@@ -694,10 +690,14 @@ get_pixel_per_cell(int *ppc, int *ppl)
|
||||
p[len] = '\0';
|
||||
|
||||
if (sscanf(buf,"\x1b[4;%d;%dt\x1b[8;%d;%dt",&hp,&wp,&hc,&wc) == 4) {
|
||||
*ppc = wp / wc;
|
||||
*ppl = hp / hc;
|
||||
|
||||
return 1;
|
||||
if (wp > 0 && wc > 0 && hp > 0 && hc > 0) {
|
||||
*ppc = wp / wc;
|
||||
*ppl = hp / hc;
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
p += len;
|
||||
left -= len;
|
||||
|
Reference in New Issue
Block a user