Enlightenment CVS committal

Author  : codewarrior
Project : e17
Module  : proto

Dir     : e17/proto/enterminus/src/bin


Modified Files:
        handlers.c ui.c 


Log Message:
1- stepping + realloc fixed
2- we have a segfault when we resize too quickly

===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/handlers.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- handlers.c  7 Feb 2005 03:06:18 -0000       1.3
+++ handlers.c  7 Feb 2005 12:56:58 -0000       1.4
@@ -19,7 +19,8 @@
     case 0: /* set window and icon title */
     case 1: /* set icon title */
     case 2: /* set window title */      
-      ecore_x_window_prop_title_set(ecore_x_display_get(), buf);
+      
ecore_x_window_prop_title_set(ecore_evas_software_x11_window_get(term->ee),
+                                   buf);
       break;
    }
 }
@@ -461,29 +462,85 @@
 
 
 void term_cb_resize(Ecore_Evas *ee) {
-   int x, y, w, h, w_char, h_char, num_chars_w, num_chars_h;
+   int x, y, w, h, w_char, h_char, 
+     num_chars_w, num_chars_h, old_size;
    Term *term;
+   Term_EGlyph *gl;
+   Term_TGlyph *gt;
    
    term = (Term*)ecore_evas_data_get(ee, "term");
    
+   ecore_evas_geometry_get(term->ee, &x, &y, &w, &h);
+   
    w_char = term_font_get_width(term);
    h_char = term_font_get_height(term);   
    
    num_chars_w = (int)((float)w/(float)w_char);
    num_chars_h = (int)((float)h/(float)h_char);
    
-      
+   if(term->tcanvas->cols == num_chars_w && term->tcanvas->rows == num_chars_h)
+     return;
+     
+   /* TODO: Check if we're increasing or decreasing window size */   
+   
+   old_size = term->tcanvas->cols * term->tcanvas->rows;   
+   
    term->tcanvas->cols = num_chars_w;
    term->tcanvas->rows = num_chars_h;
    
    term->tcanvas->scroll_region_start = 0;
    term->tcanvas->scroll_region_end = term->tcanvas->rows - 1;      
+
+   if((term->tcanvas->grid = realloc(term->tcanvas->grid, 
+                                   term->tcanvas->cols * term->tcanvas->rows *
+                                   term->tcanvas->scroll_size *
+                                   sizeof(Term_TGlyph))) == NULL) {
+      fprintf(stderr,"Fatal: Could not reallocate text grid!\n");
+      exit(-1);
+   }
    
-   if(ioctl(term->cmd_fd.sys, TIOCSWINSZ, get_font_dim(term)) < 0)
-     {
-       fprintf(stderr, "Couldn't set window size: %m\n");
-       return -1;
-     }
+   /* review this, do we need to subtract:
+    * (term->tcanvas->cols * term->tcanvas->rows * term->tcanvas->scroll_size)
+    */
+   y = (term->tcanvas->cols * term->tcanvas->rows * term->tcanvas->scroll_size)
+       - (old_size *  term->tcanvas->scroll_size);
+      
+   for(x = y ; 
+       x <= term->tcanvas->cols * term->tcanvas->rows * 
term->tcanvas->scroll_size;
+       x++) {
+      gt = &term->tcanvas->grid[x];
+      gt->c = '\0';
+   }   
+   
+   if((term->tcanvas->changed_rows = realloc(term->tcanvas->changed_rows, 
+                                           term->tcanvas->rows *
+                                           term->tcanvas->scroll_size *
+                                           sizeof(int))) == NULL) {
+      fprintf(stderr,"Fatal: Could not reallocate changed rows buffer!\n");
+      exit(-1);      
+   }
+   
+   for(x = 0; x <= term->tcanvas->rows * term->tcanvas->scroll_size; x++)
+     term->tcanvas->changed_rows[x] = 0;
+   
+   if((term->grid = realloc(term->grid, term->tcanvas->cols * 
+                           term->tcanvas->rows *
+                           sizeof(Term_EGlyph))) == NULL) {
+      fprintf(stderr,"Fatal: Couldnt not reallocate evas grid!\n");
+      exit(-1);
+   }
+   
+   y = term->tcanvas->cols * term->tcanvas->rows - 
+     (term->tcanvas->cols * term->tcanvas->rows - (old_size));
+   
+   for(x = y ; x <= term->tcanvas->cols * term->tcanvas->rows; x++) {
+      gl = &term->grid[x];
+      gl->text = evas_object_text_add(term->evas);
+   }
+   
+   if(ioctl(term->cmd_fd.sys, TIOCSWINSZ, get_font_dim(term)) < 0) {
+      fprintf(stderr, "Couldn't set window size: %m\n");
+   }
    
    term_term_bg_set(term, DATADIR"white.png");
    
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/ui.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- ui.c        7 Feb 2005 03:06:18 -0000       1.8
+++ ui.c        7 Feb 2005 12:56:58 -0000       1.9
@@ -59,7 +59,7 @@
         continue;
       }
       /* printf("Rendering c-row %d  g-row %d\n",i2,i); */
-      for(j = 0; j < term->tcanvas->cols; j++) {        
+      for(j = 0; j < term->tcanvas->cols; j++) {
         tgl = &term->tcanvas->grid[j + 
                                    (term->tcanvas->cols * 
                                     (i2)
@@ -223,11 +223,11 @@
    Term_TGlyph *tgl;
    /* TODO: Finalize this shit before shipping code out */
    x1--;y1--;x2--;y2--;
-   if(x1 < 0) x1 = 0;
-   if(y2 < 0) x1 = 0;
-   if(x1 < 0) x1 = 0;
-   if(y2 < 0) x1 = 0;   
-   //printf("Clearing: %d %d, %d 
%d\n",x1,y1+term->tcanvas->scroll_region_start,x2,y2+term->tcanvas->scroll_region_start);
+   if(x1 < 0) x1 = 0; if(x1 > term->tcanvas->cols) x1 = term->tcanvas->cols;
+   if(y1 < 0) y1 = 0; if(y1 > term->tcanvas->rows) y1 = term->tcanvas->rows;
+   if(x2 < 0) x2 = 0; if(x2 > term->tcanvas->cols) x2 = term->tcanvas->cols;
+   if(y2 < 0) y2 = 0; if(y2 > term->tcanvas->rows) y2 = term->tcanvas->rows;  
+   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 + 
term->tcanvas->scroll_region_start))];
@@ -301,7 +301,7 @@
    }
 
 
-   
+   return;
    
    if(term->tcanvas->scroll_in_region) {
       printf("SCROLL IN REGION!!!!!!!!!!!!!!!!!!!!\n");




-------------------------------------------------------
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