Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto
Dir : e17/proto/enterminus/src/bin Modified Files: ui.c Log Message: scrolling is starting to work. it doesnt segv as much as before, but we're accessing junk (bad memory) at some point. baby steps. (= =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/ui.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- ui.c 28 Jan 2005 12:59:27 -0000 1.3 +++ ui.c 31 Jan 2005 23:04:54 -0000 1.4 @@ -50,6 +50,7 @@ Evas_Object *ob; Term_EGlyph *gl; Term_TGlyph *tgl; + for(i = 0; i < term->tcanvas->rows; i++) { if(term->tcanvas->changed_rows[i] != 1) { @@ -57,13 +58,15 @@ } //printf("I is %d\n",i); //printf("Rendering c-row %d g-row %d\n",i+ term->tcanvas->scroll_region_start,i); - ig++; + for(j = 0; j < term->tcanvas->cols; j++) { + tgl = &term->tcanvas->grid[j + (term->tcanvas->cols * (i+ term->tcanvas->scroll_region_start) )]; - //printf("Rendering row %d col %d\n",i+ term->tcanvas->scroll_region_start,j); + + //printf("Rendering row %d col %d\n",i+ term->tcanvas->scroll_region_start-ig,j); if(tgl->changed != 1) { continue; } @@ -71,8 +74,17 @@ printf("Got escape in term_redraw()!\n"); continue; } - jg++; /* TODO: see if we need those extra vars or not */ - gl = &term->grid[j + (term->tcanvas->cols * i)]; + + if(i + term->tcanvas->scroll_region_start < (term->tcanvas->rows - 1)*term->tcanvas->scroll_size) { + gl = &term->grid[j + (term->tcanvas->cols * i)]; + } else { + printf("DETECTED OVERFLOW!!! [s: %d, e: %d] [ig=%d]\n", + term->tcanvas->scroll_region_start, + term->tcanvas->scroll_region_end, + ig + ); + gl = &term->grid[j + (term->tcanvas->cols * ig)]; + } //printf("Current location: [%d, %d]\n",j,i); evas_object_text_font_set(gl->text, term->font.face, term->font.size); @@ -121,6 +133,8 @@ //printf("showing %c\n",tgl->c); tgl->changed = 0; } + if(i + term->tcanvas->scroll_region_start < (term->tcanvas->rows - 1)*term->tcanvas->scroll_size) + ig++; term->tcanvas->changed_rows[i] = 0; } } @@ -219,14 +233,14 @@ Term_TGlyph *tgl; /* TODO: Finalize this shit before shipping code out */ x1--;y1--;x2--;y2--; - printf("Clearing: %d %d, %d %d\n",x1,y1,x2,y2); + printf("Clearing: %d %d, %d %d\n",x1,y1+term->tcanvas->scroll_region_start,x2,y2+term->tcanvas->scroll_region_start); for(i = y1; i <= y2; i++) { for(j = x1; j <= x2; j++) { - tgl = &term->tcanvas->grid[j + (term->tcanvas->cols * i)]; + tgl = &term->tcanvas->grid[j + (term->tcanvas->cols * (i + term->tcanvas->scroll_region_start))]; //if(tgl->c != ' ' && tgl->c != '\0') { tgl->c = '\0'; tgl->changed = 1; - term->tcanvas->changed_rows[i] = 1; + term->tcanvas->changed_rows[i + term->tcanvas->scroll_region_start] = 1; //} } } @@ -240,9 +254,22 @@ Term_TGlyph *gl; printf("Scrolling\n"); - + term->tcanvas->scroll_region_start+= rows; - term->tcanvas->scroll_region_end+=rows; + term->tcanvas->scroll_region_end+=rows; + + /* TODO: check for boundaries */ + /* This stops the segfault, but makes no sense at all */ + if(term->tcanvas->cur_row > + (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; + } + if(term->tcanvas->scroll_region_start > + (term->tcanvas->rows-1) * term->tcanvas->scroll_size) { + term->tcanvas->scroll_region_start = 0; + } /* fix this and make it set changed flags properly */ ------------------------------------------------------- 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