more glue/infra. glue evas api to engine together. gl engine gets stubs.

SVN revision: 51028
This commit is contained in:
Carsten Haitzler 2010-08-12 06:11:13 +00:00
parent 83f2ef6142
commit 01b7216880
6 changed files with 60 additions and 5 deletions

View File

@ -1884,6 +1884,7 @@ evas_object_image_native_surface_set(Evas_Object *obj, Evas_Native_Surface *surf
MAGIC_CHECK(o, Evas_Object_Image, MAGIC_OBJ_IMAGE); MAGIC_CHECK(o, Evas_Object_Image, MAGIC_OBJ_IMAGE);
return; return;
MAGIC_CHECK_END(); MAGIC_CHECK_END();
if (!obj->layer->evas->engine.func->image_native_set) return;
o->engine_data = o->engine_data =
obj->layer->evas->engine.func->image_native_set(obj->layer->evas->engine.data.output, obj->layer->evas->engine.func->image_native_set(obj->layer->evas->engine.data.output,
o->engine_data, o->engine_data,
@ -1911,6 +1912,7 @@ evas_object_image_native_surface_get(const Evas_Object *obj)
MAGIC_CHECK(o, Evas_Object_Image, MAGIC_OBJ_IMAGE); MAGIC_CHECK(o, Evas_Object_Image, MAGIC_OBJ_IMAGE);
return NULL; return NULL;
MAGIC_CHECK_END(); MAGIC_CHECK_END();
if (!obj->layer->evas->engine.func->image_native_get) return NULL;
return obj->layer->evas->engine.func->image_native_get(obj->layer->evas->engine.data.output, return obj->layer->evas->engine.func->image_native_get(obj->layer->evas->engine.data.output,
o->engine_data); o->engine_data);
} }
@ -1945,6 +1947,10 @@ evas_object_image_scale_hint_set(Evas_Object *obj, Evas_Image_Scale_Hint hint)
} }
#endif #endif
o->scale_hint = hint; o->scale_hint = hint;
if (obj->layer->evas->engine.func->image_content_hint_set)
obj->layer->evas->engine.func->image_scale_hint_set
(obj->layer->evas->engine.data.output,
o->engine_data, o->content_hint);
} }
/** /**
@ -1998,8 +2004,12 @@ evas_object_image_content_hint_set(Evas_Object *obj, Evas_Image_Content_Hint hin
if (o->engine_data) if (o->engine_data)
evas_common_pipe_op_image_flush(o->engine_data); evas_common_pipe_op_image_flush(o->engine_data);
} }
#endif #endif
o->content_hint = hint; o->content_hint = hint;
if (obj->layer->evas->engine.func->image_content_hint_set)
obj->layer->evas->engine.func->image_content_hint_set
(obj->layer->evas->engine.data.output,
o->engine_data, o->content_hint);
} }
/** /**

View File

@ -730,6 +730,9 @@ struct _Evas_Func
void (*image_map4_draw) (void *data, void *context, void *surface, void *image, RGBA_Map_Point *p, int smooth, int level); void (*image_map4_draw) (void *data, void *context, void *surface, void *image, RGBA_Map_Point *p, int smooth, int level);
void *(*image_map_surface_new) (void *data, int w, int h, int alpha); void *(*image_map_surface_new) (void *data, int w, int h, int alpha);
void (*image_map_surface_free) (void *data, void *surface); void (*image_map_surface_free) (void *data, void *surface);
void (*image_content_hint_set) (void *data, void *surface, int hint);
int (*image_content_hint_get) (void *data, void *surface);
}; };
struct _Evas_Image_Load_Func struct _Evas_Image_Load_Func

View File

@ -281,6 +281,8 @@ struct _Evas_GL_Image
int mipmap; int mipmap;
unsigned char loose : 1; unsigned char loose : 1;
} native; } native;
int scale_hint, content_hint;
unsigned char dirty : 1; unsigned char dirty : 1;
unsigned char cached : 1; unsigned char cached : 1;
@ -407,6 +409,8 @@ Evas_GL_Image *evas_gl_common_image_new(Evas_GL_Context *gc, int w, int h, in
Evas_GL_Image *evas_gl_common_image_alpha_set(Evas_GL_Image *im, int alpha); Evas_GL_Image *evas_gl_common_image_alpha_set(Evas_GL_Image *im, int alpha);
void evas_gl_common_image_native_enable(Evas_GL_Image *im); void evas_gl_common_image_native_enable(Evas_GL_Image *im);
void evas_gl_common_image_native_disable(Evas_GL_Image *im); void evas_gl_common_image_native_disable(Evas_GL_Image *im);
void evas_gl_common_image_scale_hint_set(Evas_GL_Image *im, int hint);
void evas_gl_common_image_content_hint_set(Evas_GL_Image *im, int hint);
void evas_gl_common_image_free(Evas_GL_Image *im); void evas_gl_common_image_free(Evas_GL_Image *im);
Evas_GL_Image *evas_gl_common_image_surface_new(Evas_GL_Context *gc, int w, int h, int alpha); Evas_GL_Image *evas_gl_common_image_surface_new(Evas_GL_Context *gc, int w, int h, int alpha);
void evas_gl_common_image_dirty(Evas_GL_Image *im, int x, int y, int w, int h); void evas_gl_common_image_dirty(Evas_GL_Image *im, int x, int y, int w, int h);

View File

@ -264,6 +264,22 @@ evas_gl_common_image_native_disable(Evas_GL_Image *im)
im->tex = evas_gl_common_texture_new(im->gc, im->im); im->tex = evas_gl_common_texture_new(im->gc, im->im);
} }
void
evas_gl_common_image_scale_hint_set(Evas_GL_Image *im, int hint)
{
im->scale_hint = hint;
// FIXME: take advantage of this even in gl (eg if image is
// 1600x1200 but we always use it at 800x600 or even less - drop
// the texture res down for "non dynamic" stuff to save memory)
}
void
evas_gl_common_image_content_hint_set(Evas_GL_Image *im, int hint)
{
im->content_hint = hint;
// FIXME: make use of content hint
}
void void
evas_gl_common_image_free(Evas_GL_Image *im) evas_gl_common_image_free(Evas_GL_Image *im)
{ {

View File

@ -1907,6 +1907,15 @@ eng_image_draw(void *data, void *context, void *surface, void *image, int src_x,
static void static void
eng_image_scale_hint_set(void *data __UNUSED__, void *image, int hint) eng_image_scale_hint_set(void *data __UNUSED__, void *image, int hint)
{ {
if (image) evas_gl_common_image_scale_hint_set(image, hint);
}
static int
eng_image_scale_hint_get(void *data __UNUSED__, void *image)
{
Evas_GL_Image *gim = image;
if (!gim) return EVAS_IMAGE_SCALE_HINT_NONE;
return gim->scale_hint;
} }
static void static void
@ -1936,10 +1945,18 @@ eng_image_map_surface_free(void *data __UNUSED__, void *surface)
evas_gl_common_image_free(surface); evas_gl_common_image_free(surface);
} }
static int static void
eng_image_scale_hint_get(void *data __UNUSED__, void *image) eng_image_content_hint_set(void *data __UNUSED__, void *image, int hint)
{ {
return EVAS_IMAGE_SCALE_HINT_NONE; if (image) evas_gl_common_image_content_hint_set(image, hint);
}
static int
eng_image_content_hint_get(void *data __UNUSED__, void *image)
{
Evas_GL_Image *gim = image;
if (!gim) return EVAS_IMAGE_CONTENT_HINT_NONE;
return gim->content_hint;
} }
static void static void
@ -2098,6 +2115,9 @@ module_open(Evas_Module *em)
ORD(image_map_surface_new); ORD(image_map_surface_new);
ORD(image_map_surface_free); ORD(image_map_surface_free);
ORD(image_content_hint_set);
ORD(image_content_hint_get);
/* now advertise out own api */ /* now advertise out own api */
em->functions = (void *)(&func); em->functions = (void *)(&func);
return 1; return 1;

View File

@ -1240,7 +1240,9 @@ static Evas_Func func =
/* FUTURE software generic calls go here (done) */ /* FUTURE software generic calls go here (done) */
eng_image_map4_draw, eng_image_map4_draw,
eng_image_map_surface_new, eng_image_map_surface_new,
eng_image_map_surface_free eng_image_map_surface_free,
NULL, // eng_image_content_hint_set - software doesnt use it
NULL // eng_image_content_hint_get - software doesnt use it
/* FUTURE software generic calls go here */ /* FUTURE software generic calls go here */
}; };