Evas: Support cserve2 for xcb engine.

SVN revision: 73033
This commit is contained in:
Christopher Michael 2012-06-29 12:01:34 +00:00
parent 725a3ed4db
commit 0d1c4661ab
2 changed files with 139 additions and 25 deletions

View File

@ -35,6 +35,7 @@ AM_CPPFLAGS = \
-I. \
-I$(top_srcdir)/src/lib \
-I$(top_srcdir)/src/lib/include \
-I$(top_srcdir)/src/lib/cserve2 \
-I$(top_srcdir)/src/modules/engines \
@FREETYPE_CFLAGS@ \
@PIXMAN_CFLAGS@ \

View File

@ -1,9 +1,17 @@
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <pixman.h>
#ifdef EVAS_CSERVE2
# include "evas_cs2_private.h"
#endif
#include "evas_common.h"
#include "evas_macros.h"
#include "evas_xcb_outbuf.h"
#include "evas_xcb_buffer.h"
#include "evas_xcb_color.h"
#include <pixman.h>
/* local structures */
typedef struct _Outbuf_Region Outbuf_Region;
@ -46,7 +54,13 @@ evas_software_xcb_outbuf_free(Outbuf *buf)
eina_list_remove_list(buf->priv.pending_writes,
buf->priv.pending_writes);
obr = im->extended_info;
evas_cache_image_drop(&im->cache_entry);
#ifdef EVAS_CSERVE2
if (evas_cserve2_use_get())
evas_cache2_image_close(&im->cache_entry);
else
#endif
evas_cache_image_drop(&im->cache_entry);
if (obr->xcbob) _unfind_xcbob(obr->xcbob, EINA_FALSE);
if (obr->mask) _unfind_xcbob(obr->mask, EINA_FALSE);
free(obr);
@ -281,11 +295,25 @@ evas_software_xcb_outbuf_new_region_for_update(Outbuf *buf, int x, int y, int w,
free(obr);
return NULL;
}
im =
(RGBA_Image *)evas_cache_image_data(evas_common_image_cache_get(),
buf->w, buf->h,
(DATA32 *)evas_software_xcb_output_buffer_data(obr->xcbob, &bpl),
alpha, EVAS_COLORSPACE_ARGB8888);
#ifdef EVAS_CSERVE2
if (evas_cserve2_use_get())
{
im =
(RGBA_Image *)evas_cache2_image_data(evas_common_image_cache2_get(),
buf->w, buf->h,
(DATA32 *)evas_software_xcb_output_buffer_data(obr->xcbob, &bpl),
alpha, EVAS_COLORSPACE_ARGB8888);
}
else
#endif
{
im =
(RGBA_Image *)evas_cache_image_data(evas_common_image_cache_get(),
buf->w, buf->h,
(DATA32 *)evas_software_xcb_output_buffer_data(obr->xcbob, &bpl),
alpha, EVAS_COLORSPACE_ARGB8888);
}
if (!im)
{
evas_software_xcb_output_buffer_free(obr->xcbob, EINA_FALSE);
@ -306,15 +334,32 @@ evas_software_xcb_outbuf_new_region_for_update(Outbuf *buf, int x, int y, int w,
{
int bw = 0, bh = 0;
im =
(RGBA_Image *)evas_cache_image_empty(evas_common_image_cache_get());
#ifdef EVAS_CSERVE2
if (evas_cserve2_use_get())
{
im =
(RGBA_Image *)evas_cache2_image_empty(evas_common_image_cache2_get());
}
else
#endif
{
im =
(RGBA_Image *)evas_cache_image_empty(evas_common_image_cache_get());
}
if (!im)
{
free(obr);
return NULL;
}
im->cache_entry.flags.alpha |= (alpha ? 1 : 0);
evas_cache_image_surface_alloc(&im->cache_entry, buf->w, buf->h);
#ifdef EVAS_CSERVE2
if (evas_cserve2_use_get())
evas_cache2_image_surface_alloc(&im->cache_entry, buf->w, buf->h);
else
#endif
evas_cache_image_surface_alloc(&im->cache_entry, buf->w, buf->h);
im->extended_info = obr;
if ((buf->rot == 0) || (buf->rot == 180))
{
@ -333,7 +378,13 @@ evas_software_xcb_outbuf_new_region_for_update(Outbuf *buf, int x, int y, int w,
bw, bh, use_shm, NULL);
if (!obr->xcbob)
{
evas_cache_image_drop(&im->cache_entry);
#ifdef EVAS_CSERVE2
if (evas_cserve2_use_get())
evas_cache2_image_close(&im->cache_entry);
else
#endif
evas_cache_image_drop(&im->cache_entry);
free(obr);
return NULL;
}
@ -381,11 +432,25 @@ evas_software_xcb_outbuf_new_region_for_update(Outbuf *buf, int x, int y, int w,
free(obr);
return NULL;
}
im =
(RGBA_Image *)evas_cache_image_data(evas_common_image_cache_get(),
w, h,
(DATA32 *)evas_software_xcb_output_buffer_data(obr->xcbob, &bpl),
alpha, EVAS_COLORSPACE_ARGB8888);
#ifdef EVAS_CSERVE2
if (evas_cserve2_use_get())
{
im =
(RGBA_Image *)evas_cache2_image_data(evas_common_image_cache2_get(),
w, h,
(DATA32 *)evas_software_xcb_output_buffer_data(obr->xcbob, &bpl),
alpha, EVAS_COLORSPACE_ARGB8888);
}
else
#endif
{
im =
(RGBA_Image *)evas_cache_image_data(evas_common_image_cache_get(),
w, h,
(DATA32 *)evas_software_xcb_output_buffer_data(obr->xcbob, &bpl),
alpha, EVAS_COLORSPACE_ARGB8888);
}
if (!im)
{
_unfind_xcbob(obr->xcbob, EINA_FALSE);
@ -404,15 +469,32 @@ evas_software_xcb_outbuf_new_region_for_update(Outbuf *buf, int x, int y, int w,
{
int bw = 0, bh = 0;
im =
(RGBA_Image *)evas_cache_image_empty(evas_common_image_cache_get());
#ifdef EVAS_CSERVE2
if (evas_cserve2_use_get())
{
im =
(RGBA_Image *)evas_cache2_image_empty(evas_common_image_cache2_get());
}
else
#endif
{
im =
(RGBA_Image *)evas_cache_image_empty(evas_common_image_cache_get());
}
if (!im)
{
free(obr);
return NULL;
}
im->cache_entry.flags.alpha |= (alpha ? 1 : 0);
evas_cache_image_surface_alloc(&im->cache_entry, w, h);
#ifdef EVAS_CSERVE2
if (evas_cserve2_use_get())
evas_cache2_image_surface_alloc(&im->cache_entry, w, h);
else
#endif
evas_cache_image_surface_alloc(&im->cache_entry, w, h);
im->extended_info = obr;
if ((buf->rot == 0) || (buf->rot == 180))
{
@ -429,7 +511,12 @@ evas_software_xcb_outbuf_new_region_for_update(Outbuf *buf, int x, int y, int w,
buf->priv.x11.xcb.depth, bw, bh, use_shm, NULL);
if (!obr->xcbob)
{
evas_cache_image_drop(&im->cache_entry);
#ifdef EVAS_CSERVE2
if (evas_cserve2_use_get())
evas_cache2_image_close(&im->cache_entry);
else
#endif
evas_cache_image_drop(&im->cache_entry);
free(obr);
return NULL;
}
@ -567,7 +654,13 @@ evas_software_xcb_outbuf_flush(Outbuf *buf)
eina_list_remove_list(buf->priv.prev_pending_writes,
buf->priv.prev_pending_writes);
obr = im->extended_info;
evas_cache_image_drop(&im->cache_entry);
# ifdef EVAS_CSERVE2
if (evas_cserve2_use_get())
evas_cache2_image_close(&im->cache_entry);
else
# endif
evas_cache_image_drop(&im->cache_entry);
if (obr->xcbob) _unfind_xcbob(obr->xcbob, EINA_FALSE);
if (obr->mask) _unfind_xcbob(obr->mask, EINA_FALSE);
free(obr);
@ -586,11 +679,21 @@ evas_software_xcb_outbuf_flush(Outbuf *buf)
eina_list_remove_list(buf->priv.pending_writes,
buf->priv.pending_writes);
obr = im->extended_info;
evas_cache_image_drop(&im->cache_entry);
# ifdef EVAS_CSERVE2
if (evas_cserve2_use_get())
evas_cache2_image_close(&im->cache_entry);
else
# endif
evas_cache_image_drop(&im->cache_entry);
if (obr->xcbob) _unfind_xcbob(obr->xcbob, EINA_FALSE);
if (obr->mask) _unfind_xcbob(obr->mask, EINA_FALSE);
free(obr);
evas_cache_image_drop(&im->cache_entry);
# ifdef EVAS_CSERVE2
if (evas_cserve2_use_get())
evas_cache2_image_close(&im->cache_entry);
else
# endif
evas_cache_image_drop(&im->cache_entry);
}
#endif
}
@ -613,7 +716,12 @@ evas_software_xcb_outbuf_idle_flush(Outbuf *buf)
if (obr->mask)
evas_software_xcb_output_buffer_free(obr->mask, EINA_FALSE);
free(obr);
evas_cache_image_drop(&im->cache_entry);
# ifdef EVAS_CSERVE2
if (evas_cserve2_use_get())
evas_cache2_image_close(&im->cache_entry);
else
# endif
evas_cache_image_drop(&im->cache_entry);
}
else
{
@ -629,7 +737,12 @@ evas_software_xcb_outbuf_idle_flush(Outbuf *buf)
eina_list_remove_list(buf->priv.prev_pending_writes,
buf->priv.prev_pending_writes);
obr = im->extended_info;
evas_cache_image_drop(&im->cache_entry);
# ifdef EVAS_CSERVE2
if (evas_cserve2_use_get())
evas_cache2_image_close(&im->cache_entry);
else
# endif
evas_cache_image_drop(&im->cache_entry);
if (obr->xcbob) _unfind_xcbob(obr->xcbob, EINA_FALSE);
if (obr->mask) _unfind_xcbob(obr->mask, EINA_FALSE);
free(obr);