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

Reply via email to