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