Enlightenment CVS committal Author : raster Project : e17 Module : libs/ecore
Dir : e17/libs/ecore/src/lib/ecore_evas Modified Files: Tag: SPLIT Ecore_Evas.h Makefile.am ecore_evas.c ecore_evas_private.h Log Message: ecore_evas is almost complete... :) =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_evas/Attic/Ecore_Evas.h,v retrieving revision 1.1.2.7 retrieving revision 1.1.2.8 diff -u -3 -r1.1.2.7 -r1.1.2.8 --- Ecore_Evas.h 8 Feb 2003 07:03:41 -0000 1.1.2.7 +++ Ecore_Evas.h 9 Feb 2003 00:41:46 -0000 1.1.2.8 @@ -27,7 +27,7 @@ void ecore_evas_callback_delete_request_set(Ecore_Evas *ee, void (*func) (Ecore_Evas *ee)); void ecore_evas_callback_destroy_set(Ecore_Evas *ee, void (*func) (Ecore_Evas *ee)); void ecore_evas_callback_focus_in_set(Ecore_Evas *ee, void (*func) (Ecore_Evas *ee)); - void ecore_evas_callback_focus_out_set(Ecore_Evas *ee, void (*func) (Ecore_Evas *ee)); + void fecore_evas_callback_focus_out_set(Ecore_Evas *ee, void (*func) +(Ecore_Evas *ee)); void ecore_evas_callback_mouse_in_set(Ecore_Evas *ee, void (*func) (Ecore_Evas *ee)); void ecore_evas_callback_mouse_out_set(Ecore_Evas *ee, void (*func) (Ecore_Evas *ee)); Evas *ecore_evas_get(Ecore_Evas *ee); @@ -37,8 +37,8 @@ void ecore_evas_geometry_get(Ecore_Evas *ee, int *x, int *y, int *w, int *h); void ecore_evas_rotation_set(Ecore_Evas *ee, int rot); int ecore_evas_rotation_get(Ecore_Evas *ee); - void ecore_evas_shaped_set(Ecore_Evas *ee, int shaped); - int ecore_evas_shaped_get(Ecore_Evas *ee); + void ecore_evas_shaped_set(Ecore_Evas *ee, int shaped); + int ecore_evas_shaped_get(Ecore_Evas *ee); void ecore_evas_show(Ecore_Evas *ee); void ecore_evas_hide(Ecore_Evas *ee); int ecore_evas_visibility_get(Ecore_Evas *ee); @@ -63,17 +63,17 @@ void ecore_evas_focus_set(Ecore_Evas *ee, int on); int ecore_evas_focus_get(Ecore_Evas *ee); void ecore_evas_iconified_set(Ecore_Evas *ee, int on); - int ecore_evas_iconified_get(Ecore_Evas *ee); + int ecore_evas_iconified_get(Ecore_Evas *ee); void ecore_evas_borderless_set(Ecore_Evas *ee, int on); int ecore_evas_borderless_get(Ecore_Evas *ee); void ecore_evas_override_set(Ecore_Evas *ee, int on); int ecore_evas_override_get(Ecore_Evas *ee); void ecore_evas_maximized_set(Ecore_Evas *ee, int on); - int ecore_evas_maximized_get(Ecore_Evas *ee); + int ecore_evas_maximized_get(Ecore_Evas *ee); void ecore_evas_fullscreen_set(Ecore_Evas *ee, int on); int ecore_evas_fullscreen_get(Ecore_Evas *ee); - void ecore_evas_avoid_damage_set(Ecore_Evas *ee, int on); - int ecore_evas_avoid_damage_get(Ecore_Evas *ee); + void ecore_evas_avoid_damage_set(Ecore_Evas *ee, int on); + int ecore_evas_avoid_damage_get(Ecore_Evas *ee); #ifdef __cplusplus } =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_evas/Attic/Makefile.am,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -u -3 -r1.1.2.3 -r1.1.2.4 --- Makefile.am 8 Feb 2003 01:30:57 -0000 1.1.2.3 +++ Makefile.am 9 Feb 2003 00:41:46 -0000 1.1.2.4 @@ -13,5 +13,13 @@ ecore_evas.c \ ecore_evas_private.h -libecore_evas_la_LIBADD = @evas_libs@ +libecore_evas_la_LIBADD = $(LDFLAGS) \ +$(top_builddir)/src/lib/ecore_x/libecore_x.la \ +$(top_builddir)/src/lib/ecore/libecore.la \ +@evas_libs@ + libecore_evas_la_LDFLAGS = -version-info 1:0:0 + +libecore_evas_la_DEPENDENCIES = \ +$(top_builddir)/src/lib/ecore_x/libecore_x.la \ +$(top_builddir)/src/lib/ecore/libecore.la =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_evas/Attic/ecore_evas.c,v retrieving revision 1.1.2.7 retrieving revision 1.1.2.8 diff -u -3 -r1.1.2.7 -r1.1.2.8 --- ecore_evas.c 8 Feb 2003 07:03:41 -0000 1.1.2.7 +++ ecore_evas.c 9 Feb 2003 00:41:46 -0000 1.1.2.8 @@ -225,7 +225,13 @@ e = event; ee = _ecore_evas_software_x11_match(e->win); if (!ee) return 1; /* pass on event */ - evas_damage_rectangle_add(ee->evas, e->x, e->y, e->w, e->h); + if (ee->prop.avoid_damage) + { + ecore_x_pixmap_paste(ee->x11.pmap, ee->x11.win, ee->x11.gc, + e->x, e->y, e->w, e->h, e->x, e->y); + } + else + evas_damage_rectangle_add(ee->evas, e->x, e->y, e->w, e->h); return 0; /* dont pass it on */ } @@ -270,6 +276,16 @@ ecore_x_window_resize(ee->x11.win, ee->w, ee->h); evas_output_size_set(ee->evas, ee->w, ee->h); evas_output_viewport_set(ee->evas, 0, 0, ee->w, ee->h); + if (ee->prop.avoid_damage) + { + ecore_evas_avoid_damage_set(ee, 0); + ecore_evas_avoid_damage_set(ee, 1); + } + if (ee->shaped) + { + ecore_evas_shaped_set(ee, 0); + ecore_evas_shaped_set(ee, 1); + } if (ee->func.fn_resize) ee->func.fn_resize(ee); } return 0; /* dont pass it on */ @@ -328,7 +344,47 @@ Ecore_Evas *ee; ee = (Ecore_Evas *)l; - evas_render(ee->evas); + if (ee->prop.avoid_damage) + { + Evas_List *updates, *l; + + updates = evas_render_updates(ee->evas); + for (l = updates; l; l = l->next) + { + Evas_Rectangle *r; + + r = l->data; + ecore_x_pixmap_paste(ee->x11.pmap, ee->x11.win, ee->x11.gc, + r->x, r->y, r->w, r->h, r->x, r->y); + } + if ((ee->shaped) && (updates)) + { + if (ee->prop.fullscreen) + ecore_x_window_shape_mask_set(ee->x11.win, ee->x11.mask); + else + ecore_x_window_shape_mask_set(ee->x11.win_container, ee->x11.mask); + } + if (updates) evas_render_updates_free(updates); + } + else if (ee->visible) + { + if (ee->shaped) + { + Evas_List *updates; + + updates = evas_render_updates(ee->evas); + if (updates) + { + if (ee->prop.fullscreen) + ecore_x_window_shape_mask_set(ee->x11.win, ee->x11.mask); + else + ecore_x_window_shape_mask_set(ee->x11.win_container, +ee->x11.mask); + evas_render_updates_free(updates); + } + } + else + evas_render(ee->evas); + } } ecore_x_flush(); return 1; @@ -340,6 +396,9 @@ ecore_x_shutdown(); ecore_x_window_del(ee->x11.win); ecore_x_window_del(ee->x11.win_container); + if (ee->x11.pmap) ecore_x_pixmap_del(ee->x11.pmap); + if (ee->x11.mask) ecore_x_pixmap_del(ee->x11.mask); + if (ee->x11.gc) ecore_x_gc_del(ee->x11.gc); } /** @@ -467,8 +526,8 @@ if (ee->prop.clas) free(ee->prop.clas); if (ee->prop.cursor.file) free(ee->prop.cursor.file); if (ee->prop.cursor.object) evas_object_del(ee->prop.cursor.object); + if (ee->evas) evas_free(ee->evas); if (ee->func.fn_free) ee->func.fn_free(ee); - if (ee->evas); evas_free(ee->evas); ecore_evases = _ecore_list_remove(ecore_evases, ee); free(ee); } @@ -581,6 +640,33 @@ void ecore_evas_shaped_set(Ecore_Evas *ee, int shaped) { + Evas_Engine_Info_Software_X11 *einfo; + + if (((ee->shaped) && (shaped)) || + ((!ee->shaped) && (!shaped))) + return; + ee->shaped = shaped; + einfo = (Evas_Engine_Info_Software_X11 *)evas_engine_info_get(ee->evas); + if (einfo) + { + if (ee->shaped) + { + ee->x11.mask = ecore_x_pixmap_new(ee->x11.win, ee->w, ee->h, 1); + einfo->info.mask = ee->x11.mask; + evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo); + evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h); + } + else + { + if (ee->x11.mask) ecore_x_pixmap_del(ee->x11.mask); + if (ee->x11.gcm) ecore_x_gc_del(ee->x11.gcm); + ee->x11.mask = 0; + einfo->info.mask = 0; + evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo); + ecore_x_window_shape_mask_set(ee->x11.win, 0); + ecore_x_window_shape_mask_set(ee->x11.win_container, 0); + } + } } int @@ -890,6 +976,7 @@ ecore_x_window_raise(ee->x11.win); ecore_x_window_show(ee->x11.win); ecore_x_window_focus(ee->x11.win); + ecore_x_window_shape_mask_set(ee->x11.win_container, 0); ee->x = 0; ee->y = 0; } @@ -900,6 +987,7 @@ ecore_x_window_size_get(ee->x11.win_container, &pw, &ph); ecore_x_window_reparent(ee->x11.win, ee->x11.win_container, 0, 0); ecore_x_window_resize(ee->x11.win, pw, ph); + ecore_x_window_shape_mask_set(ee->x11.win, 0); } ee->prop.fullscreen = on; } @@ -914,22 +1002,29 @@ ecore_evas_avoid_damage_set(Ecore_Evas *ee, int on) { Evas_Engine_Info_Software_X11 *einfo; - + + if (((ee->prop.avoid_damage) && (on)) || + ((!ee->prop.avoid_damage) && (!on))) + return; ee->prop.avoid_damage = on; einfo = (Evas_Engine_Info_Software_X11 *)evas_engine_info_get(ee->evas); if (einfo) { if (ee->prop.avoid_damage) { + ee->x11.pmap = ecore_x_pixmap_new(ee->x11.win, ee->w, ee->h, 0); + ee->x11.gc = ecore_x_gc_new(ee->x11.pmap); einfo->info.drawable = ee->x11.pmap; - einfo->info.drawable = ee->x11.mask; evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo); evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h); } else { + if (ee->x11.pmap) ecore_x_pixmap_del(ee->x11.pmap); + if (ee->x11.gc) ecore_x_gc_del(ee->x11.gc); + ee->x11.pmap = 0; + ee->x11.gc = 0; einfo->info.drawable = ee->x11.win; - einfo->info.drawable = ee->x11.mask; evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo); } } =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_evas/Attic/ecore_evas_private.h,v retrieving revision 1.1.2.5 retrieving revision 1.1.2.6 diff -u -3 -r1.1.2.5 -r1.1.2.6 --- ecore_evas_private.h 8 Feb 2003 05:05:04 -0000 1.1.2.5 +++ ecore_evas_private.h 9 Feb 2003 00:41:46 -0000 1.1.2.6 @@ -1,12 +1,8 @@ #ifndef _ECORE_EVAS_PRIVATE_H #define _ECORE_EVAS_PRIVATE_H -#define BUILD_EVAS_X - #include <Evas.h> -#ifdef BUILD_EVAS_X #include <Evas_Engine_Software_X11.h> -#endif typedef struct _Ecore_Evas Ecore_Evas; @@ -64,14 +60,14 @@ void (*fn_mouse_out) (Ecore_Evas *ee); } func; -#ifdef BUILD_EVAS_X struct { Window win_container; Window win; Pixmap pmap; Pixmap mask; + GC gc; + GC gcm; } x11; -#endif }; #endif ------------------------------------------------------- This SF.NET email is sponsored by: SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See! http://www.vasoftware.com _______________________________________________ enlightenment-cvs mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs