From: <enl...@li...> - 2005-01-24 10:41:01
|
Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto Dir : e17/proto/enterminus Log Message: Directory /cvsroot/enlightenment/e17/proto/enterminus added to the repository |
From: <enl...@li...> - 2005-01-24 10:51:00
|
Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto Dir : e17/proto/enterminus/data Log Message: Directory /cvsroot/enlightenment/e17/proto/enterminus/data added to the repository |
From: <enl...@li...> - 2005-01-24 10:51:00
|
Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto Dir : e17/proto/enterminus/doc Log Message: Directory /cvsroot/enlightenment/e17/proto/enterminus/doc added to the repository |
From: <enl...@li...> - 2005-01-24 10:51:00
|
Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto Dir : e17/proto/enterminus/src Log Message: Directory /cvsroot/enlightenment/e17/proto/enterminus/src added to the repository |
From: <enl...@li...> - 2005-01-24 10:52:56
|
Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto Dir : e17/proto/enterminus/doc/img Log Message: Directory /cvsroot/enlightenment/e17/proto/enterminus/doc/img added to the repository |
From: <enl...@li...> - 2005-01-24 10:54:17
|
Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto Dir : e17/proto/enterminus/src/bin Log Message: Directory /cvsroot/enlightenment/e17/proto/enterminus/src/bin added to the repository |
From: <enl...@li...> - 2005-01-24 10:57:36
|
Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto Dir : e17/proto/enterminus Added Files: AUTHORS COPYING COPYING-PLAIN ChangeLog Doxyfile INSTALL Makefile.am NEWS README TODO acconfig.h autogen.sh configure.in depcomp enterminus-config.in enterminus.c.in enterminus.spec gendoc Log Message: adding enterminus - teh efl term widget |
From: <enl...@li...> - 2005-01-24 10:57:37
|
Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto Dir : e17/proto/enterminus/doc Added Files: eclips.css foot.html head.html Log Message: adding enterminus - teh efl term widget |
From: <enl...@li...> - 2005-01-24 10:57:39
|
Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto Dir : e17/proto/enterminus/src Added Files: Makefile.am Makefile.in Log Message: adding enterminus - teh efl term widget |
From: <enl...@li...> - 2005-01-24 10:57:39
|
Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto Dir : e17/proto/enterminus/data Added Files: Makefile.am VeraMono.ttf black.png checkered_bg.png grey.png white.png Log Message: adding enterminus - teh efl term widget |
From: <enl...@li...> - 2005-01-24 10:57:40
|
Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto Dir : e17/proto/enterminus/doc/img Added Files: eclips.png eclips_big.png eclips_mini.png eclips_small.png hilite.png Log Message: adding enterminus - teh efl term widget |
From: <enl...@li...> - 2005-01-24 10:57:40
|
Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto Dir : e17/proto/enterminus/src/bin Added Files: Makefile.am Makefile.in handlers.c main.c misc.c pty.c term.c term.h ui.c Log Message: adding enterminus - teh efl term widget |
From: <enl...@li...> - 2005-01-27 23:07:06
|
Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto Dir : e17/proto/enterminus/src/bin Modified Files: term.c Log Message: wrap around to the top of the buffer instead of having true scrollback. the only reason i did this is to stop the segfaults from happening until scrollback is fixed. =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/term.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- term.c 24 Jan 2005 10:57:27 -0000 1.1 +++ term.c 27 Jan 2005 23:06:59 -0000 1.2 @@ -33,23 +33,26 @@ term->tcanvas->cur_col = 0; term->tcanvas->cur_row++; } - + if(term->tcanvas->cur_row > term->tcanvas->scroll_region_end) { printf("Scrolling: cur_row=%d, scr_end=%d\n", term->tcanvas->cur_row,term->tcanvas->scroll_region_end); /* we're exhausting the entire scrollback */ if(term->tcanvas->cur_row > (term->tcanvas->rows-1) * term->tcanvas->scroll_size) { - printf("Reached end of scroll buffer\n"); + printf("Reached end of scroll buffer\n"); term->tcanvas->scroll_region_start++; term->tcanvas->cur_row = 0; term->tcanvas->scroll_region_end = 1; } else { /* we're simply at the end of the display, we have scrollback */ printf("Reached end of display buffer\n"); - term->tcanvas->scroll_region_start++; - term->tcanvas->scroll_region_end++; + term_clear_area(term, 1, 1, 80, 24); + term->tcanvas->scroll_region_start = 0; + term->tcanvas->scroll_region_end = 23; term->tcanvas->cur_row = term->tcanvas->scroll_region_end; + term->tcanvas->cur_row = 0; + term->tcanvas->cur_col = 0; } if(term->tcanvas->scroll_region_start > |
From: <enl...@li...> - 2005-01-28 00:16:08
|
Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto Dir : e17/proto/enterminus/src/bin Modified Files: handlers.c Log Message: added support for Up Down Left Right. still part of a switch, we need to make them work in a better way =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/handlers.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- handlers.c 24 Jan 2005 10:57:27 -0000 1.1 +++ handlers.c 28 Jan 2005 00:15:18 -0000 1.2 @@ -346,13 +346,47 @@ unsigned int key_modifiers = 0; char *keyname = strdup(ev->keyname); Term *term = data; + char *buf = NULL; - if( write(term->cmd_fd.sys, ev->string, 1) < 0) { - fprintf(stderr, "Error writing to process: %m\n"); - //exit(2); + /* TODO: improve on this code because its stupid */ + if (!strcmp(ev->keyname, "Left")) { + buf = malloc(7); + snprintf(buf, sizeof(buf), "\033[D"); } + else if (!strcmp(ev->keyname, "Right")) { + buf = malloc(7); + snprintf(buf, sizeof(buf), "\033[C"); + } + else if (!strcmp(ev->keyname, "Down")) { + buf = malloc(7); + snprintf(buf, sizeof(buf), "\033[B"); + } + else if (!strcmp(ev->keyname, "Up")) { + buf = malloc(7); + snprintf(buf, sizeof(buf), "\033[A"); + } + else if (!strcmp(ev->keyname, "Home")) { + } + else if (!strcmp(ev->keyname, "End")) { + } + else if (!strcmp(ev->keyname, "BackSpace")) { + } + else if (!strcmp(ev->keyname, "Delete")) { + } + + if(buf) { + write(term->cmd_fd.sys, buf, strlen(buf)); + } else { + if( write(term->cmd_fd.sys, ev->string, 1) < 0) { + fprintf(stderr, "Error writing to process: %m\n"); + //exit(2); + } + } + return; + /* extra stuff, clean up later */ + if (evas_key_modifier_is_set_get(ev->modifiers, "Shift")) key_modifiers |= TERM_KEY_MODIFIER_SHIFT; else if (evas_key_modifier_is_set_get(ev->modifiers, "Alt")) |
From: <enl...@li...> - 2005-01-28 08:52:56
|
Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto Dir : e17/proto/enterminus/src/bin Modified Files: ui.c Log Message: fixed boundaries for clear function. (we had a bug of not clearing the last line =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/ui.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- ui.c 24 Jan 2005 10:57:27 -0000 1.1 +++ ui.c 28 Jan 2005 08:52:50 -0000 1.2 @@ -216,7 +216,7 @@ int i, j; Term_TGlyph *tgl; /* TODO: Finalize this shit before shipping code out */ - //x1--;y1--;x2--;y2--; + x1--;y1--;x2--;y2--; printf("Clearing: %d %d, %d %d\n",x1,y1,x2,y2); for(i = y1; i <= y2; i++) { for(j = x1; j <= x2; j++) { @@ -224,7 +224,7 @@ if(tgl->c != ' ' && tgl->c != '\0') { tgl->c = '\0'; tgl->changed = 1; - term->tcanvas->changed_rows[i-1] = 1; + term->tcanvas->changed_rows[i] = 1; } } } |
From: <enl...@li...> - 2005-01-28 13:00:03
|
Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto Dir : e17/proto/enterminus/src/bin Modified Files: term.c ui.c Log Message: added scroll back, we have a bug that doesnt allow us to be on the current line at the end of the buffer. ie: the last line as always hidden. clear / crtl-l is currently broken but will get fixed soon. =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/term.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- term.c 27 Jan 2005 23:06:59 -0000 1.2 +++ term.c 28 Jan 2005 12:59:26 -0000 1.3 @@ -34,6 +34,8 @@ term->tcanvas->cur_row++; } + return; + if(term->tcanvas->cur_row > term->tcanvas->scroll_region_end) { printf("Scrolling: cur_row=%d, scr_end=%d\n", term->tcanvas->cur_row,term->tcanvas->scroll_region_end); @@ -47,12 +49,20 @@ } else { /* we're simply at the end of the display, we have scrollback */ printf("Reached end of display buffer\n"); +#if 0 term_clear_area(term, 1, 1, 80, 24); term->tcanvas->scroll_region_start = 0; term->tcanvas->scroll_region_end = 23; term->tcanvas->cur_row = term->tcanvas->scroll_region_end; term->tcanvas->cur_row = 0; term->tcanvas->cur_col = 0; +#endif + printf("Current start line: %d\n",term->tcanvas->scroll_region_start); + term->tcanvas->scroll_region_start++; + printf("New start line: %d\n",term->tcanvas->scroll_region_start); + printf("Current end line: %d\n",term->tcanvas->scroll_region_end); + term->tcanvas->scroll_region_end++; + printf("New end line: %d\n",term->tcanvas->scroll_region_end); } if(term->tcanvas->scroll_region_start > @@ -61,7 +71,7 @@ } { int i, j = term->tcanvas->scroll_region_start; - for(i = 0; i < term->tcanvas->rows; i++) + for(i = 0; i <= term->tcanvas->scroll_region_end; i++) term->tcanvas->changed_rows[j++] = 1; } } @@ -100,9 +110,9 @@ case '\n': /* newline */ term->tcanvas->cur_col = 0; term->tcanvas->cur_row++; - break; + /* TODO: Remember to scroll */ - if(term->tcanvas->cur_row > term->tcanvas->scroll_region_end) { + 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.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- ui.c 28 Jan 2005 08:52:50 -0000 1.2 +++ ui.c 28 Jan 2005 12:59:27 -0000 1.3 @@ -56,6 +56,7 @@ continue; } //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 + @@ -63,8 +64,9 @@ (i+ term->tcanvas->scroll_region_start) )]; //printf("Rendering row %d col %d\n",i+ term->tcanvas->scroll_region_start,j); - if(tgl->changed != 1) + if(tgl->changed != 1) { continue; + } if(tgl->c == '\033') { printf("Got escape in term_redraw()!\n"); continue; @@ -221,16 +223,42 @@ for(i = y1; i <= y2; i++) { for(j = x1; j <= x2; j++) { tgl = &term->tcanvas->grid[j + (term->tcanvas->cols * i)]; - if(tgl->c != ' ' && tgl->c != '\0') { + //if(tgl->c != ' ' && tgl->c != '\0') { tgl->c = '\0'; tgl->changed = 1; term->tcanvas->changed_rows[i] = 1; - } + //} } } } void term_scroll_up(Term *term, int rows) { + + + int i, j = term->tcanvas->scroll_region_start; + int x,y; + Term_TGlyph *gl; + + printf("Scrolling\n"); + + term->tcanvas->scroll_region_start+= rows; + term->tcanvas->scroll_region_end+=rows; + + + /* fix this and make it set changed flags properly */ + + for(i = 0; + i <= term->tcanvas->scroll_size*term->tcanvas->rows; + i++) { + term->tcanvas->changed_rows[i] = 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) { } else { |
From: <enl...@li...> - 2005-01-31 23:05:16
|
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 */ |
From: <enl...@li...> - 2005-02-04 18:40:08
|
Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto Dir : e17/proto/enterminus/src/bin Modified Files: term.c ui.c Log Message: comments + fixes. for some reason the last line, after it scrolls, doesnt echo user input any more. need to find out why. =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/term.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- term.c 28 Jan 2005 12:59:26 -0000 1.3 +++ term.c 4 Feb 2005 18:39:45 -0000 1.4 @@ -29,52 +29,13 @@ gl->bg = term->tcanvas->cur_bg; term->tcanvas->changed_rows[term->tcanvas->cur_row] = 1; term->tcanvas->cur_col++; + if(term->tcanvas->cur_col > term->tcanvas->cols) { term->tcanvas->cur_col = 0; term->tcanvas->cur_row++; } - return; - - if(term->tcanvas->cur_row > term->tcanvas->scroll_region_end) { - - printf("Scrolling: cur_row=%d, scr_end=%d\n", term->tcanvas->cur_row,term->tcanvas->scroll_region_end); - /* we're exhausting the entire scrollback */ - if(term->tcanvas->cur_row > - (term->tcanvas->rows-1) * term->tcanvas->scroll_size) { - printf("Reached end of scroll buffer\n"); - term->tcanvas->scroll_region_start++; - term->tcanvas->cur_row = 0; - term->tcanvas->scroll_region_end = 1; - } else { - /* we're simply at the end of the display, we have scrollback */ - printf("Reached end of display buffer\n"); -#if 0 - term_clear_area(term, 1, 1, 80, 24); - term->tcanvas->scroll_region_start = 0; - term->tcanvas->scroll_region_end = 23; - term->tcanvas->cur_row = term->tcanvas->scroll_region_end; - term->tcanvas->cur_row = 0; - term->tcanvas->cur_col = 0; -#endif - printf("Current start line: %d\n",term->tcanvas->scroll_region_start); - term->tcanvas->scroll_region_start++; - printf("New start line: %d\n",term->tcanvas->scroll_region_start); - printf("Current end line: %d\n",term->tcanvas->scroll_region_end); - term->tcanvas->scroll_region_end++; - printf("New end line: %d\n",term->tcanvas->scroll_region_end); - } - - if(term->tcanvas->scroll_region_start > - (term->tcanvas->rows-1) * term->tcanvas->scroll_size) { - term->tcanvas->scroll_region_start = 0; - } - { - int i, j = term->tcanvas->scroll_region_start; - for(i = 0; i <= term->tcanvas->scroll_region_end; i++) - term->tcanvas->changed_rows[j++] = 1; - } - } + return; } char term_tcanvas_data_pop(Term *term) { @@ -140,7 +101,7 @@ canvas->canvas_id = 1; /* change later */ canvas->rows = 24; /* multiply by a number or scrollback */ canvas->cols = 80; - canvas->scroll_size = 3; /* this means rows * 3 total rows */ + canvas->scroll_size = 50; /* this means rows * 3 total rows */ canvas->cur_row = 0; /* between 0 and rows-1 */ canvas->cur_col = 0; canvas->grid = calloc(canvas->cols * @@ -150,7 +111,7 @@ sizeof(int)); canvas->scroll_region_start = 0; - canvas->scroll_region_end = canvas->rows; + canvas->scroll_region_end = canvas->rows -1; for(i = 0; i < canvas->rows * canvas->scroll_size; i++) canvas->changed_rows[i] = 0; =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/ui.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- ui.c 31 Jan 2005 23:04:54 -0000 1.4 +++ ui.c 4 Feb 2005 18:39:46 -0000 1.5 @@ -51,48 +51,37 @@ Term_EGlyph *gl; Term_TGlyph *tgl; - for(i = 0; i < term->tcanvas->rows; i++) { - + for(i = 0; i < term->tcanvas->rows; i++) { if(term->tcanvas->changed_rows[i] != 1) { continue; } - //printf("I is %d\n",i); //printf("Rendering c-row %d g-row %d\n",i+ term->tcanvas->scroll_region_start,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 * (i+ term->tcanvas->scroll_region_start) - )]; - - //printf("Rendering row %d col %d\n",i+ term->tcanvas->scroll_region_start-ig,j); + )]; if(tgl->changed != 1) { - continue; + continue; } if(tgl->c == '\033') { printf("Got escape in term_redraw()!\n"); continue; } + + //printf("i=%d term->tcanvas->scroll_region_start=%d term->tcanvas->rows=%d term->tcanvas->scroll_size=%d\n",i,term->tcanvas->scroll_region_start,term->tcanvas->rows,term->tcanvas->scroll_size); - if(i + term->tcanvas->scroll_region_start < (term->tcanvas->rows - 1)*term->tcanvas->scroll_size) { + if(i + term->tcanvas->scroll_region_start + 1 < (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 - ); + } else { 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); c[0] = tgl->c; c[1] = '\0'; evas_object_text_text_set(gl->text, c); - - + switch(tgl->fg) { case 0: evas_object_color_set(gl->text, COLOR0, 255); @@ -123,18 +112,16 @@ break; } - - + evas_object_layer_set(gl->text,1); - evas_object_move(gl->text, - j*term->font.width, - i*term->font.height); + evas_object_move(gl->text, j*term->font.width, i*term->font.height); evas_object_show(gl->text); - //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++; + 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); + ig++; + } term->tcanvas->changed_rows[i] = 0; } } @@ -233,7 +220,11 @@ Term_TGlyph *tgl; /* TODO: Finalize this shit before shipping code out */ 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); + 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); 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))]; @@ -252,14 +243,11 @@ int i, j = term->tcanvas->scroll_region_start; int x,y; Term_TGlyph *gl; - - printf("Scrolling\n"); - + term->tcanvas->scroll_region_start+= 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"); |
From: <enl...@li...> - 2005-02-04 19:53:49
|
Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto Dir : e17/proto/enterminus/src/bin Modified Files: term.c ui.c Log Message: fixed problem that was causing the last line not to draw. still need to fix wrap around scrolling issue =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/term.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- term.c 4 Feb 2005 18:39:45 -0000 1.4 +++ term.c 4 Feb 2005 19:53:41 -0000 1.5 @@ -28,7 +28,7 @@ gl->fg = term->tcanvas->cur_fg; gl->bg = term->tcanvas->cur_bg; term->tcanvas->changed_rows[term->tcanvas->cur_row] = 1; - term->tcanvas->cur_col++; + term->tcanvas->cur_col++; if(term->tcanvas->cur_col > term->tcanvas->cols) { term->tcanvas->cur_col = 0; @@ -101,7 +101,7 @@ canvas->canvas_id = 1; /* change later */ canvas->rows = 24; /* multiply by a number or scrollback */ canvas->cols = 80; - canvas->scroll_size = 50; /* this means rows * 3 total rows */ + canvas->scroll_size = 3; /* this means rows * 3 total rows */ canvas->cur_row = 0; /* between 0 and rows-1 */ canvas->cur_col = 0; canvas->grid = calloc(canvas->cols * =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/ui.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- ui.c 4 Feb 2005 18:39:46 -0000 1.5 +++ ui.c 4 Feb 2005 19:53:41 -0000 1.6 @@ -43,23 +43,26 @@ /* see what changed chars we have, redraw */ void term_redraw(void *data) { - int i,j; - int ig = 0, jg = 0; + int i,i2,j; + int ig = 0; char c[2]; Term *term = data; Evas_Object *ob; Term_EGlyph *gl; Term_TGlyph *tgl; + + i2 = term->tcanvas->scroll_region_start; - for(i = 0; i < term->tcanvas->rows; i++) { - if(term->tcanvas->changed_rows[i] != 1) { + for(i = 0; i < term->tcanvas->rows; i++) { + if(term->tcanvas->changed_rows[i2] != 1) { + i2++; continue; } - //printf("Rendering c-row %d g-row %d\n",i+ term->tcanvas->scroll_region_start,i); + /* printf("Rendering c-row %d g-row %d\n",i2,i); */ for(j = 0; j < term->tcanvas->cols; j++) { tgl = &term->tcanvas->grid[j + (term->tcanvas->cols * - (i+ term->tcanvas->scroll_region_start) + (i2) )]; if(tgl->changed != 1) { continue; @@ -69,8 +72,6 @@ continue; } - //printf("i=%d term->tcanvas->scroll_region_start=%d term->tcanvas->rows=%d term->tcanvas->scroll_size=%d\n",i,term->tcanvas->scroll_region_start,term->tcanvas->rows,term->tcanvas->scroll_size); - if(i + term->tcanvas->scroll_region_start + 1 < (term->tcanvas->rows - 1)*term->tcanvas->scroll_size) { gl = &term->grid[j + (term->tcanvas->cols * i)]; } else { @@ -81,7 +82,8 @@ c[0] = tgl->c; c[1] = '\0'; evas_object_text_text_set(gl->text, c); - + + /* this is just temp, move it into its own function later */ switch(tgl->fg) { case 0: evas_object_color_set(gl->text, COLOR0, 255); @@ -122,6 +124,7 @@ 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); ig++; } + i2++; term->tcanvas->changed_rows[i] = 0; } } |
From: <enl...@li...> - 2005-02-06 11:57:28
|
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) { |
From: <enl...@li...> - 2005-02-06 13:06:26
|
Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto Dir : e17/proto/enterminus/src/bin Modified Files: main.c pty.c Log Message: removed unrequired extern and changed default bg pixmap =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/main.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- main.c 24 Jan 2005 10:57:27 -0000 1.1 +++ main.c 6 Feb 2005 13:06:16 -0000 1.2 @@ -4,7 +4,7 @@ Ecore_Evas *ee; /* ecore_evas */ Evas *evas; /* evas */ - Evas_Object *ob,*bg; /* background */ +// Evas_Object *ob,*bg; /* background */ Term *term; /* terminal */ //term_window_init(ee, evas); @@ -14,7 +14,7 @@ term = term_new(evas); - term_term_bg_set(term, DATADIR"black.png", ee); + term_term_bg_set(term, DATADIR"white.png", ee); execute_command(term, argc, argv); =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/pty.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- pty.c 24 Jan 2005 10:57:27 -0000 1.1 +++ pty.c 6 Feb 2005 13:06:16 -0000 1.2 @@ -2,7 +2,8 @@ int get_pty(Term *term) { - extern char *ptsname(); + /* do we need this here? */ + /* extern char *ptsname(); */ int fd; if((fd = getpt()) >= 0) @@ -106,7 +107,7 @@ /* child */ get_tty(term); - putenv("TERM=blurt"); + putenv("TERM=xterm"); chdir(pw->pw_dir); args = calloc(3, sizeof(char*)); |
From: <enl...@li...> - 2005-02-07 03:06:42
|
Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto Dir : e17/proto/enterminus/src/bin Modified Files: handlers.c main.c term.c term.h ui.c Log Message: 1- added stepped resizing. 2- cleaned up bg code. 3- we have a segfault when we resize and try to use the new area (height wise only) =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/handlers.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- handlers.c 28 Jan 2005 00:15:18 -0000 1.2 +++ handlers.c 7 Feb 2005 03:06:18 -0000 1.3 @@ -449,3 +449,42 @@ } } + +struct winsize *get_font_dim(Term *term) +{ + static struct winsize w; + w.ws_row = term->tcanvas->rows; + w.ws_col = term->tcanvas->cols; + w.ws_xpixel = w.ws_ypixel = 0; + return &w; +} + + +void term_cb_resize(Ecore_Evas *ee) { + int x, y, w, h, w_char, h_char, num_chars_w, num_chars_h; + Term *term; + + term = (Term*)ecore_evas_data_get(ee, "term"); + + 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); + + + 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(ioctl(term->cmd_fd.sys, TIOCSWINSZ, get_font_dim(term)) < 0) + { + fprintf(stderr, "Couldn't set window size: %m\n"); + return -1; + } + + term_term_bg_set(term, DATADIR"white.png"); + +} =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/main.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- main.c 6 Feb 2005 13:06:16 -0000 1.2 +++ main.c 7 Feb 2005 03:06:18 -0000 1.3 @@ -3,18 +3,15 @@ int main(int argc, char **argv) { Ecore_Evas *ee; /* ecore_evas */ - Evas *evas; /* evas */ -// Evas_Object *ob,*bg; /* background */ Term *term; /* terminal */ //term_window_init(ee, evas); ee = ecore_evas_software_x11_new(0, 0, 0, 0, 640, 480); - evas = ecore_evas_get(ee); ecore_evas_show(ee); - term = term_new(evas); + term = term_new(ee); - term_term_bg_set(term, DATADIR"white.png", ee); + term_term_bg_set(term, DATADIR"white.png"); execute_command(term, argc, argv); =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/term.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- term.c 6 Feb 2005 11:57:21 -0000 1.6 +++ term.c 7 Feb 2005 03:06:18 -0000 1.7 @@ -117,7 +117,7 @@ canvas->canvas_id = 1; /* change later */ canvas->rows = 24; /* multiply by a number or scrollback */ canvas->cols = 80; - canvas->scroll_size = 3; /* this means rows * 3 total rows */ + canvas->scroll_size = 30; /* this means rows * 3 total rows */ canvas->cur_row = 0; /* between 0 and rows-1 */ canvas->cur_col = 0; canvas->grid = calloc(canvas->cols * @@ -157,7 +157,6 @@ evas_object_text_font_set(ob, term->font.face, term->font.size); evas_object_text_text_set(ob, "W"); evas_object_geometry_get(ob,&x,&y,&w,&h); - w = evas_object_text_horiz_advance_get(ob); evas_object_del(ob); return w; } @@ -173,17 +172,17 @@ evas_object_text_font_set(ob, term->font.face, term->font.size); evas_object_text_text_set(ob, "W"); evas_object_geometry_get(ob,&x,&y,&w,&h); - evas_object_geometry_get(ob,&x,&y,&w,&h); - h = evas_object_text_vert_advance_get(ob); evas_object_del(ob); - return h+10; + return h; } -Term *term_new(Evas *evas) { +Term *term_new(Ecore_Evas *ee) { int i, j; Term_EGlyph *gl; - Term *term = malloc(sizeof(Term)); + Term *term = malloc(sizeof(Term)); term->term_id = 0; + term->ee = ee; + term->evas = ecore_evas_get(ee); term->tcanvas = term_tcanvas_new(); term->grid = calloc(term->tcanvas->cols * term->tcanvas->rows, sizeof(Term_EGlyph)); @@ -191,19 +190,28 @@ for(i = 0; i < term->tcanvas->cols * term->tcanvas->rows; i++) { gl = &term->grid[i]; - gl->text = evas_object_text_add(evas); + gl->text = evas_object_text_add(term->evas); } term->bg = NULL; strcpy(term->font.path, DATADIR); strcpy(term->font.face, "VeraMono"); term->font.size = 10; - term->evas = evas; term->data_ptr = 0; term->font.width = term_font_get_width(term); term->font.height = term_font_get_height(term); evas_font_path_append(term->evas, term->font.path); - ecore_timer_add(0.1, term_timers, term); - + ecore_timer_add(0.1, term_timers, term); + + ecore_x_window_prop_step_size_set(ecore_evas_software_x11_window_get(term->ee), + term_font_get_width(term), + term_font_get_height(term)); + + ecore_evas_resize(term->ee, + term->tcanvas->cols*term_font_get_width(term), + term->tcanvas->rows*term_font_get_height(term)); + + ecore_evas_data_set(term->ee, "term", term); + return term; } =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/term.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- term.h 24 Jan 2005 10:57:27 -0000 1.1 +++ term.h 7 Feb 2005 03:06:18 -0000 1.2 @@ -92,6 +92,7 @@ struct _Term { int term_id; + Ecore_Evas *ee; Term_TCanvas *tcanvas; Term_EGlyph *grid; Evas_Object *bg; @@ -104,11 +105,12 @@ int data_len; int font_width; int font_height; + }; typedef struct _Term Term; -Term *term_new(Evas *evas); +Term *term_new(Ecore_Evas *ee); Term_TCanvas *term_tcanvas_new(); int term_tcanvas_data(void *data); void term_tcanvas_glyph_push(Term *term, char c); @@ -121,6 +123,7 @@ int term_handler_escape_seq(Term *term); void term_cb_key_down(void *data, Evas *e, Evas_Object *obj, void *event_info); +void term_cb_resize(Ecore_Evas *ee); static void strupper(char *str); int term_timers(void *data); @@ -132,7 +135,7 @@ int execute_command(Term *term, int argc, const char **argv); void term_window_init(Ecore_Evas *ee, Evas *evas); -void term_term_bg_set(Term *term, char *img, Ecore_Evas *ee); +void term_term_bg_set(Term *term, char *img); void term_redraw(void *data); int term_cursor_move_up(Term *term, int n); =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/ui.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- ui.c 6 Feb 2005 11:57:21 -0000 1.7 +++ ui.c 7 Feb 2005 03:06:18 -0000 1.8 @@ -8,9 +8,10 @@ #define COLOR4 20, 20, 200 #define COLOR5 46, 75, 100 #define COLOR6 98, 175, 200 -#define COLOR7 200, 200, 200 +#define COLOR7 50, 50, 50 #define COLOR8 231, 105, 50 +/* this isnt used right now */ void term_window_init(Ecore_Evas *ee, Evas *evas) { ee = ecore_evas_software_x11_new(0, 0, 0, 0, 640, 480); @@ -18,26 +19,25 @@ ecore_evas_show(ee); } -void term_term_bg_set(Term *term, char *img, Ecore_Evas *ee) { - int w, h; - Evas_Object *bg; +void term_term_bg_set(Term *term, char *img) { + int x, y, w, h; - w = term->tcanvas->cols*term_font_get_width(term); - h = term->tcanvas->rows*term_font_get_height(term); + ecore_evas_geometry_get(term->ee, &x, &y, &w, &h); + + if(!term->bg) { + term->bg = evas_object_image_add(term->evas); + evas_object_event_callback_add(term->bg, EVAS_CALLBACK_KEY_DOWN, + term_cb_key_down, + term); + ecore_evas_callback_resize_set(term->ee, term_cb_resize); + } - ecore_evas_resize(ee, w, h); - - bg = evas_object_image_add(term->evas); - evas_object_resize(bg, w, h); - evas_object_image_file_set(bg, img, NULL); - evas_object_layer_set(bg, 0); - //evas_object_image_size_get(ob, &w, &h); - evas_object_image_fill_set(bg, 0, 0, w, h); - evas_object_focus_set(bg,1); - evas_object_event_callback_add(bg, EVAS_CALLBACK_KEY_DOWN, term_cb_key_down, - term); - //evas_object_event_callback_add(bg, EVAS_CALLBACK_KEY_UP, cb_key_up, term); - evas_object_show(bg); + evas_object_resize(term->bg, w, h); + evas_object_image_file_set(term->bg, img, NULL); + evas_object_layer_set(term->bg, 0); + evas_object_image_fill_set(term->bg, 0, 0, w, h); + evas_object_focus_set(term->bg,1); + evas_object_show(term->bg); } @@ -252,7 +252,7 @@ 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 */ + /* we're 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++) { @@ -279,8 +279,16 @@ 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; + else { + 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->changed = 1; + } + } + i2 = (term->tcanvas->rows - 1) * term->tcanvas->scroll_size; + } for(i = term->tcanvas->scroll_region_start; i <= i2; @@ -296,7 +304,7 @@ if(term->tcanvas->scroll_in_region) { - + printf("SCROLL IN REGION!!!!!!!!!!!!!!!!!!!!\n"); } else { } |
From: <enl...@li...> - 2005-02-07 12:57:18
|
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"); |
From: <enl...@li...> - 2005-02-08 11:46:07
|
Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto Dir : e17/proto/enterminus/src/bin Modified Files: Makefile.am Makefile.in handlers.c main.c pty.c term.c term.h ui.c Added Files: enterm.c smart.c Log Message: 1- split logic into enter and term_smart 2- enterm is just a test app 3- term_smart is the terminal smart object =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/Makefile.am,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- Makefile.am 24 Jan 2005 10:57:27 -0000 1.1 +++ Makefile.am 8 Feb 2005 11:45:58 -0000 1.2 @@ -13,6 +13,8 @@ pty.c \ term.c \ ui.c \ -handlers.c +handlers.c \ +smart.c \ +enterm.c enterminus_LDADD = @my_libs@ =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/Makefile.in,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- Makefile.in 24 Jan 2005 10:57:27 -0000 1.1 +++ Makefile.in 8 Feb 2005 11:45:58 -0000 1.2 @@ -146,7 +146,9 @@ pty.c \ term.c \ ui.c \ -handlers.c +handlers.c \ +smart.c \ +enterm.c enterminus_LDADD = @my_libs@ @@ -159,7 +161,8 @@ PROGRAMS = $(bin_PROGRAMS) am_enterminus_OBJECTS = main.$(OBJEXT) misc.$(OBJEXT) pty.$(OBJEXT) \ - term.$(OBJEXT) ui.$(OBJEXT) handlers.$(OBJEXT) + term.$(OBJEXT) ui.$(OBJEXT) handlers.$(OBJEXT) smart.$(OBJEXT) \ + enterm.$(OBJEXT) enterminus_OBJECTS = $(am_enterminus_OBJECTS) enterminus_DEPENDENCIES = enterminus_LDFLAGS = @@ -167,8 +170,9 @@ DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles -@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/handlers.Po ./$(DEPDIR)/main.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/misc.Po ./$(DEPDIR)/pty.Po \ +@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/enterm.Po ./$(DEPDIR)/handlers.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/main.Po ./$(DEPDIR)/misc.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/pty.Po ./$(DEPDIR)/smart.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/term.Po ./$(DEPDIR)/ui.Po COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -229,10 +233,12 @@ distclean-compile: -rm -f *.tab.c +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/enterm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/handlers.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/misc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pty.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smart.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/term.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/handlers.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- handlers.c 7 Feb 2005 12:56:58 -0000 1.4 +++ handlers.c 8 Feb 2005 11:45:58 -0000 1.5 @@ -18,9 +18,13 @@ switch(op) { case 0: /* set window and icon title */ case 1: /* set icon title */ - case 2: /* set window title */ - ecore_x_window_prop_title_set(ecore_evas_software_x11_window_get(term->ee), - buf); + case 2: /* set window title */ + if(term->title) free(term->title); + term->title = malloc(sizeof(buf)); + snprintf(term->title, sizeof(buf), "%s", buf); + /* TODO: MOVE THIS TO FRONTEND CODE */ + //ecore_x_window_prop_title_set(ecore_evas_software_x11_window_get(term->ee), + // buf); break; } } @@ -450,98 +454,3 @@ } } - -struct winsize *get_font_dim(Term *term) -{ - static struct winsize w; - w.ws_row = term->tcanvas->rows; - w.ws_col = term->tcanvas->cols; - w.ws_xpixel = w.ws_ypixel = 0; - return &w; -} - - -void term_cb_resize(Ecore_Evas *ee) { - 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); - } - - /* 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/main.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- main.c 7 Feb 2005 03:06:18 -0000 1.3 +++ main.c 8 Feb 2005 11:45:58 -0000 1.4 @@ -3,22 +3,19 @@ int main(int argc, char **argv) { Ecore_Evas *ee; /* ecore_evas */ - Term *term; /* terminal */ + Evas *evas; /* evas */ + Evas_Object *term; /* terminal */ + + ee = ecore_evas_software_x11_new(0, 0, 0, 0, 0, 0); + ecore_evas_show(ee); + evas = ecore_evas_get(ee); + + term = term_new(evas); + evas_object_show(term); + //evas_object_resize(term, 640, 480); - //term_window_init(ee, evas); - ee = ecore_evas_software_x11_new(0, 0, 0, 0, 640, 480); - ecore_evas_show(ee); + enterm_init(ee, term); - term = term_new(ee); - - term_term_bg_set(term, DATADIR"white.png"); - - execute_command(term, argc, argv); - - term->cmd_fd.ecore = ecore_main_fd_handler_add(term->cmd_fd.sys, - ECORE_FD_READ, - term_tcanvas_data, term, - NULL, NULL); ecore_main_loop_begin(); ecore_evas_shutdown(); ecore_shutdown(); =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/pty.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- pty.c 6 Feb 2005 13:06:16 -0000 1.2 +++ pty.c 8 Feb 2005 11:45:58 -0000 1.3 @@ -88,7 +88,7 @@ return pw; } -int execute_command(Term *term, int argc, const char **argv) +int execute_command(Term *term)//, int argc, const char **argv) { char **args; int master; =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/term.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- term.c 7 Feb 2005 03:06:18 -0000 1.7 +++ term.c 8 Feb 2005 11:45:58 -0000 1.8 @@ -176,13 +176,16 @@ return h; } -Term *term_new(Ecore_Evas *ee) { +Term *term_init(Evas_Object *o) { int i, j; - Term_EGlyph *gl; - Term *term = malloc(sizeof(Term)); + Evas *evas; + Term_EGlyph *gl; + Term *term; + + term = malloc(sizeof(Term)); + evas = evas_object_evas_get(o); term->term_id = 0; - term->ee = ee; - term->evas = ecore_evas_get(ee); + term->evas = evas; term->tcanvas = term_tcanvas_new(); term->grid = calloc(term->tcanvas->cols * term->tcanvas->rows, sizeof(Term_EGlyph)); @@ -190,7 +193,10 @@ for(i = 0; i < term->tcanvas->cols * term->tcanvas->rows; i++) { gl = &term->grid[i]; - gl->text = evas_object_text_add(term->evas); + gl->text = evas_object_text_add(term->evas); + gl->bg = evas_object_text_add(term->evas); + evas_object_layer_set(gl->text,2); + evas_object_layer_set(gl->text,1); } term->bg = NULL; @@ -200,18 +206,17 @@ term->data_ptr = 0; term->font.width = term_font_get_width(term); term->font.height = term_font_get_height(term); + term->title = NULL; evas_font_path_append(term->evas, term->font.path); - ecore_timer_add(0.1, term_timers, term); - - ecore_x_window_prop_step_size_set(ecore_evas_software_x11_window_get(term->ee), - term_font_get_width(term), - term_font_get_height(term)); - - ecore_evas_resize(term->ee, - term->tcanvas->cols*term_font_get_width(term), - term->tcanvas->rows*term_font_get_height(term)); - - ecore_evas_data_set(term->ee, "term", term); - + ecore_timer_add(0.1, term_timers, term); + execute_command(term);//, argc, argv); + term->cmd_fd.ecore = ecore_main_fd_handler_add(term->cmd_fd.sys, + ECORE_FD_READ, + term_tcanvas_data, term, + NULL, NULL); + term->w = term->font.width * term->tcanvas->cols; + term->h = term->font.height * term->tcanvas->rows; + term_term_bg_set(term, DATADIR"black.png"); + return term; } =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/term.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- term.h 7 Feb 2005 03:06:18 -0000 1.2 +++ term.h 8 Feb 2005 11:45:58 -0000 1.3 @@ -105,12 +105,14 @@ int data_len; int font_width; int font_height; - + char *title; + int w; + int h; }; typedef struct _Term Term; -Term *term_new(Ecore_Evas *ee); +Term *term_init(Evas_Object *o); Term_TCanvas *term_tcanvas_new(); int term_tcanvas_data(void *data); void term_tcanvas_glyph_push(Term *term, char c); @@ -132,7 +134,7 @@ int get_tty(Term *term); void sigchld_handler(int a); struct passwd *find_user(void); -int execute_command(Term *term, int argc, const char **argv); +int execute_command(Term *term);//, int argc, const char **argv); void term_window_init(Ecore_Evas *ee, Evas *evas); void term_term_bg_set(Term *term, char *img); @@ -154,3 +156,21 @@ void term_scroll_up(Term *term, int rows); void term_scroll_down(Term *term, int rows); +void term_smart_add(Evas_Object *o); +void term_smart_del(Evas_Object *o); +void term_smart_layer_set(Evas_Object *o, int l); +void term_smart_raise(Evas_Object *o); +void term_smart_lower(Evas_Object *o); +void term_smart_stack_above(Evas_Object *o, Evas_Object *above); +void term_smart_stack_below(Evas_Object *o, Evas_Object *below); +void term_smart_move(Evas_Object *o, Evas_Coord x, Evas_Coord y); +void term_smart_resize(Evas_Object *o, Evas_Coord w, Evas_Coord h); +void term_smart_show(Evas_Object *o); +void term_smart_hide(Evas_Object *o); +void term_smart_color_set(Evas_Object *o, int r, int g, int b, int a); +void term_smart_clip_set(Evas_Object *o, Evas_Object *clip); +void term_smart_clip_unset(Evas_Object *o); +Evas_Smart *term_smart_get(); + +void enterm_init(Ecore_Evas *ee, Evas_Object *term); +void enterm_cb_resize(Ecore_Evas *ee); =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/ui.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -3 -r1.9 -r1.10 --- ui.c 7 Feb 2005 12:56:58 -0000 1.9 +++ ui.c 8 Feb 2005 11:45:58 -0000 1.10 @@ -8,36 +8,23 @@ #define COLOR4 20, 20, 200 #define COLOR5 46, 75, 100 #define COLOR6 98, 175, 200 -#define COLOR7 50, 50, 50 +#define COLOR7 250, 250, 250 #define COLOR8 231, 105, 50 -/* this isnt used right now */ -void term_window_init(Ecore_Evas *ee, Evas *evas) { - - ee = ecore_evas_software_x11_new(0, 0, 0, 0, 640, 480); - evas = ecore_evas_get(ee); - ecore_evas_show(ee); -} - void term_term_bg_set(Term *term, char *img) { - int x, y, w, h; - ecore_evas_geometry_get(term->ee, &x, &y, &w, &h); - if(!term->bg) { term->bg = evas_object_image_add(term->evas); evas_object_event_callback_add(term->bg, EVAS_CALLBACK_KEY_DOWN, term_cb_key_down, - term); - ecore_evas_callback_resize_set(term->ee, term_cb_resize); + term); } - evas_object_resize(term->bg, w, h); + evas_object_resize(term->bg, term->w, term->h); evas_object_image_file_set(term->bg, img, NULL); evas_object_layer_set(term->bg, 0); - evas_object_image_fill_set(term->bg, 0, 0, w, h); - evas_object_focus_set(term->bg,1); - evas_object_show(term->bg); + evas_object_image_fill_set(term->bg, 0, 0, term->w, term->h); + evas_object_focus_set(term->bg, 1); } @@ -115,10 +102,8 @@ break; } - - evas_object_layer_set(gl->text,1); + evas_object_move(gl->text, j*term->font.width, i*term->font.height); - evas_object_show(gl->text); tgl->changed = 0; } if(i + term->tcanvas->scroll_region_start > (term->tcanvas->rows - 1)*term->tcanvas->scroll_size) { |
From: <enl...@li...> - 2005-02-11 13:08:19
|
Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto Dir : e17/proto/enterminus/src/bin Modified Files: main.c pty.c smart.c term.h ui.c Log Message: some cleanups and comments =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/main.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- main.c 8 Feb 2005 11:45:58 -0000 1.4 +++ main.c 11 Feb 2005 13:07:55 -0000 1.5 @@ -3,7 +3,7 @@ int main(int argc, char **argv) { Ecore_Evas *ee; /* ecore_evas */ - Evas *evas; /* evas */ + Evas *evas; /* evas */ Evas_Object *term; /* terminal */ ee = ecore_evas_software_x11_new(0, 0, 0, 0, 0, 0); @@ -11,8 +11,7 @@ evas = ecore_evas_get(ee); term = term_new(evas); - evas_object_show(term); - //evas_object_resize(term, 640, 480); + evas_object_show(term); enterm_init(ee, term); =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/pty.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- pty.c 8 Feb 2005 11:45:58 -0000 1.3 +++ pty.c 11 Feb 2005 13:07:56 -0000 1.4 @@ -1,5 +1,14 @@ #include "term.h" +struct winsize *get_font_dim(Term *term) +{ + static struct winsize w; + w.ws_row = term->tcanvas->rows; + w.ws_col = term->tcanvas->cols; + w.ws_xpixel = w.ws_ypixel = 0; + return &w; +} + int get_pty(Term *term) { /* do we need this here? */ =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/smart.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- smart.c 8 Feb 2005 11:45:58 -0000 1.1 +++ smart.c 11 Feb 2005 13:07:56 -0000 1.2 @@ -2,24 +2,16 @@ /* Evas Smart Object API Wrapping methods */ -/* move this elsewhere */ -struct winsize *get_font_dim(Term *term) -{ - static struct winsize w; - w.ws_row = term->tcanvas->rows; - w.ws_col = term->tcanvas->cols; - w.ws_xpixel = w.ws_ypixel = 0; - return &w; -} - static Evas_Smart *smart; +/* instantiate a new terminal */ Evas_Object *term_new(Evas *evas) { Evas_Object *term; term = evas_object_smart_add(evas, term_smart_get()); return term; } +/* knit smart object with its functions */ Evas_Smart *term_smart_get() { if(smart) return smart; smart = evas_smart_new ("term", @@ -42,6 +34,7 @@ return smart; } +/* add the term object */ void term_smart_add(Evas_Object *o) { Term *data; @@ -50,6 +43,7 @@ evas_object_smart_data_set(o, data); } +/* delete the term object */ void term_smart_del(Evas_Object *o) { } =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/term.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- term.h 8 Feb 2005 11:45:58 -0000 1.3 +++ term.h 11 Feb 2005 13:07:56 -0000 1.4 @@ -22,6 +22,13 @@ #define NPAR 16 #define DATADIR PACKAGE_DATA_DIR"/" +#ifdef DEBUG +#define DPRINT(stuff) fprintf stuff; +#else +#define DPRINT(stuff) +#endif + + enum Term_Key_Modifiers { TERM_KEY_MODIFIER_SHIFT = 0x1, @@ -112,65 +119,66 @@ typedef struct _Term Term; -Term *term_init(Evas_Object *o); -Term_TCanvas *term_tcanvas_new(); -int term_tcanvas_data(void *data); -void term_tcanvas_glyph_push(Term *term, char c); -void term_tcanvas_fg_color_set(Term *term, int c); -void term_tcanvas_bg_color_set(Term *term, int c); -int term_font_get_width(Term *term); -int term_font_get_height(Term *term); - -void term_handler_xterm_seq(int op, Term *term); -int term_handler_escape_seq(Term *term); - -void term_cb_key_down(void *data, Evas *e, Evas_Object *obj, void *event_info); -void term_cb_resize(Ecore_Evas *ee); - -static void strupper(char *str); -int term_timers(void *data); - -int get_pty(Term *term); -int get_tty(Term *term); -void sigchld_handler(int a); -struct passwd *find_user(void); -int execute_command(Term *term);//, int argc, const char **argv); - -void term_window_init(Ecore_Evas *ee, Evas *evas); -void term_term_bg_set(Term *term, char *img); -void term_redraw(void *data); - -int term_cursor_move_up(Term *term, int n); -int term_cursor_move_down(Term *term, int n); -int term_cursor_move_left(Term *term, int n); -int term_cursor_move_right(Term *term, int n); -int term_cursor_move_col(Term *term, int n); -int term_cursor_move_row(Term *term, int n); -void term_cursor_goto(Term *term, int x, int y); -void term_cursor_rego(Term *term); -void term_delete_rows(Term *term, int start, int n); -void term_add_rows(Term *term, int pos, int n); -void term_tcanvas_save(Term *term); -void term_tcanvas_restore(Term *term); -void term_clear_area(Term *term, int x1, int y1, int x2, int y2); -void term_scroll_up(Term *term, int rows); -void term_scroll_down(Term *term, int rows); +Term *term_init(Evas_Object *o); +Term_TCanvas *term_tcanvas_new(); +int term_tcanvas_data(void *data); +void term_tcanvas_glyph_push(Term *term, char c); +void term_tcanvas_fg_color_set(Term *term, int c); +void term_tcanvas_bg_color_set(Term *term, int c); +int term_font_get_width(Term *term); +int term_font_get_height(Term *term); + +void term_handler_xterm_seq(int op, Term *term); +int term_handler_escape_seq(Term *term); + +void term_cb_key_down(void *data, Evas *e, Evas_Object *obj, void *event_info); +void term_cb_resize(Ecore_Evas *ee); + +static void strupper(char *str); +int term_timers(void *data); + +struct winsize *get_font_dim(Term *term); +int get_pty(Term *term); +int get_tty(Term *term); +void sigchld_handler(int a); +struct passwd *find_user(void); +int execute_command(Term *term);//, int argc, const char **argv); + +void term_window_init(Ecore_Evas *ee, Evas *evas); +void term_term_bg_set(Term *term, char *img); +void term_redraw(void *data); + +int term_cursor_move_up(Term *term, int n); +int term_cursor_move_down(Term *term, int n); +int term_cursor_move_left(Term *term, int n); +int term_cursor_move_right(Term *term, int n); +int term_cursor_move_col(Term *term, int n); +int term_cursor_move_row(Term *term, int n); +void term_cursor_goto(Term *term, int x, int y); +void term_cursor_rego(Term *term); +void term_delete_rows(Term *term, int start, int n); +void term_add_rows(Term *term, int pos, int n); +void term_tcanvas_save(Term *term); +void term_tcanvas_restore(Term *term); +void term_clear_area(Term *term, int x1, int y1, int x2, int y2); +void term_scroll_up(Term *term, int rows); +void term_scroll_down(Term *term, int rows); -void term_smart_add(Evas_Object *o); -void term_smart_del(Evas_Object *o); -void term_smart_layer_set(Evas_Object *o, int l); -void term_smart_raise(Evas_Object *o); -void term_smart_lower(Evas_Object *o); -void term_smart_stack_above(Evas_Object *o, Evas_Object *above); -void term_smart_stack_below(Evas_Object *o, Evas_Object *below); -void term_smart_move(Evas_Object *o, Evas_Coord x, Evas_Coord y); -void term_smart_resize(Evas_Object *o, Evas_Coord w, Evas_Coord h); -void term_smart_show(Evas_Object *o); -void term_smart_hide(Evas_Object *o); -void term_smart_color_set(Evas_Object *o, int r, int g, int b, int a); -void term_smart_clip_set(Evas_Object *o, Evas_Object *clip); -void term_smart_clip_unset(Evas_Object *o); -Evas_Smart *term_smart_get(); +void term_smart_add(Evas_Object *o); +void term_smart_del(Evas_Object *o); +void term_smart_layer_set(Evas_Object *o, int l); +void term_smart_raise(Evas_Object *o); +void term_smart_lower(Evas_Object *o); +void term_smart_stack_above(Evas_Object *o, Evas_Object *above); +void term_smart_stack_below(Evas_Object *o, Evas_Object *below); +void term_smart_move(Evas_Object *o, Evas_Coord x, Evas_Coord y); +void term_smart_resize(Evas_Object *o, Evas_Coord w, Evas_Coord h); +void term_smart_show(Evas_Object *o); +void term_smart_hide(Evas_Object *o); +void term_smart_color_set(Evas_Object *o, int r, int g, int b, int a); +void term_smart_clip_set(Evas_Object *o, Evas_Object *clip); +void term_smart_clip_unset(Evas_Object *o); +Evas_Smart *term_smart_get(); -void enterm_init(Ecore_Evas *ee, Evas_Object *term); -void enterm_cb_resize(Ecore_Evas *ee); +void enterm_init(Ecore_Evas *ee, Evas_Object *term); +void enterm_cb_resize(Ecore_Evas *ee); =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/enterminus/src/bin/ui.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -3 -r1.10 -r1.11 --- ui.c 8 Feb 2005 11:45:58 -0000 1.10 +++ ui.c 11 Feb 2005 13:07:56 -0000 1.11 @@ -11,6 +11,11 @@ #define COLOR7 250, 250, 250 #define COLOR8 231, 105, 50 +/* set the bg */ +/* TODO: This should now be here, what we need to have is a rectangle + * that will simply capture keys. This should be set by the application + * that uses the smart object + */ void term_term_bg_set(Term *term, char *img) { if(!term->bg) { @@ -37,32 +42,42 @@ Evas_Object *ob; Term_EGlyph *gl; Term_TGlyph *tgl; - - i2 = term->tcanvas->scroll_region_start; + i2 = term->tcanvas->scroll_region_start; + + /* loop over all rows, see what has changed */ + /* the general idea is to only inspect as many rows from the tcanvas + * as we have in the term->grid. We loop that man times, which is + * term->tcanvas->rows times, and look for changed flags in each row. + * Since i (0 -> rows) cant be used to subscript the current rows, we + * start it from scroll_region_start. + */ for(i = 0; i < term->tcanvas->rows; i++) { if(term->tcanvas->changed_rows[i2] != 1) { + /* unchanged row, increment i2 and continue */ i2++; continue; } - /* printf("Rendering c-row %d g-row %d\n",i2,i); */ + + /* fetch the text glyph */ for(j = 0; j < term->tcanvas->cols; j++) { - tgl = &term->tcanvas->grid[j + - (term->tcanvas->cols * - (i2) - )]; + tgl = &term->tcanvas->grid[j + (term->tcanvas->cols * i2)]; if(tgl->changed != 1) { + /* unchanged glyph, continue */ continue; } + /* unsure as to why this is here, I dont think we need it */ if(tgl->c == '\033') { printf("Got escape in term_redraw()!\n"); continue; } + /* check if start pointer has gone past virtual scroll buffer */ + /* when we overflow, we store row numbers in ig */ 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("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); + DPRINT((stderr,"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)]; } @@ -196,13 +211,14 @@ } /* Save the current screen */ -void term_tcanvas_save(Term *term) { +void term_tcanvas_save(Term *term) { } /* Restore the last saved screen */ void term_tcanvas_restore(Term *term) { } +/* clear a certain part of the screen */ void term_clear_area(Term *term, int x1, int y1, int x2, int y2) { int i, j; Term_TGlyph *tgl; @@ -225,76 +241,81 @@ } } +/* scroll window / region upwards */ void term_scroll_up(Term *term, int rows) { int i, i2, j; int x,y; Term_TGlyph *gl; + + if(term->tcanvas->scroll_in_region) { + /* TODO: implement this */ + DPRINT((stderr,"Scrolling: in region\n")); + } else { + DPRINT((stderr,"Scrolling: window\n")); + /* Going past the virtual scroll buffer, we need to wrap */ + if(term->tcanvas->scroll_region_end + rows > + (term->tcanvas->rows-1) * term->tcanvas->scroll_size) { + DPRINT((stderr,"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're 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 { + /* normal scrolling */ + term->tcanvas->scroll_region_end+=rows; + } - if(term->tcanvas->scroll_region_end + rows > - (term->tcanvas->rows-1) * term->tcanvas->scroll_size) { - 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're 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; + /* Start pointer going past virtual scroll buffer */ + if(term->tcanvas->scroll_region_start + rows > + (term->tcanvas->rows-1) * term->tcanvas->scroll_size) { + DPRINT((stderr,"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 { + /* normal scrolling */ + term->tcanvas->scroll_region_start+= rows; + } + + /* set changed flags on chars */ + /* if start and end are havent gone past virtual scroll buffer */ + if(term->tcanvas->scroll_region_start < term->tcanvas->scroll_region_end) + i2 = term->tcanvas->scroll_region_end; + else { + /* we now have two areas to modify: + * the first being at the end of the virtual scroll buffer + * the second being at the start + */ + 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->changed = 1; + } } + i2 = (term->tcanvas->rows - 1) * term->tcanvas->scroll_size; } - } else { - term->tcanvas->scroll_region_end+=rows; - } - - if(term->tcanvas->scroll_region_start + rows > - (term->tcanvas->rows-1) * term->tcanvas->scroll_size) { - 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 { - for(i = 0; i <= term->tcanvas->scroll_region_end; i++) { + /* set changed flag from start until determined end */ + 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; - } - } - i2 = (term->tcanvas->rows - 1) * term->tcanvas->scroll_size; - } - - 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; - } - } - - - return; - - if(term->tcanvas->scroll_in_region) { - printf("SCROLL IN REGION!!!!!!!!!!!!!!!!!!!!\n"); - } else { - + } + } } } +/* scroll window / region down */ void term_scroll_down(Term *term, int rows) { if(term->tcanvas->scroll_in_region) { |