static void draw(void) { int l, vl; const int height = vi->view->window_rows - 1; const int width = vi->view->window_width - 1; const int max_l = MIN(vi->line + height, vi->nlines); const int searched = (vi->last_search_backward != -1); esc_state state; esc_state_init(&state, &vi->view->cs.color[WIN_COLOR]); werase(vi->view->win); for(vl = 0, l = vi->line; l < max_l && vl < height; l++) { int offset = 0; int t = 0; char *const line = vi->lines[l]; char *p = searched ? esc_highlight_pattern(line, &vi->re) : line; do { int printed; int vis = l != vi->line || vl + t >= vi->linev - vi->widths[vi->line][0]; offset += esc_print_line(p + offset, vi->view->win, COL, 1 + vl, width, !vis, &state, &printed); vl += vis; t++; } while(vi->wrap && p[offset] != '\0' && vl < height); if(searched) { free(p); } } refresh_view_win(vi->view); }
static void draw(void) { int l, vl; const col_scheme_t *cs = ui_view_get_cs(vi->view); const int height = vi->view->window_rows - 1; const int width = vi->view->window_width - 1; const int max_l = MIN(vi->line + height, vi->nlines); const int searched = (vi->last_search_backward != -1); esc_state state; if(vi->graphics) { const char *cmd = gv_get_viewer(vi->filename); cmd = (cmd != NULL) ? ma_get_clean_cmd(cmd) : NULL; qv_cleanup(vi->view, cmd); free_string_array(vi->lines, vi->nlines); (void)get_view_data(vi, vi->filename); return; } esc_state_init(&state, &cs->color[WIN_COLOR]); ui_view_erase(vi->view); for(vl = 0, l = vi->line; l < max_l && vl < height; ++l) { int offset = 0; int t = 0; char *const line = vi->lines[l]; char *p = searched ? esc_highlight_pattern(line, &vi->re) : line; do { int printed; int vis = l != vi->line || vl + t >= vi->linev - vi->widths[vi->line][0]; offset += esc_print_line(p + offset, vi->view->win, COL, 1 + vl, width, !vis, &state, &printed); vl += vis; t++; } while(vi->wrap && p[offset] != '\0' && vl < height); if(searched) { free(p); } } refresh_view_win(vi->view); }