Enlightenment CVS committal
Author : barbieri
Project : e17
Module : libs/evas
Dir : e17/libs/evas/src/modules/engines/directfb
Modified Files:
evas_engine_dfb.c evas_engine_dfb.h
Log Message:
Try to get DirectFB working.
This is an initial cleanup, basically I removed all the DirectFB
accelerated calls and moved it to software common. I do plan to
gradually bring these back later, probably blit, rectangle and line
will come first.
===================================================================
RCS file: /cvs/e/e17/libs/evas/src/modules/engines/directfb/evas_engine_dfb.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -3 -r1.11 -r1.12
--- evas_engine_dfb.c 17 Jun 2007 02:56:57 -0000 1.11
+++ evas_engine_dfb.c 25 Feb 2008 06:13:53 -0000 1.12
@@ -2,123 +2,11 @@
#include <math.h>
#include <string.h>
-static Evas_Func evas_engine_directfb_func = {
- evas_engine_directfb_info,
- evas_engine_directfb_info_free,
- evas_engine_directfb_setup,
- evas_engine_directfb_output_free,
- evas_engine_directfb_output_resize,
- evas_engine_directfb_output_tile_size_set,
- evas_engine_directfb_output_redraws_rect_add,
- evas_engine_directfb_output_redraws_rect_del,
- evas_engine_directfb_output_redraws_clear,
- evas_engine_directfb_output_redraws_next_update_get,
- evas_engine_directfb_output_redraws_next_update_push,
- evas_engine_directfb_output_flush,
- evas_engine_directfb_output_idle_flush,
- /* draw context virtual methods */
- evas_engine_directfb_context_new,
- evas_engine_directfb_context_free,
- evas_engine_directfb_context_clip_set,
- evas_engine_directfb_context_clip_clip,
- evas_engine_directfb_context_clip_unset,
- evas_engine_directfb_context_clip_get,
- evas_engine_directfb_context_color_set,
- evas_engine_directfb_context_color_get,
- evas_engine_directfb_context_multiplier_set,
- evas_engine_directfb_context_multiplier_unset,
- evas_engine_directfb_context_multiplier_get,
- evas_engine_directfb_context_cutout_add,
- evas_engine_directfb_context_cutout_clear,
- evas_engine_directfb_context_anti_alias_set,
- evas_engine_directfb_context_anti_alias_get,
- evas_engine_directfb_context_color_interpolation_set,
- evas_engine_directfb_context_color_interpolation_get,
- evas_engine_directfb_context_render_op_set,
- evas_engine_directfb_context_render_op_get,
- /* rectangle draw funcs */
- evas_engine_directfb_draw_rectangle,
- /* line draw funcs */
- evas_engine_directfb_line_draw,
- /* poly draw funcs */
- evas_engine_directfb_polygon_point_add,
- evas_engine_directfb_polygon_points_clear,
- evas_engine_directfb_polygon_draw,
- /* gardient draw funcs */
- evas_engine_directfb_gradient_new,
- evas_engine_directfb_gradient_free,
- evas_engine_directfb_gradient_color_stop_add,
- evas_engine_directfb_gradient_alpha_stop_add,
- evas_engine_directfb_gradient_color_data_set,
- evas_engine_directfb_gradient_alpha_data_set,
- evas_engine_directfb_gradient_clear,
- evas_engine_directfb_gradient_fill_set,
- evas_engine_directfb_gradient_fill_angle_set,
- evas_engine_directfb_gradient_fill_spread_set,
- evas_engine_directfb_gradient_angle_set,
- evas_engine_directfb_gradient_offset_set,
- evas_engine_directfb_gradient_direction_set,
- evas_engine_directfb_gradient_type_set,
- evas_engine_directfb_gradient_is_opaque,
- evas_engine_directfb_gradient_is_visible,
- evas_engine_directfb_gradient_render_pre,
- evas_engine_directfb_gradient_render_post,
- evas_engine_directfb_gradient_draw,
- /* image draw funcs */
- evas_engine_directfb_image_load,
- evas_engine_directfb_image_new_from_data,
- evas_engine_directfb_image_new_from_copied_data,
- evas_engine_directfb_image_free,
- evas_engine_directfb_image_size_get,
- evas_engine_directfb_image_size_set,
- evas_engine_directfb_image_dirty_region,
- evas_engine_directfb_image_data_get,
- evas_engine_directfb_image_data_put,
- evas_engine_directfb_image_alpha_set,
- evas_engine_directfb_image_alpha_get,
- evas_engine_directfb_image_border_set,
- evas_engine_directfb_image_border_get,
- evas_engine_directfb_image_draw,
- evas_engine_directfb_image_comment_get,
- evas_engine_directfb_image_format_get,
- evas_engine_directfb_image_colorspace_set,
- evas_engine_directfb_image_colorspace_get,
- evas_engine_directfb_image_native_set,
- evas_engine_directfb_image_native_get,
-
- evas_engine_directfb_image_cache_flush,
- evas_engine_directfb_image_cache_set,
- evas_engine_directfb_image_cache_get,
- /* more to come */
- evas_engine_directfb_font_load,
- evas_engine_directfb_font_memory_load,
- evas_engine_directfb_font_add,
- evas_engine_directfb_font_memory_add,
- evas_engine_directfb_font_free,
- evas_engine_directfb_font_ascent_get,
- evas_engine_directfb_font_descent_get,
- evas_engine_directfb_font_max_ascent_get,
- evas_engine_directfb_font_max_descent_get,
- evas_engine_directfb_font_string_size_get,
- evas_engine_directfb_font_inset_get,
- evas_engine_directfb_font_h_advance_get,
- evas_engine_directfb_font_v_advance_get,
- evas_engine_directfb_font_char_coords_get,
- evas_engine_directfb_font_char_at_coords_get,
- evas_engine_directfb_font_draw,
- /* font cache functions */
- evas_engine_directfb_font_cache_flush,
- evas_engine_directfb_font_cache_set,
- evas_engine_directfb_font_cache_get,
-
- evas_engine_directfb_font_hinting_set,
- evas_engine_directfb_font_hinting_can_hint
-};
+static Evas_Func func, pfunc;
-
-void *
-evas_engine_directfb_info(Evas * e)
+static void *
+eng_info(Evas *e)
{
Evas_Engine_Info_DirectFB *info;
@@ -132,8 +20,8 @@
e = NULL;
}
-void
-evas_engine_directfb_info_free(Evas *e, void *info)
+static void
+eng_info_free(Evas *e, void *info)
{
Evas_Engine_Info_DirectFB *in;
@@ -141,40 +29,40 @@
free(in);
}
-void
-evas_engine_directfb_setup(Evas * e, void *in)
+static void *eng_output_setup(int w, int h, IDirectFB *dfb, IDirectFBSurface
*surf, DFBSurfaceDrawingFlags flags);
+
+static void
+eng_setup(Evas *e, void *in)
{
Evas_Engine_Info_DirectFB *info;
info = (Evas_Engine_Info_DirectFB *) in;
- /* if we arent set to directfb, why the hell do we get called?! */
- if (evas_output_method_get(e) != evas_render_method_lookup("directfb"))
- return;
- /* lets just set up */
- e->engine.data.output = evas_engine_directfb_output_setup(e->output.w,
- e->output.h,
- info->info.dfb,
- info->info.surface,
- info->info.flags);
+ if (!e->engine.data.output)
+ e->engine.data.output =
+ eng_output_setup(e->output.w,
+ e->output.h,
+ info->info.dfb,
+ info->info.surface,
+ info->info.flags);
if (!e->engine.data.output)
return;
- e->engine.func = &evas_engine_directfb_func;
- e->engine.data.context = e->engine.func->context_new(e->engine.data.output);
+ if (!e->engine.data.context)
+ e->engine.data.context =
+ e->engine.func->context_new(e->engine.data.output);
}
-void *
-evas_engine_directfb_output_setup(int w, int h, IDirectFB * dfb,
- IDirectFBSurface * surf,
- DFBSurfaceDrawingFlags flags)
+static void *
+eng_output_setup(int w, int h, IDirectFB *dfb, IDirectFBSurface *surf,
DFBSurfaceDrawingFlags flags)
{
- Render_Engine *re;
- IDirectFBSurface *buf;
+ Render_Engine *re;
DFBSurfaceDescription dsc;
+ DFBResult res;
RGBA_Image *im;
re = calloc(1, sizeof(Render_Engine));
/* if we haven't initialized - init (automatic abort if already done) */
evas_common_cpu_init();
+
evas_common_blend_init();
evas_common_image_init();
evas_common_convert_init();
@@ -195,62 +83,53 @@
memset(&dsc, 0, sizeof(DFBSurfaceDescription));
dsc.flags = DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_PIXELFORMAT;
- dsc.width = w;
- dsc.height = h;
+ dsc.width = (w > 0) ? w : 1;
+ dsc.height = (h > 0) ? h : 1;
dsc.pixelformat = DSPF_ARGB;
- if (dfb->CreateSurface(dfb, &dsc, &buf) == DFB_OK)
- re->backbuf = buf;
- if (!buf)
+ res = dfb->CreateSurface(dfb, &dsc, &re->backbuf);
+ if (res != DFB_OK)
{
- printf("DFB engine: cannot create backbuf\n");
+ printf("DFB engine: cannot create backbuf: %s\n",
+ DirectFBErrorString(res));
exit(-1);
}
- /* FIXME else exit with error. */
-
re->backbuf->SetDrawingFlags(re->backbuf, flags);
/* We create a "fake" RGBA_Image which points the to DFB surface. Each
access
* to that surface is wrapped in Lock / Unlock calls whenever the data is
* manipulated directly. */
- im = evas_common_image_new();
- if (!im) return NULL;
- im->image = evas_common_image_surface_new(im);
- if (!im->image)
- {
- evas_common_image_free(im);
- return NULL;
- }
+ im = evas_cache_image_empty(evas_common_image_cache_get());
im->image->w = w;
im->image->h = h;
- im->image->data =(void*) re->backbuf;
im->image->no_free = 1;
+ im->image->data = NULL;
re->rgba_image = im;
return re;
}
-void
-evas_engine_directfb_output_free(void *data)
+static void
+eng_output_free(void *data)
{
- Render_Engine *re;
+ Render_Engine *re;
re = (Render_Engine *) data;
evas_common_tilebuf_free(re->tb);
if (re->rects)
evas_common_tilebuf_free_render_rects(re->rects);
re->backbuf->Release(re->backbuf);
- evas_common_image_free(re->rgba_image);
+ evas_cache_image_drop(re->rgba_image);
free(re);
evas_common_font_shutdown();
evas_common_image_shutdown();
}
-void
-evas_engine_directfb_output_resize(void *data, int w, int h)
+static void
+eng_output_resize(void *data, int w, int h)
{
- Render_Engine *re;
+ Render_Engine *re;
IDirectFBSurface *new_surf;
DFBSurfaceDescription dsc;
@@ -263,8 +142,8 @@
memset(&dsc, 0, sizeof(DFBSurfaceDescription));
dsc.flags = DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_PIXELFORMAT;
- dsc.width = w;
- dsc.height = h;
+ dsc.width = (w > 0) ? w : 1;
+ dsc.height = (h > 0) ? h : 1;
dsc.pixelformat = DSPF_ARGB;
if (re->dfb->CreateSurface(re->dfb, &dsc, &new_surf) == DFB_OK)
@@ -274,57 +153,54 @@
re->backbuf = new_surf;
re->rgba_image->image->w = w;
re->rgba_image->image->h = h;
- re->rgba_image->image->data = (void *)new_surf;
+ re->rgba_image->image->data = NULL;
}
}
- void
-evas_engine_directfb_output_tile_size_set(void *data, int w, int h)
+static void
+eng_output_tile_size_set(void *data, int w, int h)
{
- Render_Engine *re;
+ Render_Engine *re;
re = (Render_Engine *) data;
evas_common_tilebuf_set_tile_size(re->tb, w, h);
}
-void
-evas_engine_directfb_output_redraws_rect_add(void *data, int x, int y, int w,
- int h)
+static void
+eng_output_redraws_rect_add(void *data, int x, int y, int w, int h)
{
- Render_Engine *re;
+ Render_Engine *re;
re = (Render_Engine *) data;
evas_common_tilebuf_add_redraw(re->tb, x, y, w, h);
}
-void
-evas_engine_directfb_output_redraws_rect_del(void *data, int x, int y, int w,
- int h)
+static void
+eng_output_redraws_rect_del(void *data, int x, int y, int w, int h)
{
- Render_Engine *re;
+ Render_Engine *re;
re = (Render_Engine *) data;
evas_common_tilebuf_del_redraw(re->tb, x, y, w, h);
}
-void
-evas_engine_directfb_output_redraws_clear(void *data)
+static void
+eng_output_redraws_clear(void *data)
{
- Render_Engine *re;
+ Render_Engine *re;
re = (Render_Engine *) data;
evas_common_tilebuf_clear(re->tb);
}
-void *
-evas_engine_directfb_output_redraws_next_update_get(void *data, int *x, int *y,
- int *w, int *h, int *cx,
- int *cy, int *cw, int *ch)
+static void *
+eng_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;
- DFBRegion region;
+ Render_Engine *re;
+ Tilebuf_Rect *rect;
+ int ux, uy, uw, uh, pitch;
+ void *pixels;
+ DFBRegion region;
re = (Render_Engine *) data;
if (re->end)
@@ -363,879 +239,74 @@
re->backbuf->Clear(re->backbuf, 0, 0, 0, 0);
re->backbuf->SetClip(re->backbuf, NULL);
-
- /* Return the "fake" surface so it is passed to the drawing routines. */
+ re->backbuf->Lock(re->backbuf, DSLF_WRITE, &pixels, &pitch);
+ re->rgba_image->image->data = pixels;
return re->rgba_image;
}
-void
-evas_engine_directfb_output_redraws_next_update_push(void *data, void *surface,
- int x, int y, int w, int h)
+static void
+eng_output_redraws_next_update_push(void *data, void *surface, int x, int y,
int w, int h)
{
- Render_Engine *re;
- DFBRectangle rect;
+ Render_Engine *re;
+ DFBRectangle rect = {x, y, w, h};
+ DFBRegion region = {x, y, x + w, y + h};
- rect.x = x;
- rect.y = y;
- rect.w = w;
- rect.h = h;
re = (Render_Engine *) data;
+ re->backbuf->Unlock(re->backbuf);
+ /* XXX TODO: store rect + x,y and use BatchBlit() */
re->surface->Blit(re->surface, re->backbuf, &rect, x, y);
+ re->surface->Flip(re->surface, ®ion, DSFLIP_NONE);
evas_common_cpu_end_opt();
-}
-
-void
-evas_engine_directfb_output_flush(void *data)
-{
- Render_Engine *re;
- re = (Render_Engine *) data;
+ re->rgba_image->image->data = NULL;
}
-void
-evas_engine_directfb_output_idle_flush(void *data)
-{
- Render_Engine *re;
-
- re = (Render_Engine *) data;
-}
-
-void *
-evas_engine_directfb_context_new(void *data)
-{
- Render_Engine *re;
-
- re = (Render_Engine *) data;
- return evas_common_draw_context_new();
-}
-
-void
-evas_engine_directfb_context_free(void *data, void *context)
-{
- Render_Engine *re;
-
- re = (Render_Engine *) data;
- evas_common_draw_context_free(context);
-}
-
-void
-evas_engine_directfb_context_clip_set(void *data, void *context, int x, int y,
- int w, int h)
-{
- Render_Engine *re;
-
- re = (Render_Engine *) data;
- evas_common_draw_context_set_clip(context, x, y, w, h);
-}
-
-void
-evas_engine_directfb_context_clip_clip(void *data, void *context, int x, int y,
- int w, int h)
-{
- Render_Engine *re;
-
- re = (Render_Engine *) data;
- evas_common_draw_context_clip_clip(context, x, y, w, h);
-}
-
-void
-evas_engine_directfb_context_clip_unset(void *data, void *context)
-{
- Render_Engine *re;
-
- re = (Render_Engine *) data;
- evas_common_draw_context_unset_clip(context);
-}
-
-int
-evas_engine_directfb_context_clip_get(void *data, void *context, int *x, int
*y,
- int *w, int *h)
-{
- 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;
-}
-
-void
-evas_engine_directfb_context_color_set(void *data, void *context, int r, int g,
- int b, int a)
-{
- Render_Engine *re;
- RGBA_Draw_Context *dc = (RGBA_Draw_Context *) context;
-
- re = (Render_Engine *) data;
- evas_common_draw_context_set_color(dc, r, g, b, a);
-}
-
-int
-evas_engine_directfb_context_color_get(void *data, void *context, int *r,
- int *g, int *b, int *a)
-{
- Render_Engine *re;
-
- 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));
- return 1;
-}
-
-void
-evas_engine_directfb_context_multiplier_set(void *data, void *context, int r,
- int g, int b, int a)
-{
- Render_Engine *re;
-
- re = (Render_Engine *) data;
- evas_common_draw_context_set_multiplier(context, r, g, b, a);
-}
-
-void
-evas_engine_directfb_context_multiplier_unset(void *data, void *context)
-{
- Render_Engine *re;
-
- re = (Render_Engine *) data;
- evas_common_draw_context_unset_multiplier(context);
-}
-
-int
-evas_engine_directfb_context_multiplier_get(void *data, void *context, int *r,
- int *g, int *b, int *a)
-{
- Render_Engine *re;
- RGBA_Draw_Context *dc = (RGBA_Draw_Context *) context;
-
- 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 dc->mul.use;
-}
-
-void
-evas_engine_directfb_context_cutout_add(void *data, void *context, int x, int
y,
- int w, int h)
-{
- Render_Engine *re;
-
- re = (Render_Engine *) data;
- evas_common_draw_context_add_cutout(context, x, y, w, h);
-}
-
-void
-evas_engine_directfb_context_cutout_clear(void *data, void *context)
-{
- Render_Engine *re;
-
- re = (Render_Engine *) data;
- evas_common_draw_context_clear_cutouts(context);
-}
-
-void
-evas_engine_directfb_context_anti_alias_set(void *data, void *context,
unsigned char aa)
-{
- Render_Engine *re;
-
- re = (Render_Engine *)data;
- evas_common_draw_context_set_anti_alias(context, aa);
-}
-
-unsigned char
-evas_engine_directfb_context_anti_alias_get(void *data, void *context)
-{
- Render_Engine *re;
-
- re = (Render_Engine *)data;
- return ((RGBA_Draw_Context *)context)->anti_alias;
-}
-
-void
-evas_engine_directfb_context_color_interpolation_set(void *data, void
*context, int color_space)
-{
- Render_Engine *re;
-
- re = (Render_Engine *)data;
- evas_common_draw_context_set_color_interpolation(context, color_space);
-}
-
-int
-evas_engine_directfb_context_color_interpolation_get(void *data, void *context)
-{
- Render_Engine *re;
-
- re = (Render_Engine *)data;
- return ((RGBA_Draw_Context *)context)->interpolation.color_space;
-}
-
-void
-evas_engine_directfb_context_render_op_set(void *data, void *context, int op)
-{
- Render_Engine *re;
-
- re = (Render_Engine *)data;
- evas_common_draw_context_set_render_op(context, op);
-}
-
-int
-evas_engine_directfb_context_render_op_get(void *data, void *context)
-{
- Render_Engine *re;
-
- re = (Render_Engine *)data;
- return ((RGBA_Draw_Context *)context)->render_op;
-}
-
-
-/*
- * Rectangles
- *
- *
- *
- * */
-
-void
-evas_engine_directfb_draw_rectangle(void *data, void *context, void *surface,
- int x, int y, int w, int h)
-{
- int i;
- int c, cx, cy, cw, ch;
- Cutout_Rects *rects;
- Cutout_Rect *r;
- RGBA_Draw_Context *dc = (RGBA_Draw_Context *) context;
- Render_Engine *re = (Render_Engine *) data;
-
- /* handle cutouts here! */
-
- /* no cutouts - cut right to the chase */
- if (!dc->cutout.rects)
- {
- rectangle_draw_internal(data, dc, x, y, w, h);
- return;
- }
- /* save out clip info */
- c = dc->clip.use;
- cx = dc->clip.x;
- cy = dc->clip.y;
- cw = dc->clip.w;
- ch = dc->clip.h;
- evas_common_draw_context_clip_clip(dc, 0, 0, re->tb->outbuf_w,
re->tb->outbuf_h);
- evas_common_draw_context_clip_clip(dc, x, y, w, h);
- /* our clip is 0 size.. abort */
- if ((dc->clip.w <= 0) || (dc->clip.h <= 0))
- {
- dc->clip.use = c;
- dc->clip.x = cx;
- dc->clip.y = cy;
- dc->clip.w = cw;
- dc->clip.h = ch;
- return;
- }
- rects = evas_common_draw_context_apply_cutouts(dc);
- for (i = 0; i < rects->active; ++i)
- {
- r = rects->rects + i;
- evas_common_draw_context_set_clip(dc, r->x, r->y, r->w, r->h);
- rectangle_draw_internal(data, dc, x, y, w, h);
- }
- evas_common_draw_context_clear_cutouts(rects);
- /* restore clip info */
- dc->clip.use = c;
- dc->clip.x = cx;
- dc->clip.y = cy;
- dc->clip.w = cw;
- dc->clip.h = ch;
-
-}
-
-void
-rectangle_draw_internal(void *data, void *context, int x, int y, int w, int h)
-{
- RGBA_Draw_Context *dc = (RGBA_Draw_Context *) context;
- Render_Engine *re = (Render_Engine *) data;
- int r, g, b, a;
-
- if ((w <= 0) || (h <= 0))
- return;
-
- if (!(RECTS_INTERSECT(x, y, w, h, 0, 0, re->tb->outbuf_w,
re->tb->outbuf_h)))
- return;
-
- if (x < 0)
- {
- w += x;
- x = 0;
- }
- if ((x + w) > re->tb->outbuf_w)
- w = re->tb->outbuf_w - x;
- if (y < 0)
- {
- h += y;
- y = 0;
- }
- if ((w <= 0) || (h <= 0))
- return;
-
- if (dc->clip.use)
- {
- if (dc->clip.x > x)
- {
- w += x - dc->clip.x;
- x = dc->clip.x;
- }
- if ((dc->clip.x + dc->clip.w) < (x + w))
- w = dc->clip.x + dc->clip.w - x;
- if (dc->clip.y > y)
- {
- h += y - dc->clip.y;
- y = dc->clip.y;
- }
- if ((dc->clip.y + dc->clip.h) < (y + h))
- h = dc->clip.y + dc->clip.h - y;
- }
- if ((w <= 0) || (h <= 0))
- return;
-
- evas_engine_directfb_context_color_get(data, context, &r, &g, &b, &a);
- re->backbuf->SetColor(re->backbuf, r, g, b, a);
- re->backbuf->FillRectangle(re->backbuf, x, y, w, h);
- evas_common_cpu_end_opt();
-}
-
-/*
- * Lines
- *
- *
- *
- * */
-
-void
-evas_engine_directfb_line_draw(void *data, void *context, void *surface, int
x1,
- int y1, int x2, int y2)
-{
- int r, g, b, a;
- Render_Engine *re = (Render_Engine *) data;
-
- evas_engine_directfb_context_color_get(data, context, &r, &g, &b, &a);
-
- re->backbuf->SetColor(re->backbuf, r, g, b, a);
- re->backbuf->DrawLine(re->backbuf, x1, y1, x2, y2);
-}
-
-/*
- * Polygons
- *
- *
- *
- * */
-
-void *
-evas_engine_directfb_polygon_point_add(void *data, void *context, void
*polygon, int x, int y)
+static void
+eng_output_flush(void *data)
{
Render_Engine *re;
- re = (Render_Engine *)data;
- context = NULL;
- return evas_common_polygon_point_add(polygon, x, y);
-}
-
-void *
-evas_engine_directfb_polygon_points_clear(void *data, void *context, void
*polygon)
-{
- Render_Engine *re;
-
- re = (Render_Engine *)data;
- context = NULL;
- return evas_common_polygon_points_clear(polygon);
-}
-
-void
-evas_engine_directfb_polygon_draw(void *data, void *context, void *surface,
void *polygon)
-{
-
- Render_Engine *re;
- IDirectFBSurface *surf;
- RGBA_Image *im;
- void *p;
- int pitch;
-
- re = (Render_Engine *)data;
- im = surface;
- surf = (IDirectFBSurface *)im->image->data;
- surf->Lock(surf, DSLF_WRITE, &p, & pitch);
- im->image->data = p;
- evas_common_polygon_draw(im, context, polygon);
- surf->Unlock(surf);
- im->image->data = (void *)surf;
- evas_common_cpu_end_opt();
-}
-
-
-/*
- * Gradients
- *
- *
- *
- * */
-void *
-evas_engine_directfb_gradient_new(void *data)
-{
- return evas_common_gradient_new();
-}
-
-void
-evas_engine_directfb_gradient_free(void *data, void *gradient)
-{
- Render_Engine *re;
-
- re = (Render_Engine *)data;
- evas_common_gradient_free(gradient);
-}
-
-void
-evas_engine_directfb_gradient_color_stop_add(void *data, void *gradient, int
r, int g, int b, int a, int delta)
-{
- Render_Engine *re;
-
- re = (Render_Engine *)data;
- evas_common_gradient_color_stop_add(gradient, r, g, b, a, delta);
-}
-
-void
-evas_engine_directfb_gradient_alpha_stop_add(void *data, void *gradient, int
a, int delta)
-{
- Render_Engine *re;
-
- re = (Render_Engine *)data;
- evas_common_gradient_alpha_stop_add(gradient, a, delta);
-}
-
-void
-evas_engine_directfb_gradient_color_data_set(void *data, void *gradient, void
*map, int len, int has_alpha)
-{
- Render_Engine *re;
-
- re = (Render_Engine *)data;
- evas_common_gradient_color_data_set(gradient, map, len, has_alpha);
-}
-
-void
-evas_engine_directfb_gradient_alpha_data_set(void *data, void *gradient, void
*alpha_map, int len)
-{
- Render_Engine *re;
-
- re = (Render_Engine *)data;
- evas_common_gradient_alpha_data_set(gradient, alpha_map, len);
-}
-
-void
-evas_engine_directfb_gradient_clear(void *data, void *gradient)
-{
- Render_Engine *re;
-
- re = (Render_Engine *)data;
- evas_common_gradient_clear(gradient);
-}
-
-void
-evas_engine_directfb_gradient_fill_set(void *data, void *gradient, int x, int
y, int w, int h)
-{
- Render_Engine *re;
-
- re = (Render_Engine *)data;
- evas_common_gradient_fill_set(gradient, x, y, w, h);
-}
-
-void
-evas_engine_directfb_gradient_fill_angle_set(void *data, void *gradient,
double angle)
-{
- Render_Engine *re;
-
- re = (Render_Engine *)data;
- evas_common_gradient_fill_angle_set(gradient, angle);
-}
-
-void
-evas_engine_directfb_gradient_fill_spread_set(void *data, void *gradient, int
spread)
-{
- Render_Engine *re;
-
- re = (Render_Engine *)data;
- evas_common_gradient_fill_spread_set(gradient, spread);
-}
-
-void
-evas_engine_directfb_gradient_angle_set(void *data, void *gradient, double
angle)
-{
- Render_Engine *re;
-
- re = (Render_Engine *)data;
- evas_common_gradient_map_angle_set(gradient, angle);
-}
-
-void
-evas_engine_directfb_gradient_offset_set(void *data, void *gradient, float
offset)
-{
- Render_Engine *re;
-
- re = (Render_Engine *)data;
- evas_common_gradient_offset_set(gradient, offset);
-}
-
-void
-evas_engine_directfb_gradient_direction_set(void *data, void *gradient, int
direction)
-{
- Render_Engine *re;
-
- re = (Render_Engine *)data;
- evas_common_gradient_map_direction_set(gradient, direction);
-}
-
-void
-evas_engine_directfb_gradient_type_set(void *data, void *gradient, char *name,
char *params)
-{
- Render_Engine *re;
-
- re = (Render_Engine *)data;
- evas_common_gradient_type_set(gradient, name, params);
-}
-
-int
-evas_engine_directfb_gradient_is_opaque(void *data, void *context, void
*gradient, int x, int y, int w, int h)
-{
- RGBA_Draw_Context *dc = (RGBA_Draw_Context *)context;
- Render_Engine *re;
- RGBA_Gradient *gr=(RGBA_Gradient *)gradient;
-
- re = (Render_Engine *)data;
- if (!dc || !gr || !gr->type.geometer) return 0;
- return !(gr->type.geometer->has_alpha(gradient, dc->render_op) |
- gr->type.geometer->has_mask(gradient, dc->render_op));
-}
-
-int
-evas_engine_directfb_gradient_is_visible(void *data, void *context, void
*gradient, int x, int y, int w, int h)
-{
- Render_Engine *re;
-
- re = (Render_Engine *)data;
- if (!context || !gradient) return 0;
- return 1;
-}
-
-void
-evas_engine_directfb_gradient_render_pre(void *data, void *context, void
*gradient)
-{
- int len;
- Render_Engine *re;
- RGBA_Gradient *gr=(RGBA_Gradient *)gradient;
-
- re = (Render_Engine *)data;
- if (!context || !gr || !gr->type.geometer) return;
- gr->type.geometer->geom_set(gradient);
- len = gr->type.geometer->get_map_len(gradient);
- evas_common_gradient_map(context, gradient, len);
-}
-
-void
-evas_engine_directfb_gradient_render_post(void *data, void *gradient)
-{
-}
-
-void
-evas_engine_directfb_gradient_draw(void *data, void *context, void *surface,
void *gradient, int x, int y, int w, int h)
-{
- Render_Engine *re;
- IDirectFBSurface *surf;
- RGBA_Image *im;
- void *p;
- int pitch;
-
- re = (Render_Engine *)data;
- im = surface;
- surf = (IDirectFBSurface *)im->image->data;
- surf->Lock(surf, DSLF_WRITE, &p, & pitch);
- im->image->data = p;
- evas_common_gradient_draw(im, context, x, y, w, h, gradient);
- surf->Unlock(surf);
- im->image->data = (void *)surf;
- evas_common_cpu_end_opt();
-}
-
-
-
-/*
- * Font objects
- *
- *
- *
- * */
-
-void *
-evas_engine_directfb_font_load(void *data, const char *name, int size)
-{
- Render_Engine *re;
-
- re = (Render_Engine *) data;
- return evas_common_font_load(name, size);
-}
-
-void *
-evas_engine_directfb_font_memory_load(void *data, char *name, int size, const
void *fdata, int fdata_size)
-{
- Render_Engine *re;
-
- re = (Render_Engine *) data;
- return evas_common_font_memory_load(name, size, fdata, fdata_size);
-}
-
-void *
-evas_engine_directfb_font_add(void *data, void *font, const char *name, int
size)
-{
- Render_Engine *re;
-
- re = (Render_Engine *)data;
- return evas_common_font_add(font, name, size);
-}
-
-void *
-evas_engine_directfb_font_memory_add(void *data, void *font, char *name, int
size, const void *fdata, int fdata_size)
-{
- Render_Engine *re;
-
- re = (Render_Engine *)data;
- return evas_common_font_memory_add(font, name, size, fdata, fdata_size);
-}
-
-
-void
-evas_engine_directfb_font_free(void *data, void *font)
-{
- Render_Engine *re;
-
- re = (Render_Engine *) data;
- evas_common_font_free(font);
-}
-
-int
-evas_engine_directfb_font_ascent_get(void *data, void *font)
-{
- Render_Engine *re;
-
- re = (Render_Engine *) data;
- return evas_common_font_ascent_get(font);
-}
-
-int
-evas_engine_directfb_font_descent_get(void *data, void *font)
-{
- Render_Engine *re;
-
- re = (Render_Engine *) data;
- return evas_common_font_descent_get(font);
-}
-
-int
-evas_engine_directfb_font_max_ascent_get(void *data, void *font)
-{
- Render_Engine *re;
-
- re = (Render_Engine *) data;
- return evas_common_font_max_ascent_get(font);
-}
-
-int
-evas_engine_directfb_font_max_descent_get(void *data, void *font)
-{
- Render_Engine *re;
-
- re = (Render_Engine *) data;
- return evas_common_font_max_descent_get(font);
-}
-
-void
-evas_engine_directfb_font_string_size_get(void *data, void *font, const char
*text,
- int *w, int *h)
-{
- Render_Engine *re;
-
- re = (Render_Engine *) data;
- evas_common_font_query_size(font, text, w, h);
-}
-
-int
-evas_engine_directfb_font_inset_get(void *data, void *font, const char *text)
-{
- Render_Engine *re;
-
- re = (Render_Engine *) data;
- return evas_common_font_query_inset(font, text);
-}
-
-int
-evas_engine_directfb_font_h_advance_get(void *data, void *font, const char
*text)
-{
- Render_Engine *re;
- int h, v;
-
- re = (Render_Engine *) data;
- evas_common_font_query_advance(font, text, &h, &v);
- return h;
-}
-
-int
-evas_engine_directfb_font_v_advance_get(void *data, void *font, const char
*text)
-{
- Render_Engine *re;
- int h, v;
-
re = (Render_Engine *) data;
- evas_common_font_query_advance(font, text, &h, &v);
- return v;
}
-int
-evas_engine_directfb_font_char_coords_get(void *data, void *font, const char
*text,
- int pos, int *cx, int *cy, int *cw,
- int *ch)
-{
- Render_Engine *re;
-
- re = (Render_Engine *) data;
- return evas_common_font_query_char_coords(font, text, pos, cx, cy, cw, ch);
-}
-
-int
-evas_engine_directfb_font_char_at_coords_get(void *data, void *font, const
char *text,
- int x, int y, int *cx, int *cy,
- int *cw, int *ch)
-{
- Render_Engine *re;
-
- re = (Render_Engine *) data;
- return evas_common_font_query_text_at_pos(font, text, x, y, cx, cy, cw, ch);
-}
-
-void
-evas_engine_directfb_font_draw(void *data, void *context, void *surface,
- void *font, int x, int y, int w, int h, int ow,
- int oh, const char *text)
+static void
+eng_output_idle_flush(void *data)
{
Render_Engine *re;
- void *p;
- RGBA_Image *im;
- IDirectFBSurface * surf;
- int pitch;
-
- im = surface;
- re = (Render_Engine *)data;
- surf = (IDirectFBSurface *)im->image->data;
- surf->Lock(surf, DSLF_WRITE, &p, &pitch);
- im->image->data = p;
- im->flags |= RGBA_IMAGE_HAS_ALPHA;
- if ((w == ow) && (h == oh))
- evas_common_font_draw(im, context, font, x, y, text);
- else
- {
- /* create output surface size ow x oh and scale to w x h */
- RGBA_Draw_Context *dc, *dc_in;
-
- dc_in = context;
- dc = evas_common_draw_context_new();
- if (dc)
- {
- RGBA_Image *im;
-
- dc->col.col = dc_in->col.col;
- im = evas_common_image_create(ow, oh);
- if (im)
- {
- int max_ascent;
- int j;
-
- im->flags |= RGBA_IMAGE_HAS_ALPHA;
- j = ow * oh;
- memset(im->image->data, 0, j * sizeof(DATA32));
-
- max_ascent = evas_common_font_max_ascent_get(font);
-
- evas_common_font_draw(im, dc, font, 0, max_ascent, text);
- evas_common_cpu_end_opt();
- evas_common_scale_rgba_in_to_out_clip_smooth(im, surface,
context,
- 0, 0, ow, oh,
- x, y - ((max_ascent * h) /
oh),
- w, h);
- evas_common_image_free(im);
- }
- evas_common_draw_context_free(dc);
- }
- }
-
- surf->Unlock(surf);
- im->image->data = (void *)surf;
- evas_common_cpu_end_opt();
-}
-
-void
-evas_engine_directfb_font_cache_flush(void *data)
-{
- Render_Engine *re;
-
- re = (Render_Engine *) data;
- evas_common_font_flush();
-}
-
-void
-evas_engine_directfb_font_cache_set(void *data, int bytes)
-{
- Render_Engine *re;
re = (Render_Engine *) data;
- evas_common_font_cache_set(bytes);
-}
-
-int
-evas_engine_directfb_font_cache_get(void *data)
-{
- Render_Engine *re;
-
- re = (Render_Engine *) data;
- return evas_common_font_cache_get();
-}
-
-void
-evas_engine_directfb_font_hinting_set(void *data, void *font, int hinting)
-{
- Render_Engine *re;
-
- re = (Render_Engine *)data;
- evas_common_font_hinting_set(font, hinting);
-}
-
-int
-evas_engine_directfb_font_hinting_can_hint(void *data, int hinting)
-{
- Render_Engine *re;
-
- re = (Render_Engine *)data;
- return evas_common_hinting_available(hinting);
}
-EAPI int module_open(Evas_Module *em)
+EAPI int
+module_open(Evas_Module *em)
{
if (!em) return 0;
- em->functions = (void *)(&evas_engine_directfb_func);
+ /* get whatever engine module we inherit from */
+ if (!_evas_module_engine_inherit(&pfunc, "software_generic")) return 0;
+ /* store it for later use */
+ func = pfunc;
+ /* now to override methods */
+#define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_)
+ ORD(info);
+ ORD(info_free);
+ ORD(setup);
+ ORD(output_free);
+ ORD(output_resize);
+ ORD(output_tile_size_set);
+ ORD(output_redraws_rect_add);
+ ORD(output_redraws_rect_del);
+ ORD(output_redraws_clear);
+ ORD(output_redraws_next_update_get);
+ ORD(output_redraws_next_update_push);
+ ORD(output_flush);
+ ORD(output_idle_flush);
+ /* now advertise out own api */
+ em->functions = (void *)(&func);
return 1;
}
-EAPI void module_close(void)
+EAPI void
+module_close(void)
{
}
===================================================================
RCS file: /cvs/e/e17/libs/evas/src/modules/engines/directfb/evas_engine_dfb.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- evas_engine_dfb.h 17 Jun 2007 02:56:57 -0000 1.6
+++ evas_engine_dfb.h 25 Feb 2008 06:13:53 -0000 1.7
@@ -19,199 +19,4 @@
int end:1;
};
-void *evas_engine_directfb_info(Evas * evas);
-void evas_engine_directfb_info_free(Evas *e, void *info);
-void evas_engine_directfb_setup(Evas * evas, void *in);
-void *evas_engine_directfb_output_setup(int w, int h,
- IDirectFB * dfb,
- IDirectFBSurface * surf,
- DFBSurfaceDrawingFlags
- flags);
-void evas_engine_directfb_output_free(void *data);
-void evas_engine_directfb_output_resize(void *data, int w,
- int h);
-void evas_engine_directfb_output_tile_size_set(void *data, int
w,
- int h);
-void evas_engine_directfb_output_redraws_rect_add(void *data,
- int x, int y,
- int w, int h);
-void evas_engine_directfb_output_redraws_rect_del(void *data,
- int x, int y,
- int w, int h);
-void evas_engine_directfb_output_redraws_clear(void *data);
-void *evas_engine_directfb_output_redraws_next_update_get(void
- *data,
- int *x,
- int *y,
- int *w,
- int *h,
- int *cx,
- int *cy,
- int *cw,
- int
- *ch);
-void evas_engine_directfb_output_redraws_next_update_push(void
- *data,
- void
-
*surface,
- int x,
- int y,
- int w,
- int h);
-void evas_engine_directfb_output_flush(void *data);
-void evas_engine_directfb_output_idle_flush(void *data);
-void *evas_engine_directfb_context_new(void *data);
-void evas_engine_directfb_context_free(void *data,
- void *context);
-void evas_engine_directfb_context_clip_set(void *data,
- void *context, int x,
- int y, int w, int h);
-void evas_engine_directfb_context_clip_clip(void *data,
- void *context, int x,
- int y, int w, int h);
-void evas_engine_directfb_context_clip_unset(void *data,
- void *context);
-int evas_engine_directfb_context_clip_get(void *data,
- void *context, int *x,
- int *y, int *w,
- int *h);
-void evas_engine_directfb_context_color_set(void *data,
- void *context, int r,
- int g, int b, int a);
-int evas_engine_directfb_context_color_get(void *data,
- void *context,
- int *r, int *g,
- int *b, int *a);
-void evas_engine_directfb_context_multiplier_set(void *data,
- void *context,
- int r, int g,
- int b, int a);
-void evas_engine_directfb_context_multiplier_unset(void *data,
- void
- *context);
-int evas_engine_directfb_context_multiplier_get(void *data,
- void *context,
- int *r, int *g,
- int *b, int *a);
-void evas_engine_directfb_context_cutout_add(void *data,
- void *context,
- int x, int y, int w,
- int h);
-void evas_engine_directfb_context_cutout_clear(void *data,
- void *context);
-void evas_engine_directfb_context_anti_alias_set(void *data,
void *context,
- unsigned char
aa);
-unsigned char evas_engine_directfb_context_anti_alias_get(void *data,
void *context);
-void evas_engine_directfb_context_color_interpolation_set(void
*data,
- void *context,
int color_space);
-int evas_engine_directfb_context_color_interpolation_get(void
*data, void *context);
-void evas_engine_directfb_context_render_op_set(void *data,
- void *context,
int op);
-int evas_engine_directfb_context_render_op_get(void *data,
void *context);
-
-void evas_engine_directfb_draw_rectangle(void *data,
- void *context,
- void *surface, int x,
- int y, int w, int h);
-void evas_engine_directfb_line_draw(void *data, void *context,
- void *surface, int x1,
- int y1, int x2, int y2);
-void *evas_engine_directfb_polygon_point_add(void *data,
- void *context,
- void *polygon, int x,
- int y);
-void *evas_engine_directfb_polygon_points_clear(void *data,
- void *context,
- void *polygon);
-void evas_engine_directfb_polygon_draw(void *data, void
*context,
- void *surface,
- void *polygon);
-
-void *evas_engine_directfb_gradient_new(void *data);
-void evas_engine_directfb_gradient_free(void *data, void
*gradient);
-void evas_engine_directfb_gradient_color_stop_add(void *data,
- void *gradient,
- int r, int g,
int b, int a, int delta);
-void evas_engine_directfb_gradient_alpha_stop_add(void *data,
- void *gradient,
int a, int delta);
-void evas_engine_directfb_gradient_color_data_set(void *data,
void *gradient,
- void *map, int
len, int has_alpha);
-void evas_engine_directfb_gradient_alpha_data_set(void *data,
void *gradient,
- void
*alpha_map, int len);
-void evas_engine_directfb_gradient_clear(void *data, void
*gradient);
-void evas_engine_directfb_gradient_fill_set(void *data, void
*gradient, int x, int y, int w, int h);
-void evas_engine_directfb_gradient_fill_angle_set(void *data,
void *gradient, double angle);
-void evas_engine_directfb_gradient_fill_spread_set(void *data,
void *gradient, int spread);
-void evas_engine_directfb_gradient_angle_set(void *data, void
*gradient, double angle);
-void evas_engine_directfb_gradient_offset_set(void *data, void
*gradient, float offset);
-void evas_engine_directfb_gradient_direction_set(void *data,
void *gradient, int direction);
-void evas_engine_directfb_gradient_type_set(void *data, void
*gradient, char *name, char *params);
-int evas_engine_directfb_gradient_is_opaque(void *data, void
*context, void *gradient, int x, int y, int w, int h);
-int evas_engine_directfb_gradient_is_visible(void *data, void
*context, void *gradient, int x, int y, int w, int h);
-void evas_engine_directfb_gradient_render_pre(void *data, void
*context, void *gradient);
-void evas_engine_directfb_gradient_render_post(void *data, void
*gradient);
-void evas_engine_directfb_gradient_draw(void *data, void
*context, void *surface,
- void *gradient, int x,
int y, int w, int h);
-
-void *evas_engine_directfb_font_load(void *data, const char
*name,
- int size);
-void *evas_engine_directfb_font_memory_load(void *data,
- char *name,
- int size,
- const void *fdata,
- int fdata_size);
-void *evas_engine_directfb_font_add(void *data, void *font,
const char *name, int size);
-void *evas_engine_directfb_font_memory_add(void *data, void
*font,
- char *name, int size,
- const void *fdata,
- int fdata_size);
-void evas_engine_directfb_font_free(void *data, void *font);
-int evas_engine_directfb_font_ascent_get(void *data,
- void *font);
-int evas_engine_directfb_font_descent_get(void *data,
- void *font);
-int evas_engine_directfb_font_max_ascent_get(void *data,
- void *font);
-int evas_engine_directfb_font_max_descent_get(void *data,
- void *font);
-void evas_engine_directfb_font_string_size_get(void *data,
- void *font,
- const char *text,
- int *w, int *h);
-int evas_engine_directfb_font_inset_get(void *data, void *font,
- const char *text);
-int evas_engine_directfb_font_h_advance_get(void *data,
- void *font,
- const char *text);
-int evas_engine_directfb_font_v_advance_get(void *data,
- void *font,
- const char *text);
-int evas_engine_directfb_font_char_coords_get(void *data,
- void *font,
- const char *text,
- int pos, int *cx,
- int *cy, int *cw,
- int *ch);
-int evas_engine_directfb_font_char_at_coords_get(void *data,
- void *font,
- const char
*text,
- int x, int y,
- int *cx,
- int *cy,
- int *cw,
- int *ch);
-void evas_engine_directfb_font_draw(void *data, void *context,
- void *surface, void *font,
- int x, int y, int w, int h,
- int ow, int oh, const char
*text);
-void evas_engine_directfb_font_cache_flush(void *data);
-void evas_engine_directfb_font_cache_set(void *data, int bytes);
-int evas_engine_directfb_font_cache_get(void *data);
-
-void evas_engine_directfb_font_hinting_set(void *data, void *font, int
hinting);
-int evas_engine_directfb_font_hinting_can_hint(void *data, int hinting);
-
-void rectangle_draw_internal(void *dst, void *dc, int x, int y,
- int w, int h);
-
#endif
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
enlightenment-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs