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