Enlightenment CVS committal Author : sebastid Project : e17 Module : libs/evas
Dir : e17/libs/evas/src/lib/engines/cairo_x11 Modified Files: .cvsignore evas_engine.c evas_engine.h evas_x_main.c Log Message: Cairo backend builds again. But is dead slow and isn't complete. =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/evas/src/lib/engines/cairo_x11/.cvsignore,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- .cvsignore 24 Aug 2005 16:11:06 -0000 1.2 +++ .cvsignore 1 Sep 2005 00:53:34 -0000 1.3 @@ -2,5 +2,5 @@ Makefile .deps .libs -libevas_engine_gl_x11.la +libevas_engine_cairo_x11.la *.lo =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/evas/src/lib/engines/cairo_x11/evas_engine.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- evas_engine.c 18 Jun 2005 01:00:31 -0000 1.6 +++ evas_engine.c 1 Sep 2005 00:53:34 -0000 1.7 @@ -1,3 +1,6 @@ +/* + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + */ #include "evas_common.h" #include "evas_private.h" #include "evas_engine.h" @@ -80,11 +83,7 @@ struct _Render_Engine { - Tilebuf *tb; - Tilebuf_Rect *rects; - Evas_Object_List *cur_rect; Evas_Cairo_X11_Window *win; - unsigned char end : 1; }; Evas_Func evas_engine_cairo_x11_func = @@ -220,12 +219,11 @@ evas_engine_cairo_x11_output_setup(int w, int h, Display *disp, Drawable draw, Visual *vis, Colormap cmap, int depth) { Render_Engine *re; - int eb, evb; re = calloc(1, sizeof(Render_Engine)); re->win = evas_engine_cairo_x11_window_new(disp, draw, - 0 /* FIXME: screen 0 assumption */, - vis, cmap, depth, w, h); + 0 /* FIXME: screen 0 assumption */, + vis, cmap, depth, w, h); if (!re->win) { free(re); @@ -246,9 +244,6 @@ evas_common_draw_init(); evas_common_tilebuf_init(); - re->tb = evas_common_tilebuf_new(w, h); - evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE); - return re; } @@ -259,8 +254,7 @@ re = (Render_Engine *)data; - evas_common_tilebuf_free(re->tb); - if (re->rects) evas_common_tilebuf_free_render_rects(re->rects); + evas_engine_cairo_x11_window_free(re->win); free(re); @@ -277,10 +271,7 @@ re->win->w = w; re->win->h = h; - evas_common_tilebuf_free(re->tb); - re->tb = evas_common_tilebuf_new(w, h); - if (re->tb) - evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE); + evas_engine_cairo_x11_window_size_set(re->win, w, h); } static void @@ -289,16 +280,31 @@ Render_Engine *re; re = (Render_Engine *)data; - evas_common_tilebuf_set_tile_size(re->tb, w, h); + /* not used in cairo engine */ } static void evas_engine_cairo_x11_output_redraws_rect_add(void *data, int x, int y, int w, int h) { Render_Engine *re; + /* FIXME? cairo_surface_mark_dirty_rectangle */ re = (Render_Engine *)data; - evas_common_tilebuf_add_redraw(re->tb, x, y, w, h); + if (!re->win->draw.redraw) + { + re->win->draw.x1 = 0; + re->win->draw.y1 = 0; + re->win->draw.x2 = re->win->w - 1; + re->win->draw.y2 = re->win->h - 1; + } + else + { + if (x < re->win->draw.x1) re->win->draw.x1 = x; + if (y < re->win->draw.y1) re->win->draw.y1 = y; + if ((x + w - 1) > re->win->draw.x2) re->win->draw.x2 = x + w - 1; + if ((y + h - 1) > re->win->draw.y2) re->win->draw.y2 = y + h - 1; + } + re->win->draw.redraw = 1; } static void @@ -307,7 +313,7 @@ Render_Engine *re; re = (Render_Engine *)data; - evas_common_tilebuf_del_redraw(re->tb, x, y, w, h); + /* not used in cairo engine */ } static void @@ -316,98 +322,73 @@ Render_Engine *re; re = (Render_Engine *)data; - evas_common_tilebuf_clear(re->tb); - + re->win->draw.redraw = 0; } -typedef struct _Update Update; - -struct _Update -{ - int x, y, w, h; - GC gc; - Pixmap pm; -}; - static void * evas_engine_cairo_x11_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch) { Render_Engine *re; - Tilebuf_Rect *rect; - int ux, uy, uw, uh; - Update *u; re = (Render_Engine *)data; - if (re->end) - { - re->end = 0; - return NULL; - } - if (!re->rects) - { - re->rects = evas_common_tilebuf_get_render_rects(re->tb); - re->cur_rect = (Evas_Object_List *)re->rects; - } - if (!re->cur_rect) return NULL; - rect = (Tilebuf_Rect *)re->cur_rect; - ux = rect->x; uy = rect->y; uw = rect->w; uh = rect->h; - re->cur_rect = re->cur_rect->next; - if (!re->cur_rect) - { - evas_common_tilebuf_free_render_rects(re->rects); - re->rects = NULL; - re->end = 1; - } - *x = ux; *y = uy; *w = uw; *h = uh; - *cx = 0; *cy = 0; *cw = uw; *ch = uh; - u = malloc(sizeof(Update)); - u->pm = XCreatePixmap(re->win->disp, re->win->win, uw, uh, re->win->depth); - u->gc = XCreateGC(re->win->disp, u->pm, 0, NULL); - u->x = ux; u->y = uy; u->w = uw; u->h = uh; - cairo_set_target_drawable(re->win->cairo, re->win->disp, u->pm); - return u; + if (!re->win->draw.redraw) return NULL; + + if (x) *x = re->win->draw.x1; + if (y) *y = re->win->draw.y1; + if (w) *w = re->win->draw.x2 - re->win->draw.x1 + 1; + if (h) *h = re->win->draw.y2 - re->win->draw.y1 + 1; + if (cx) *cx = re->win->draw.x1; + if (cy) *cy = re->win->draw.y1; + if (cw) *cw = re->win->draw.x2 - re->win->draw.x1 + 1; + if (ch) *ch = re->win->draw.y2 - re->win->draw.y1 + 1; + return re; } static void evas_engine_cairo_x11_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h) { Render_Engine *re; - Update *u; re = (Render_Engine *)data; - u = surface; - XCopyArea(re->win->disp, u->pm, re->win->win, u->gc, 0, 0, w, h, x, y); - XFreePixmap(re->win->disp, u->pm); - XFreeGC(re->win->disp, u->gc); - free(u); + re->win->draw.redraw = 0; } static void evas_engine_cairo_x11_output_flush(void *data) { Render_Engine *re; - static int fr = 0; + Evas_Cairo_Context *ctxt; + Evas_List *l; re = (Render_Engine *)data; - XSync(re->win->disp, False); } static void * evas_engine_cairo_x11_context_new(void *data) { Render_Engine *re; + Evas_Cairo_Context *ctxt; re = (Render_Engine *)data; - return evas_common_draw_context_new(); + ctxt = calloc(1, sizeof(Evas_Cairo_Context)); + if (!ctxt) return NULL; + + ctxt->cairo = cairo_create(re->win->surface); + + return ctxt; } static void evas_engine_cairo_x11_context_free(void *data, void *context) { Render_Engine *re; + Evas_Cairo_Context *ctxt; re = (Render_Engine *)data; - evas_common_draw_context_free(context); + ctxt = context; + + cairo_destroy(ctxt->cairo); + free(ctxt); } static void @@ -416,7 +397,7 @@ Render_Engine *re; re = (Render_Engine *)data; - evas_common_draw_context_set_clip(context, x, y, w, h); + /* not used in cairo engine */ } static void @@ -425,7 +406,7 @@ Render_Engine *re; re = (Render_Engine *)data; - evas_common_draw_context_clip_clip(context, x, y, w, h); + /* not used in cairo engine */ } static void @@ -434,7 +415,7 @@ Render_Engine *re; re = (Render_Engine *)data; - evas_common_draw_context_unset_clip(context); + /* not used in cairo engine */ } static int @@ -443,32 +424,38 @@ Render_Engine *re; re = (Render_Engine *)data; - *x = ((RGBA_Draw_Context *)context)->clip.x; - *y = ((RGBA_Draw_Context *)context)->clip.y; - *w = ((RGBA_Draw_Context *)context)->clip.w; - *h = ((RGBA_Draw_Context *)context)->clip.h; - return ((RGBA_Draw_Context *)context)->clip.use; + /* not used in cairo engine */ + return 0; } static void evas_engine_cairo_x11_context_color_set(void *data, void *context, int r, int g, int b, int a) { Render_Engine *re; + Evas_Cairo_Context *ctxt; re = (Render_Engine *)data; - evas_common_draw_context_set_color(context, r, g, b, a); + ctxt = (Evas_Cairo_Context *)context; + + ctxt->col.r = (double)r / 255.0; + ctxt->col.g = (double)g / 255.0; + ctxt->col.b = (double)b / 255.0; + ctxt->col.a = (double)a / 255.0; } static int evas_engine_cairo_x11_context_color_get(void *data, void *context, int *r, int *g, int *b, int *a) { Render_Engine *re; + Evas_Cairo_Context *ctxt; re = (Render_Engine *)data; - *r = (int)(R_VAL(&((RGBA_Draw_Context *)context)->col.col)); - *g = (int)(G_VAL(&((RGBA_Draw_Context *)context)->col.col)); - *b = (int)(B_VAL(&((RGBA_Draw_Context *)context)->col.col)); - *a = (int)(A_VAL(&((RGBA_Draw_Context *)context)->col.col)); + ctxt = (Evas_Cairo_Context *)context; + + if (r) *r = ctxt->col.r * 255; + if (g) *g = ctxt->col.g * 255; + if (b) *b = ctxt->col.b * 255; + if (a) *a = ctxt->col.a * 255; return 1; } @@ -476,31 +463,43 @@ evas_engine_cairo_x11_context_multiplier_set(void *data, void *context, int r, int g, int b, int a) { Render_Engine *re; + Evas_Cairo_Context *ctxt; re = (Render_Engine *)data; - evas_common_draw_context_set_multiplier(context, r, g, b, a); + ctxt = (Evas_Cairo_Context *)context; + + ctxt->mul.r = (double)r / 255.0; + ctxt->mul.g = (double)g / 255.0; + ctxt->mul.b = (double)b / 255.0; + ctxt->mul.a = (double)a / 255.0; + ctxt->mul.set = 1; } static void evas_engine_cairo_x11_context_multiplier_unset(void *data, void *context) { Render_Engine *re; + Evas_Cairo_Context *ctxt; re = (Render_Engine *)data; - evas_common_draw_context_unset_multiplier(context); + ctxt = (Evas_Cairo_Context *)context; + ctxt->mul.set = 0; } static int evas_engine_cairo_x11_context_multiplier_get(void *data, void *context, int *r, int *g, int *b, int *a) { Render_Engine *re; + Evas_Cairo_Context *ctxt; re = (Render_Engine *)data; - *r = (int)(R_VAL(&((RGBA_Draw_Context *)context)->mul.col)); - *g = (int)(G_VAL(&((RGBA_Draw_Context *)context)->mul.col)); - *b = (int)(B_VAL(&((RGBA_Draw_Context *)context)->mul.col)); - *a = (int)(A_VAL(&((RGBA_Draw_Context *)context)->mul.col)); - return ((RGBA_Draw_Context *)context)->mul.use; + ctxt = (Evas_Cairo_Context *)context; + + if (r) *r = ctxt->mul.r * 255; + if (g) *g = ctxt->mul.g * 255; + if (b) *b = ctxt->mul.b * 255; + if (a) *a = ctxt->mul.a * 255; + return ctxt->mul.set; } static void @@ -521,42 +520,100 @@ /* not used in cairo engine */ } - - - - - static void evas_engine_cairo_x11_rectangle_draw(void *data, void *context, void *surface, int x, int y, int w, int h) { Render_Engine *re; + Evas_Cairo_Context *ctxt; + double r, g, b, a; re = (Render_Engine *)data; + ctxt = (Evas_Cairo_Context *)context; + + cairo_rectangle(ctxt->cairo, x, y, w, h); + r = ctxt->col.r; + g = ctxt->col.g; + b = ctxt->col.b; + a = ctxt->col.a; + if (ctxt->mul.set) + { + r *= ctxt->mul.r; + g *= ctxt->mul.g; + b *= ctxt->mul.b; + a *= ctxt->mul.a; + } + cairo_set_source_rgba(ctxt->cairo, r, g, b, a); + cairo_fill(ctxt->cairo); } static void evas_engine_cairo_x11_line_draw(void *data, void *context, void *surface, int x1, int y1, int x2, int y2) { Render_Engine *re; + Evas_Cairo_Context *ctxt; + double r, g, b, a; re = (Render_Engine *)data; + ctxt = (Evas_Cairo_Context *)context; + + cairo_move_to(ctxt->cairo, x1, y1); + cairo_line_to(ctxt->cairo, x2, y2); + r = ctxt->col.r; + g = ctxt->col.g; + b = ctxt->col.b; + a = ctxt->col.a; + if (ctxt->mul.set) + { + r *= ctxt->mul.r; + g *= ctxt->mul.g; + b *= ctxt->mul.b; + a *= ctxt->mul.a; + } + cairo_set_source_rgba(ctxt->cairo, r, g, b, a); + cairo_stroke(ctxt->cairo); } static void * evas_engine_cairo_x11_polygon_point_add(void *data, void *context, void *polygon, int x, int y) { Render_Engine *re; + Evas_Cairo_Context *ctxt; + Evas_Cairo_Polygon *poly; + Evas_Cairo_Polygon_Point *pt; re = (Render_Engine *)data; - return NULL; + ctxt = (Evas_Cairo_Context *)context; + poly = (Evas_Cairo_Polygon *)polygon; + if (!poly) poly = calloc(1, sizeof(Evas_Cairo_Polygon)); + + pt = malloc(sizeof(Evas_Cairo_Polygon_Point)); + if (pt) + { + pt->x = x; + pt->y = y; + poly->points = evas_list_append(poly->points, pt); + } + return poly; } static void * evas_engine_cairo_x11_polygon_points_clear(void *data, void *context, void *polygon) { Render_Engine *re; + Evas_Cairo_Context *ctxt; + Evas_Cairo_Polygon *poly; re = (Render_Engine *)data; + ctxt = (Evas_Cairo_Context *)context; + poly = (Evas_Cairo_Polygon *)polygon; + + while (poly->points) + { + free(poly->points->data); + poly->points = evas_list_remove_list(poly->points, poly->points); + } + free(poly); + return NULL; } @@ -564,8 +621,39 @@ evas_engine_cairo_x11_polygon_draw(void *data, void *context, void *surface, void *polygon) { Render_Engine *re; + Evas_Cairo_Context *ctxt; + Evas_Cairo_Polygon *poly; + Evas_Cairo_Polygon_Point *pt; + double r, g, b, a; re = (Render_Engine *)data; + ctxt = (Evas_Cairo_Context *)context; + poly = (Evas_Cairo_Polygon *)polygon; + + pt = poly->points->data; + if (pt) + { + Evas_List *l; + cairo_move_to(ctxt->cairo, pt->x, pt->y); + for (l = poly->points->next; l; l = l->next) + { + pt = l->data; + cairo_line_to(ctxt->cairo, pt->x, pt->y); + } + } + r = ctxt->col.r; + g = ctxt->col.g; + b = ctxt->col.b; + a = ctxt->col.a; + if (ctxt->mul.set) + { + r *= ctxt->mul.r; + g *= ctxt->mul.g; + b *= ctxt->mul.b; + a *= ctxt->mul.a; + } + cairo_set_source_rgba(ctxt->cairo, r, g, b, a); + cairo_stroke(ctxt->cairo); } static void * @@ -598,49 +686,93 @@ evas_engine_cairo_x11_image_load(void *data, char *file, char *key, int *error) { Render_Engine *re; + Evas_Cairo_Image *im; re = (Render_Engine *)data; - *error = 0; - { - Evas_Cairo_Image *im; + if (error) *error = 0; - im = calloc(1, sizeof(Evas_Cairo_Image)); - im->im = evas_common_load_image_from_file(file, key); - if (!im->im) - { - free(im); - return NULL; - } - im->references = 1; - return im; + im = calloc(1, sizeof(Evas_Cairo_Image)); + if (!im) return NULL; + + im->im = evas_common_load_image_from_file(file, key); + if (!im->im) + { + free(im); + return NULL; } - return NULL; + im->references = 1; + return im; } static void * evas_engine_cairo_x11_image_new_from_data(void *data, int w, int h, DATA32 *image_data) { Render_Engine *re; + Evas_Cairo_Image *im; re = (Render_Engine *)data; - return NULL; + + /* FIXME, cache! */ + im = calloc(1, sizeof(Evas_Cairo_Image)); + if (!im) return NULL; + + im->im = evas_common_image_new(); + if (!im->im) + { + free(im); + return NULL; + } + im->im->image = evas_common_image_surface_new(im->im); + if (!im->im->image) + { + evas_common_image_free(im->im); + free(im); + return NULL; + } + + im->im->image->w = w; + im->im->image->h = h; + im->im->image->data = image_data; + im->im->image->no_free = 1; + im->references = 1; + return im; } static void * evas_engine_cairo_x11_image_new_from_copied_data(void *data, int w, int h, DATA32 *image_data) { Render_Engine *re; + Evas_Cairo_Image *im; re = (Render_Engine *)data; - return NULL; + + /* FIXME, cache! */ + im = calloc(1, sizeof(Evas_Cairo_Image)); + if (!im) return NULL; + im->references = 1; + im->im = evas_common_image_create(w, h); + if (!im->im) + { + free(im); + return NULL; + } + if (data) + memcpy(im->im->image->data, data, w * h * sizeof(DATA32)); + return im; } static void evas_engine_cairo_x11_image_free(void *data, void *image) { Render_Engine *re; + Evas_Cairo_Image *im; re = (Render_Engine *)data; + im = (Evas_Cairo_Image *)image; + evas_common_image_free(im->im); + if (im->surface) cairo_surface_destroy(im->surface); + if (im->pattern) cairo_pattern_destroy(im->pattern); + free(im); } static void @@ -653,8 +785,8 @@ { if (w) *w = 0; if (h) *h = 0; - return; } + else { Evas_Cairo_Image *im; @@ -669,6 +801,7 @@ { Render_Engine *re; + /* FIXME */ re = (Render_Engine *)data; return image; } @@ -678,6 +811,7 @@ { Render_Engine *re; + /* FIXME */ re = (Render_Engine *)data; return image; } @@ -687,6 +821,7 @@ { Render_Engine *re; + /* FIXME */ re = (Render_Engine *)data; *image_data = NULL; return image; @@ -697,6 +832,7 @@ { Render_Engine *re; + /* FIXME */ re = (Render_Engine *)data; return image; } @@ -706,6 +842,7 @@ { Render_Engine *re; + /* FIXME */ re = (Render_Engine *)data; return image; } @@ -714,15 +851,13 @@ evas_engine_cairo_x11_image_alpha_get(void *data, void *image) { Render_Engine *re; + Evas_Cairo_Image *im; re = (Render_Engine *)data; if (!image) return 0; - { - Evas_Cairo_Image *im; - im = image; - if (im->im->flags & RGBA_IMAGE_HAS_ALPHA) return 1; - } + im = image; + if (im->im->flags & RGBA_IMAGE_HAS_ALPHA) return 1; return 0; } @@ -730,74 +865,72 @@ evas_engine_cairo_x11_image_draw(void *data, void *context, void *surface, void *image, int src_x, int src_y, int src_w, int src_h, int dst_x, int dst_y, int dst_w, int dst_h, int smooth) { Render_Engine *re; + Evas_Cairo_Context *ctxt; + Evas_Cairo_Image *im; + DATA32 *pix; re = (Render_Engine *)data; + ctxt = (Evas_Cairo_Context *)context; if (!image) return; - { - Evas_Cairo_Image *im; - Update *u; - DATA32 *pix; - im = image; - u = surface; - evas_common_load_image_data_from_file(im->im); - pix = im->im->image->data; - if (pix) + im = image; + evas_common_load_image_data_from_file(im->im); + pix = im->im->image->data; + if (pix) + { + if (!im->surface) { - if (!im->surf) + im->mulpix = malloc(im->im->image->w * im->im->image->h * sizeof(DATA32)); + if (im->mulpix) { - im->mulpix = malloc(im->im->image->w * im->im->image->h * sizeof(DATA32)); - if (im->mulpix) + int i, n; + DATA32 *p; + + n = im->im->image->w * im->im->image->h; + p = im->mulpix; + for (i = 0; i < n; i++) { - int i, n; - DATA32 *p; + int a; - n = im->im->image->w * im->im->image->h; - p = im->mulpix; - for (i = 0; i < n; i++) - { - int a; - - a = A_VAL(pix); - R_VAL(p) = (R_VAL(pix) * a) / 255; - G_VAL(p) = (G_VAL(pix) * a) / 255; - B_VAL(p) = (B_VAL(pix) * a) / 255; - A_VAL(p) = a; - p++; - pix++; - } - im->surf = cairo_surface_create_for_image(im->mulpix, - CAIRO_FORMAT_ARGB32, - im->im->image->w, - im->im->image->h, - 0); + a = A_VAL(pix); + R_VAL(p) = (R_VAL(pix) * a) / 255; + G_VAL(p) = (G_VAL(pix) * a) / 255; + B_VAL(p) = (B_VAL(pix) * a) / 255; + A_VAL(p) = a; + p++; + pix++; } + im->surface = cairo_image_surface_create_for_data(im->mulpix, + CAIRO_FORMAT_ARGB32, + im->im->image->w, + im->im->image->h, + 0); + im->pattern = cairo_pattern_create_for_surface(im->surface); } - if (smooth) - cairo_surface_set_filter(im->surf, CAIRO_FILTER_BILINEAR); - else - cairo_surface_set_filter(im->surf, CAIRO_FILTER_NEAREST); - cairo_save(re->win->cairo); - cairo_translate(re->win->cairo, - dst_x, - dst_y); - cairo_scale(re->win->cairo, - (double)src_w / (double)dst_w, - (double)src_h / (double)dst_h - ); - cairo_move_to(re->win->cairo, 0, 0); -// cairo_set_rgb_color(re->win->cairo, -// (double)(R_VAL(((RGBA_Draw_Context *)context)->col.col)) / 255.0, -// (double)(R_VAL(((RGBA_Draw_Context *)context)->col.col)) / 255.0, -// (double)(R_VAL(((RGBA_Draw_Context *)context)->col.col)) / 255.0); -// cairo_set_alpha(re->win->cairo, -// (double)(A_VAL(((RGBA_Draw_Context *)context)->col.col)) / 255.0); - cairo_show_surface(re->win->cairo, - im->surf, - im->im->image->w, - im->im->image->h); - cairo_restore(re->win->cairo); } + + if (smooth) + cairo_pattern_set_filter(im->pattern, CAIRO_FILTER_BILINEAR); + else + cairo_pattern_set_filter(im->pattern, CAIRO_FILTER_NEAREST); + cairo_save(ctxt->cairo); + cairo_translate(ctxt->cairo, dst_x, dst_y); + cairo_scale(ctxt->cairo, + (double)src_w / (double)dst_w, + (double)src_h / (double)dst_h); + cairo_move_to(ctxt->cairo, 0, 0); + // cairo_set_rgb_color(re->win->cairo, + // (double)(R_VAL(((RGBA_Draw_Context *)context)->col.col)) / 255.0, + // (double)(R_VAL(((RGBA_Draw_Context *)context)->col.col)) / 255.0, + // (double)(R_VAL(((RGBA_Draw_Context *)context)->col.col)) / 255.0); + // cairo_set_alpha(re->win->cairo, + // (double)(A_VAL(((RGBA_Draw_Context *)context)->col.col)) / 255.0); + cairo_set_source_surface(ctxt->cairo, + im->surface, + im->im->image->w, + im->im->image->h); + cairo_paint(ctxt->cairo); + cairo_restore(ctxt->cairo); } } @@ -806,6 +939,7 @@ { Render_Engine *re; + /* FIXME */ re = (Render_Engine *)data; return NULL; } @@ -815,6 +949,7 @@ { Render_Engine *re; + /* FIXME */ re = (Render_Engine *)data; return ""; } @@ -854,8 +989,9 @@ { Render_Engine *re; + /* FIXME, use cairo font subsystem */ re = (Render_Engine *)data; - return evas_common_font_load(name, size); + return NULL; } static void * @@ -863,8 +999,9 @@ { Render_Engine *re; + /* FIXME, use cairo font subsystem */ re = (Render_Engine *)data; - return evas_common_font_memory_load(name, size, fdata, fdata_size); + return NULL; } static void * @@ -872,8 +1009,9 @@ { Render_Engine *re; + /* FIXME, use cairo font subsystem */ re = (Render_Engine *)data; - return evas_common_font_add(font, name, size); + return NULL; } static void * @@ -881,8 +1019,9 @@ { Render_Engine *re; + /* FIXME, use cairo font subsystem */ re = (Render_Engine *)data; - return evas_common_font_memory_add(font, name, size, fdata, fdata_size); + return NULL; } static void @@ -890,8 +1029,8 @@ { Render_Engine *re; + /* FIXME, use cairo font subsystem */ re = (Render_Engine *)data; - evas_common_font_free(font); } static int @@ -899,8 +1038,9 @@ { Render_Engine *re; + /* FIXME, use cairo font subsystem */ re = (Render_Engine *)data; - return evas_common_font_ascent_get(font); + return 0; } static int @@ -908,8 +1048,9 @@ { Render_Engine *re; + /* FIXME, use cairo font subsystem */ re = (Render_Engine *)data; - return evas_common_font_descent_get(font); + return 0; } static int @@ -917,8 +1058,9 @@ { Render_Engine *re; + /* FIXME, use cairo font subsystem */ re = (Render_Engine *)data; - return evas_common_font_max_ascent_get(font); + return 0; } static int @@ -926,8 +1068,9 @@ { Render_Engine *re; + /* FIXME, use cairo font subsystem */ re = (Render_Engine *)data; - return evas_common_font_max_descent_get(font); + return 0; } static void @@ -935,8 +1078,8 @@ { Render_Engine *re; + /* FIXME, use cairo font subsystem */ re = (Render_Engine *)data; - evas_common_font_query_size(font, text, w, h); } static int @@ -944,8 +1087,9 @@ { Render_Engine *re; + /* FIXME, use cairo font subsystem */ re = (Render_Engine *)data; - return evas_common_font_query_inset(font, text); + return 0; } static int @@ -954,9 +1098,9 @@ Render_Engine *re; int h, v; + /* FIXME, use cairo font subsystem */ re = (Render_Engine *)data; - evas_common_font_query_advance(font, text, &h, &v); - return h; + return 0; } static int @@ -965,9 +1109,9 @@ Render_Engine *re; int h, v; + /* FIXME, use cairo font subsystem */ re = (Render_Engine *)data; - evas_common_font_query_advance(font, text, &h, &v); - return v; + return 0; } static int @@ -975,8 +1119,9 @@ { Render_Engine *re; + /* FIXME, use cairo font subsystem */ re = (Render_Engine *)data; - return evas_common_font_query_char_coords(font, text, pos, cx, cy, cw, ch); + return 0; } static int @@ -984,8 +1129,9 @@ { Render_Engine *re; + /* FIXME, use cairo font subsystem */ re = (Render_Engine *)data; - return evas_common_font_query_text_at_pos(font, text, x, y, cx, cy, cw, ch); + return 0; } static void @@ -993,6 +1139,7 @@ { Render_Engine *re; + /* FIXME, use cairo font subsystem */ re = (Render_Engine *)data; } @@ -1001,8 +1148,8 @@ { Render_Engine *re; + /* FIXME, use cairo font subsystem */ re = (Render_Engine *)data; - evas_common_font_flush(); } static void @@ -1010,8 +1157,8 @@ { Render_Engine *re; + /* FIXME, use cairo font subsystem */ re = (Render_Engine *)data; - evas_common_font_cache_set(bytes); } static int @@ -1019,6 +1166,7 @@ { Render_Engine *re; + /* FIXME, use cairo font subsystem */ re = (Render_Engine *)data; - return evas_common_font_cache_get(); + return 0; } =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/evas/src/lib/engines/cairo_x11/evas_engine.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- evas_engine.h 22 May 2005 02:49:48 -0000 1.2 +++ evas_engine.h 1 Sep 2005 00:53:34 -0000 1.3 @@ -14,7 +14,12 @@ Visual *visual; Colormap colormap; int depth; - cairo_t *cairo; + cairo_surface_t *surface; + + struct { + int redraw : 1; + int x1, y1, x2, y2; + } draw; }; Evas_Cairo_X11_Window * @@ -30,5 +35,7 @@ evas_engine_cairo_x11_window_free(Evas_Cairo_X11_Window *cw); void evas_engine_cairo_x11_window_use(Evas_Cairo_X11_Window *cw); +void + evas_engine_cairo_x11_window_size_set(Evas_Cairo_X11_Window *cw, int w, int h); #endif =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/evas/src/lib/engines/cairo_x11/evas_x_main.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- evas_x_main.c 18 Jun 2005 01:00:31 -0000 1.3 +++ evas_x_main.c 1 Sep 2005 00:53:34 -0000 1.4 @@ -9,13 +9,13 @@ Evas_Cairo_X11_Window * evas_engine_cairo_x11_window_new(Display *disp, - Window win, - int screen, - Visual *vis, - Colormap cmap, - int depth, - int w, - int h) + Window win, + int screen, + Visual *vis, + Colormap cmap, + int depth, + int w, + int h) { Evas_Cairo_X11_Window *cw; @@ -27,8 +27,7 @@ cw->visual = vis; cw->colormap = cmap; cw->depth = depth; - cw->cairo = cairo_create(); -// evas_gl_common_context_resize(gw->gl_context, w, h); + cw->surface = cairo_xlib_surface_create(disp, win, vis, w, h); return cw; } @@ -36,7 +35,7 @@ evas_engine_cairo_x11_window_free(Evas_Cairo_X11_Window *cw) { if (cw == _evas_cairo_x11_window) _evas_cairo_x11_window = NULL; - cairo_destroy(cw->cairo); + cairo_surface_destroy(cw->surface); free(cw); } @@ -47,5 +46,10 @@ { _evas_cairo_x11_window = cw; } -// evas_gl_common_context_use(cw->gl_context); +} + +void +evas_engine_cairo_x11_window_size_set(Evas_Cairo_X11_Window *cw, int w, int h) +{ + cairo_xlib_surface_set_size(cw->surface, w, h); } ------------------------------------------------------- SF.Net email is Sponsored by the Better Software Conference & EXPO September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs