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