Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto
Dir : e17/proto/enterminus/src/bin Modified Files: term.c ui.c Log Message: major fixes in scrolling issues. only one more bug. when the end pointer wraps back to the front the the start pointer is still at the end of the buffer. =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/term.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- term.c 4 Feb 2005 19:53:41 -0000 1.5 +++ term.c 6 Feb 2005 11:57:21 -0000 1.6 @@ -22,6 +22,7 @@ void term_tcanvas_glyph_push(Term *term, char c) { Term_TGlyph *gl; + int j; gl = &term->tcanvas->grid[term->tcanvas->cur_col + (term->tcanvas->cur_row * term->tcanvas->cols)]; gl->changed = 1; gl->c = c; @@ -33,6 +34,11 @@ if(term->tcanvas->cur_col > term->tcanvas->cols) { term->tcanvas->cur_col = 0; term->tcanvas->cur_row++; + for(j = 0; j <= term->tcanvas->cols; j++) { + gl = & term->tcanvas->grid[j + (term->tcanvas->cols * term->tcanvas->cur_row)]; + gl->c = ' '; + gl->changed = 1; + } } return; @@ -71,8 +77,18 @@ case '\n': /* newline */ term->tcanvas->cur_col = 0; term->tcanvas->cur_row++; - /* TODO: Remember to scroll */ + + { + int j; + Term_TGlyph *gl; + for(j = 0; j <= term->tcanvas->cols; j++) { + gl = & term->tcanvas->grid[j + (term->tcanvas->cols * term->tcanvas->cur_row)]; + gl->c = ' '; + gl->changed = 1; + } + } + if(term->tcanvas->cur_row >= term->tcanvas->scroll_region_end) { term_scroll_up(term, term->tcanvas->cur_row - term->tcanvas->scroll_region_end); term->tcanvas->cur_row = term->tcanvas->scroll_region_end; =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/ui.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- ui.c 4 Feb 2005 19:53:41 -0000 1.6 +++ ui.c 6 Feb 2005 11:57:21 -0000 1.7 @@ -72,9 +72,10 @@ continue; } - if(i + term->tcanvas->scroll_region_start + 1 < (term->tcanvas->rows - 1)*term->tcanvas->scroll_size) { + if(i + term->tcanvas->scroll_region_start <= (term->tcanvas->rows - 1)*term->tcanvas->scroll_size) { gl = &term->grid[j + (term->tcanvas->cols * i)]; - } else { + } else { + printf("Overflowing: [cur_row=%d] [start: %d, end: %d] [ig=%d]\n",term->tcanvas->cur_row,term->tcanvas->scroll_region_start,term->tcanvas->scroll_region_end,ig); gl = &term->grid[j + (term->tcanvas->cols * ig)]; } @@ -120,8 +121,7 @@ evas_object_show(gl->text); tgl->changed = 0; } - if(i + term->tcanvas->scroll_region_start +1 > (term->tcanvas->rows - 1)*term->tcanvas->scroll_size) { - printf("Overflowing: [cur_row=%d] [start: %d, end: %d] [ig=%d]\n",term->tcanvas->cur_row,term->tcanvas->scroll_region_start,term->tcanvas->scroll_region_end,ig); + if(i + term->tcanvas->scroll_region_start > (term->tcanvas->rows - 1)*term->tcanvas->scroll_size) { ig++; } i2++; @@ -231,11 +231,11 @@ for(i = y1; i <= y2; i++) { for(j = x1; j <= x2; j++) { tgl = &term->tcanvas->grid[j + (term->tcanvas->cols * (i + term->tcanvas->scroll_region_start))]; - //if(tgl->c != ' ' && tgl->c != '\0') { + if(tgl->c != ' ' && tgl->c != '\0') { tgl->c = '\0'; tgl->changed = 1; term->tcanvas->changed_rows[i + term->tcanvas->scroll_region_start] = 1; - //} + } } } } @@ -243,38 +243,56 @@ void term_scroll_up(Term *term, int rows) { - int i, j = term->tcanvas->scroll_region_start; + int i, i2, j; int x,y; Term_TGlyph *gl; - - term->tcanvas->scroll_region_start+= rows; - term->tcanvas->scroll_region_end+=rows; - - /* TODO: check for boundaries */ - if(term->tcanvas->cur_row > + + if(term->tcanvas->scroll_region_end + rows > (term->tcanvas->rows-1) * term->tcanvas->scroll_size) { - printf("Gone past scroll area max, going back to start\n"); - term->tcanvas->scroll_region_end = rows - 1; - term->tcanvas->cur_row = rows - 1; + printf("End gone past max scroll buffer, wrapping\n"); + term->tcanvas->scroll_region_end = rows - (((term->tcanvas->rows-1) * + term->tcanvas->scroll_size) - term->tcanvas->scroll_region_end); + /* we going back to the top, clear the rows we want to overwrite */ + for(i = 0; i <= term->tcanvas->scroll_region_end; i++) { + term->tcanvas->changed_rows[i] = 1; + for(j = 0; j <= term->tcanvas->cols; j++) { + gl = & term->tcanvas->grid[j + (term->tcanvas->cols * i)]; + gl->c = ' '; + gl->changed = 1; + } + } + } else { + term->tcanvas->scroll_region_end+=rows; + } - if(term->tcanvas->scroll_region_start > + + if(term->tcanvas->scroll_region_start + rows > (term->tcanvas->rows-1) * term->tcanvas->scroll_size) { - term->tcanvas->scroll_region_start = 0; + printf("Start gone past scroll area max, going back to start\n"); + term->tcanvas->scroll_region_start = rows - (((term->tcanvas->rows-1) * + term->tcanvas->scroll_size) - term->tcanvas->scroll_region_start); + } else { + term->tcanvas->scroll_region_start+= rows; } - - + /* fix this and make it set changed flags properly */ + + if(term->tcanvas->scroll_region_start < term->tcanvas->scroll_region_end) + i2 = term->tcanvas->scroll_region_end; + else + i2 = (term->tcanvas->rows - 1) * term->tcanvas->scroll_size; - for(i = 0; - i <= term->tcanvas->scroll_size*term->tcanvas->rows; + for(i = term->tcanvas->scroll_region_start; + i <= i2; i++) { term->tcanvas->changed_rows[i] = 1; + for(j = 0; j <= term->tcanvas->cols; j++) { + gl = & term->tcanvas->grid[j + (term->tcanvas->cols * i)]; + gl->changed = 1; + } } - - for(x = 0; x < term->tcanvas->cols*term->tcanvas->rows*term->tcanvas->scroll_size; x++) { - gl = &term->tcanvas->grid[x]; - gl->changed = 1; - } + + if(term->tcanvas->scroll_in_region) { ------------------------------------------------------- This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting Tool for open source databases. Create drag-&-drop reports. Save time by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc. Download a FREE copy at http://www.intelliview.com/go/osdn_nl _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs