| @@ -350,22 +350,25 @@ static long int import_ansi(cucul_canvas_t *cv, | |||||
| unsigned char const *buffer = (unsigned char const*)data; | unsigned char const *buffer = (unsigned char const*)data; | ||||
| unsigned int i, j, skip, dummy = 0; | unsigned int i, j, skip, dummy = 0; | ||||
| unsigned int width = 0, height = 0, wch = 1; | unsigned int width = 0, height = 0, wch = 1; | ||||
| uint32_t savedattr, resizeattr; | |||||
| unsigned long int ch; | unsigned long int ch; | ||||
| int x = 0, y = 0, save_x = 0, save_y = 0; | int x = 0, y = 0, save_x = 0, save_y = 0; | ||||
| cucul_set_canvas_size(cv, width, height); | |||||
| cucul_set_canvas_size(cv, 0, 0); | |||||
| if(utf8) | if(utf8) | ||||
| { | { | ||||
| grcm.dfg = cucul_attr_to_ansi_fg(cv->curattr); | |||||
| grcm.dbg = cucul_attr_to_ansi_bg(cv->curattr); | |||||
| grcm.dfg = CUCUL_DEFAULT; | |||||
| grcm.dbg = CUCUL_TRANSPARENT; | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| grcm.dfg = CUCUL_LIGHTGRAY; | grcm.dfg = CUCUL_LIGHTGRAY; | ||||
| grcm.dbg = CUCUL_BLACK; | grcm.dbg = CUCUL_BLACK; | ||||
| cucul_set_color_ansi(cv, grcm.dfg, grcm.dbg); | |||||
| cucul_set_color_ansi(cv, CUCUL_LIGHTGRAY, CUCUL_BLACK); | |||||
| } | } | ||||
| resizeattr = cucul_get_attr(cv, -1, -1); | |||||
| ansi_parse_grcm(cv, &grcm, 1, &dummy); | ansi_parse_grcm(cv, &grcm, 1, &dummy); | ||||
| for(i = 0; i < size; i += skip) | for(i = 0; i < size; i += skip) | ||||
| @@ -491,8 +494,12 @@ static long int import_ansi(cucul_canvas_t *cv, | |||||
| break; | break; | ||||
| case 'K': /* EL - Erase In Line */ | case 'K': /* EL - Erase In Line */ | ||||
| if(width < 80) | if(width < 80) | ||||
| cucul_set_color_ansi(cv, grcm.dfg, grcm.dbg); | |||||
| { | |||||
| savedattr = cucul_get_attr(cv, -1, -1); | |||||
| cucul_set_attr(cv, resizeattr); | |||||
| cucul_set_canvas_size(cv, width = 80, height); | cucul_set_canvas_size(cv, width = 80, height); | ||||
| cucul_set_attr(cv, savedattr); | |||||
| } | |||||
| for(j = x; j < 80; j++) | for(j = x; j < 80; j++) | ||||
| cucul_put_char(cv, j, y, ' '); | cucul_put_char(cv, j, y, ' '); | ||||
| x = 80; | x = 80; | ||||
| @@ -541,26 +548,31 @@ static long int import_ansi(cucul_canvas_t *cv, | |||||
| /* Make sure the canvas is big enough. */ | /* Make sure the canvas is big enough. */ | ||||
| if((unsigned int)x + wch > width) | if((unsigned int)x + wch > width) | ||||
| { | { | ||||
| cucul_set_color_ansi(cv, grcm.dfg, grcm.dbg); | |||||
| savedattr = cucul_get_attr(cv, -1, -1); | |||||
| cucul_set_attr(cv, resizeattr); | |||||
| cucul_set_canvas_size(cv, width = x + wch, height); | cucul_set_canvas_size(cv, width = x + wch, height); | ||||
| cucul_set_attr(cv, savedattr); | |||||
| } | } | ||||
| if((unsigned int)y >= height) | if((unsigned int)y >= height) | ||||
| { | { | ||||
| cucul_set_color_ansi(cv, grcm.dfg, grcm.dbg); | |||||
| savedattr = cucul_get_attr(cv, -1, -1); | |||||
| cucul_set_attr(cv, resizeattr); | |||||
| cucul_set_canvas_size(cv, width, height = y + 1); | cucul_set_canvas_size(cv, width, height = y + 1); | ||||
| cucul_set_attr(cv, savedattr); | |||||
| } | } | ||||
| /* Now paste our character */ | /* Now paste our character */ | ||||
| cucul_set_color_ansi(cv, grcm.efg, grcm.ebg); | |||||
| cucul_put_char(cv, x, y, ch); | cucul_put_char(cv, x, y, ch); | ||||
| x += wch; | x += wch; | ||||
| } | } | ||||
| if((unsigned int)y > height) | if((unsigned int)y > height) | ||||
| { | { | ||||
| cucul_set_color_ansi(cv, grcm.dfg, grcm.dbg); | |||||
| savedattr = cucul_get_attr(cv, -1, -1); | |||||
| cucul_set_attr(cv, resizeattr); | |||||
| cucul_set_canvas_size(cv, width, height = y); | cucul_set_canvas_size(cv, width, height = y); | ||||
| cucul_set_attr(cv, savedattr); | |||||
| } | } | ||||
| return size; | return size; | ||||
| @@ -645,5 +657,7 @@ static void ansi_parse_grcm(cucul_canvas_t *cv, struct ansi_grcm *g, | |||||
| g->efg = CUCUL_WHITE; | g->efg = CUCUL_WHITE; | ||||
| } | } | ||||
| } | } | ||||
| cucul_set_color_ansi(cv, g->efg, g->ebg); | |||||
| } | } | ||||