From f1f22b4d1515ed7ddb4d6501b36b76aae27088b0 Mon Sep 17 00:00:00 2001 From: raster Date: Sun, 31 Aug 2008 02:04:31 +0000 Subject: [PATCH] updated patches from jose! git-svn-id: http://svn.enlightenment.org/svn/e/trunk/evas@35756 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- src/lib/Evas.h | 18 +++ src/lib/canvas/Makefile.am | 3 +- src/lib/canvas/evas_object_gradient.c | 34 ++++++ src/lib/canvas/evas_object_gradient2_linear.c | 17 ++- src/lib/canvas/evas_object_gradient2_radial.c | 17 ++- src/lib/canvas/evas_object_image.c | 149 ++++++++++++++++++++++++- src/lib/canvas/evas_object_line.c | 17 ++- src/lib/canvas/evas_object_polygon.c | 17 ++- src/lib/canvas/evas_object_rectangle.c | 17 ++- src/lib/canvas/evas_object_smart.c | 17 ++- src/lib/canvas/evas_object_text.c | 17 ++- src/lib/canvas/evas_object_textblock.c | 17 ++- src/lib/canvas/evas_transform.c | 117 +++++++++++++++++++ src/lib/engines/common/evas_gradient2_linear.c | 55 ++++----- src/lib/engines/common/evas_gradient2_radial.c | 74 ++++++------ src/lib/include/evas_private.h | 3 +- 16 files changed, 499 insertions(+), 90 deletions(-) create mode 100644 src/lib/canvas/evas_transform.c diff --git a/src/lib/Evas.h b/src/lib/Evas.h index 9ce19df..73156d6 100644 --- a/src/lib/Evas.h +++ b/src/lib/Evas.h @@ -500,6 +500,10 @@ extern "C" { EAPI Evas_Bool evas_object_image_border_center_fill_get(const Evas_Object *obj); EAPI void evas_object_image_fill_set (Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h); EAPI void evas_object_image_fill_get (const Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h); + EAPI void evas_object_image_fill_spread_set (Evas_Object *obj, int tile_mode); + EAPI int evas_object_image_fill_spread_get (const Evas_Object *obj); + EAPI void evas_object_image_fill_transform_set (Evas_Object *obj, Evas_Transform *t); + EAPI void evas_object_image_fill_transform_get (const Evas_Object *obj, Evas_Transform *t); EAPI void evas_object_image_size_set (Evas_Object *obj, int w, int h); EAPI void evas_object_image_size_get (const Evas_Object *obj, int *w, int *h); EAPI int evas_object_image_stride_get (const Evas_Object *obj); @@ -865,6 +869,20 @@ extern "C" { EAPI void evas_data_argb_premul (unsigned int *data, unsigned int len); EAPI void evas_data_argb_unpremul (unsigned int *data, unsigned int len); +/* Evas utility routines for working with transforms */ + /* Set t to the identity */ + EAPI void evas_transform_identity_set (Evas_Transform *t); + /* Left-multiply t by an xy rotation defined by the given angle (in degrees) */ + EAPI void evas_transform_rotate (double angle, Evas_Transform *t); + /* Left-multiply t by an xy translation defined by the given dx, dy values */ + EAPI void evas_transform_translate (float dx, float dy, Evas_Transform *t); + /* Left-multiply t by an xy scaling defined by the given sx, sy factors */ + EAPI void evas_transform_scale (float sx, float sy, Evas_Transform *t); + /* Left-multiply t by an xy shearing defined by the given sh, sv values */ + EAPI void evas_transform_shear (float sh, float sv, Evas_Transform *t); + /* Left-multiply t by the given transform l */ + EAPI void evas_transform_compose (Evas_Transform *l, Evas_Transform *t); + /* Evas imaging api - exports some of the comon gfx engine routines */ /* this is not complete and should be considered experimental. use at your */ /* own risk */ diff --git a/src/lib/canvas/Makefile.am b/src/lib/canvas/Makefile.am index c11f1fc..f3a06ef 100644 --- a/src/lib/canvas/Makefile.am +++ b/src/lib/canvas/Makefile.am @@ -39,7 +39,8 @@ evas_rectangle.c \ evas_render.c \ evas_smart.c \ evas_stack.c \ -evas_async_events.c +evas_async_events.c \ +evas_transform.c EXTRA_DIST = \ evas_object_gradient2_linear.c \ diff --git a/src/lib/canvas/evas_object_gradient.c b/src/lib/canvas/evas_object_gradient.c index aef1059..ab41cdb 100644 --- a/src/lib/canvas/evas_object_gradient.c +++ b/src/lib/canvas/evas_object_gradient.c @@ -49,6 +49,10 @@ static void evas_object_gradient_free(Evas_Object *obj); static void evas_object_gradient_render_pre(Evas_Object *obj); static void evas_object_gradient_render_post(Evas_Object *obj); +static unsigned int evas_object_gradient_id_get(Evas_Object *obj); +static unsigned int evas_object_gradient_visual_id_get(Evas_Object *obj); +static void *evas_object_gradient_engine_data_get(Evas_Object *obj); + static int evas_object_gradient_is_opaque(Evas_Object *obj); static int evas_object_gradient_was_opaque(Evas_Object *obj); @@ -59,6 +63,9 @@ static const Evas_Object_Func object_func = evas_object_gradient_render, evas_object_gradient_render_pre, evas_object_gradient_render_post, + evas_object_gradient_id_get, + evas_object_gradient_visual_id_get, + evas_object_gradient_engine_data_get, /* these are optional. NULL = nothing */ NULL, NULL, @@ -1066,6 +1073,33 @@ evas_object_gradient_render_post(Evas_Object *obj) o->type_changed = 0; } +static unsigned int evas_object_gradient_id_get(Evas_Object *obj) +{ + Evas_Object_Gradient *o; + + o = (Evas_Object_Gradient *)(obj->object_data); + if (!o) return 0; + return MAGIC_OBJ_GRADIENT; +} + +static unsigned int evas_object_gradient_visual_id_get(Evas_Object *obj) +{ + Evas_Object_Gradient *o; + + o = (Evas_Object_Gradient *)(obj->object_data); + if (!o) return 0; + return MAGIC_OBJ_GRADIENT; +} + +static void *evas_object_gradient_engine_data_get(Evas_Object *obj) +{ + Evas_Object_Gradient *o; + + o = (Evas_Object_Gradient *)(obj->object_data); + if (!o) return NULL; + return o->engine_data; +} + static int evas_object_gradient_is_opaque(Evas_Object *obj) { diff --git a/src/lib/canvas/evas_object_gradient2_linear.c b/src/lib/canvas/evas_object_gradient2_linear.c index fd7ffff..ccf7660 100644 --- a/src/lib/canvas/evas_object_gradient2_linear.c +++ b/src/lib/canvas/evas_object_gradient2_linear.c @@ -34,7 +34,8 @@ static void evas_object_gradient2_linear_render(Evas_Object *obj, void *output, static void evas_object_gradient2_linear_render_pre(Evas_Object *obj); static void evas_object_gradient2_linear_render_post(Evas_Object *obj); -static int evas_object_gradient2_linear_visual_type_get(Evas_Object *obj); +static unsigned int evas_object_gradient2_linear_id_get(Evas_Object *obj); +static unsigned int evas_object_gradient2_linear_visual_id_get(Evas_Object *obj); static void *evas_object_gradient2_linear_engine_data_get(Evas_Object *obj); static int evas_object_gradient2_linear_is_opaque(Evas_Object *obj); @@ -47,7 +48,8 @@ static const Evas_Object_Func object_func = evas_object_gradient2_linear_render, evas_object_gradient2_linear_render_pre, evas_object_gradient2_linear_render_post, - evas_object_gradient2_linear_visual_type_get, + evas_object_gradient2_linear_id_get, + evas_object_gradient2_linear_visual_id_get, evas_object_gradient2_linear_engine_data_get, /* these are optional. NULL = nothing */ NULL, @@ -418,7 +420,16 @@ evas_object_gradient2_linear_render_post(Evas_Object *obj) og->gradient_changed = 0; } -static int evas_object_gradient2_linear_visual_type_get(Evas_Object *obj) +static unsigned int evas_object_gradient2_linear_id_get(Evas_Object *obj) +{ + Evas_Object_Gradient2_Linear *o; + + o = (Evas_Object_Gradient2_Linear *)(obj->object_data); + if (!o) return 0; + return MAGIC_OBJ_GRADIENT_LINEAR; +} + +static unsigned int evas_object_gradient2_linear_visual_id_get(Evas_Object *obj) { Evas_Object_Gradient2_Linear *o; diff --git a/src/lib/canvas/evas_object_gradient2_radial.c b/src/lib/canvas/evas_object_gradient2_radial.c index 324762e..da7e9f6 100644 --- a/src/lib/canvas/evas_object_gradient2_radial.c +++ b/src/lib/canvas/evas_object_gradient2_radial.c @@ -34,7 +34,8 @@ static void evas_object_gradient2_radial_render(Evas_Object *obj, void *output, static void evas_object_gradient2_radial_render_pre(Evas_Object *obj); static void evas_object_gradient2_radial_render_post(Evas_Object *obj); -static int evas_object_gradient2_radial_visual_type_get(Evas_Object *obj); +static unsigned int evas_object_gradient2_radial_id_get(Evas_Object *obj); +static unsigned int evas_object_gradient2_radial_visual_id_get(Evas_Object *obj); static void *evas_object_gradient2_radial_engine_data_get(Evas_Object *obj); static int evas_object_gradient2_radial_is_opaque(Evas_Object *obj); @@ -47,7 +48,8 @@ static const Evas_Object_Func rg_object_func = evas_object_gradient2_radial_render, evas_object_gradient2_radial_render_pre, evas_object_gradient2_radial_render_post, - evas_object_gradient2_radial_visual_type_get, + evas_object_gradient2_radial_id_get, + evas_object_gradient2_radial_visual_id_get, evas_object_gradient2_radial_engine_data_get, /* these are optional. NULL = nothing */ NULL, @@ -417,7 +419,16 @@ evas_object_gradient2_radial_render_post(Evas_Object *obj) og->gradient_changed = 0; } -static int evas_object_gradient2_radial_visual_type_get(Evas_Object *obj) +static unsigned int evas_object_gradient2_radial_id_get(Evas_Object *obj) +{ + Evas_Object_Gradient2_Radial *o; + + o = (Evas_Object_Gradient2_Radial *)(obj->object_data); + if (!o) return 0; + return MAGIC_OBJ_GRADIENT_RADIAL; +} + +static unsigned int evas_object_gradient2_radial_visual_id_get(Evas_Object *obj) { Evas_Object_Gradient2_Radial *o; diff --git a/src/lib/canvas/evas_object_image.c b/src/lib/canvas/evas_object_image.c index aa8f72e..59acbcb 100644 --- a/src/lib/canvas/evas_object_image.c +++ b/src/lib/canvas/evas_object_image.c @@ -19,6 +19,8 @@ struct _Evas_Object_Image DATA32 magic; struct { + Evas_Common_Transform transform; + int spread; Evas_Coord_Rectangle fill; struct { short w, h, stride; @@ -70,7 +72,8 @@ static void evas_object_image_free(Evas_Object *obj); static void evas_object_image_render_pre(Evas_Object *obj); static void evas_object_image_render_post(Evas_Object *obj); -static int evas_object_image_visual_type_get(Evas_Object *obj); +static unsigned int evas_object_image_id_get(Evas_Object *obj); +static unsigned int evas_object_image_visual_id_get(Evas_Object *obj); static void *evas_object_image_engine_data_get(Evas_Object *obj); static int evas_object_image_is_opaque(Evas_Object *obj); @@ -86,8 +89,9 @@ static const Evas_Object_Func object_func = evas_object_image_render, evas_object_image_render_pre, evas_object_image_render_post, - evas_object_image_visual_type_get, - evas_object_image_engine_data_get, + evas_object_image_id_get, + evas_object_image_visual_id_get, + evas_object_image_engine_data_get, /* these are optional. NULL = nothing */ NULL, NULL, @@ -564,6 +568,132 @@ evas_object_image_fill_get(const Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, if (h) *h = o->cur.fill.h; } + +/** + * Sets the tiling mode for the given evas image object's fill. + * @param obj The given evas image object. + * @param spread One of EVAS_TEXTURE_REFLECT, EVAS_TEXTURE_REPEAT, + * EVAS_TEXTURE_RESTRICT, or EVAS_TEXTURE_PAD. + * @ingroup Evas_Object_Image_Fill_Group + */ +EAPI void +evas_object_image_fill_spread_set(Evas_Object *obj, int spread) +{ + Evas_Object_Image *o; + + MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); + return; + MAGIC_CHECK_END(); + o = (Evas_Object_Image *)(obj->object_data); + MAGIC_CHECK(o, Evas_Object_Image, MAGIC_OBJ_IMAGE); + return; + MAGIC_CHECK_END(); + if (spread == o->cur.spread) return; + o->cur.spread = spread; + o->changed = 1; + evas_object_change(obj); +} + +/** + * Retrieves the spread (tiling mode) for the given image object's fill. + * @param obj The given evas image object. + * @return The current spread mode of the image object. + * @ingroup Evas_Object_Image_Fill_Group + */ +EAPI int +evas_object_image_fill_spread_get(const Evas_Object *obj) +{ + Evas_Object_Image *o; + + MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); + return EVAS_TEXTURE_REPEAT; + MAGIC_CHECK_END(); + o = (Evas_Object_Image *)(obj->object_data); + MAGIC_CHECK(o, Evas_Object_Image, MAGIC_OBJ_IMAGE); + return EVAS_TEXTURE_REPEAT; + MAGIC_CHECK_END(); + return o->cur.spread; +} + +EAPI void +evas_object_image_fill_transform_set (Evas_Object *obj, Evas_Transform *t) +{ + Evas_Object_Image *o; + + MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); + return; + MAGIC_CHECK_END(); + o = (Evas_Object_Image *)(obj->object_data); + MAGIC_CHECK(o, Evas_Object_Image, MAGIC_OBJ_IMAGE); + return; + MAGIC_CHECK_END(); + if (!t) + { + o->cur.transform.mxx = 1; + o->cur.transform.mxy = 0; + o->cur.transform.mxz = 0; + o->cur.transform.myx = 0; + o->cur.transform.myy = 1; + o->cur.transform.myz = 0; + o->cur.transform.mzx = 0; + o->cur.transform.mzy = 0; + o->cur.transform.mzz = 1; + + o->changed; + evas_object_change(obj); + return; + } + if ( (o->cur.transform.mxx == t->mxx) || + (o->cur.transform.mxy == t->mxy) || + (o->cur.transform.mxy == t->mxy) || + (o->cur.transform.mxy == t->mxy) || + (o->cur.transform.mxy == t->mxy) || + (o->cur.transform.mxy == t->mxy) || + (o->cur.transform.mxy == t->mxy) || + (o->cur.transform.mxy == t->mxy) || + (o->cur.transform.mxy == t->mxy) ) + return; + + o->cur.transform.mxx = t->mxx; + o->cur.transform.mxy = t->mxy; + o->cur.transform.mxz = t->mxz; + o->cur.transform.myx = t->myx; + o->cur.transform.myy = t->myy; + o->cur.transform.myz = t->myz; + o->cur.transform.mzx = t->mzx; + o->cur.transform.mzy = t->mzy; + o->cur.transform.mzz = t->mzz; + + o->changed; + evas_object_change(obj); +} + +EAPI void +evas_object_image_fill_transform_get (const Evas_Object *obj, Evas_Transform *t) +{ + Evas_Object_Image *o; + + MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); + return; + MAGIC_CHECK_END(); + o = (Evas_Object_Image *)(obj->object_data); + MAGIC_CHECK(o, Evas_Object_Image, MAGIC_OBJ_IMAGE); + return; + MAGIC_CHECK_END(); + if (t) + { + t->mxx = o->cur.transform.mxx; + t->mxy = o->cur.transform.mxy; + t->mxz = o->cur.transform.mxz; + t->myx = o->cur.transform.myx; + t->myy = o->cur.transform.myy; + t->myz = o->cur.transform.myz; + t->mzx = o->cur.transform.mzx; + t->mzy = o->cur.transform.mzy; + t->mzz = o->cur.transform.mzz; + } +} + /** * @defgroup Evas_Object_Image_Size Image Object Image Size Functions * @@ -1858,6 +1988,8 @@ evas_object_image_new(void) o->cur.smooth_scale = 1; o->cur.border.fill = 1; o->cur.cspace = EVAS_COLORSPACE_ARGB8888; + o->cur.transform.mxx = o->cur.transform.myy = o->cur.transform.mzz = 1; + o->cur.spread = EVAS_TEXTURE_REPEAT; o->prev = o->cur; return o; } @@ -2341,7 +2473,16 @@ evas_object_image_render_post(Evas_Object *obj) /* FIXME: copy strings across */ } -static int evas_object_image_visual_type_get(Evas_Object *obj) +static unsigned int evas_object_image_id_get(Evas_Object *obj) +{ + Evas_Object_Image *o; + + o = (Evas_Object_Image *)(obj->object_data); + if (!o) return 0; + return MAGIC_OBJ_IMAGE; +} + +static unsigned int evas_object_image_visual_id_get(Evas_Object *obj) { Evas_Object_Image *o; diff --git a/src/lib/canvas/evas_object_line.c b/src/lib/canvas/evas_object_line.c index 1f6ff0b..cc38fd7 100644 --- a/src/lib/canvas/evas_object_line.c +++ b/src/lib/canvas/evas_object_line.c @@ -33,7 +33,8 @@ static void evas_object_line_free(Evas_Object *obj); static void evas_object_line_render_pre(Evas_Object *obj); static void evas_object_line_render_post(Evas_Object *obj); -static int evas_object_line_visual_type_get(Evas_Object *obj); +static unsigned int evas_object_line_id_get(Evas_Object *obj); +static unsigned int evas_object_line_visual_id_get(Evas_Object *obj); static void *evas_object_line_engine_data_get(Evas_Object *obj); static int evas_object_line_is_opaque(Evas_Object *obj); @@ -49,7 +50,8 @@ static const Evas_Object_Func object_func = evas_object_line_render, evas_object_line_render_pre, evas_object_line_render_post, - evas_object_line_visual_type_get, + evas_object_line_id_get, + evas_object_line_visual_id_get, evas_object_line_engine_data_get, /* these are optional. NULL = nothing */ NULL, @@ -408,7 +410,16 @@ evas_object_line_render_post(Evas_Object *obj) o->changed = 0; } -static int evas_object_line_visual_type_get(Evas_Object *obj) +static unsigned int evas_object_line_id_get(Evas_Object *obj) +{ + Evas_Object_Line *o; + + o = (Evas_Object_Line *)(obj->object_data); + if (!o) return 0; + return MAGIC_OBJ_LINE; +} + +static unsigned int evas_object_line_visual_id_get(Evas_Object *obj) { Evas_Object_Line *o; diff --git a/src/lib/canvas/evas_object_polygon.c b/src/lib/canvas/evas_object_polygon.c index 35ac120..b0e3d30 100644 --- a/src/lib/canvas/evas_object_polygon.c +++ b/src/lib/canvas/evas_object_polygon.c @@ -31,7 +31,8 @@ static void evas_object_polygon_free(Evas_Object *obj); static void evas_object_polygon_render_pre(Evas_Object *obj); static void evas_object_polygon_render_post(Evas_Object *obj); -static int evas_object_polygon_visual_type_get(Evas_Object *obj); +static unsigned int evas_object_polygon_id_get(Evas_Object *obj); +static unsigned int evas_object_polygon_visual_id_get(Evas_Object *obj); static void *evas_object_polygon_engine_data_get(Evas_Object *obj); static int evas_object_polygon_is_opaque(Evas_Object *obj); @@ -46,7 +47,8 @@ static const Evas_Object_Func object_func = evas_object_polygon_render, evas_object_polygon_render_pre, evas_object_polygon_render_post, - evas_object_polygon_visual_type_get, + evas_object_polygon_id_get, + evas_object_polygon_visual_id_get, evas_object_polygon_engine_data_get, /* these are optional. NULL = nothing */ NULL, @@ -414,7 +416,16 @@ evas_object_polygon_render_post(Evas_Object *obj) o->changed = 0; } -static int evas_object_polygon_visual_type_get(Evas_Object *obj) +static unsigned int evas_object_polygon_id_get(Evas_Object *obj) +{ + Evas_Object_Polygon *o; + + o = (Evas_Object_Polygon *)(obj->object_data); + if (!o) return 0; + return MAGIC_OBJ_POLYGON; +} + +static unsigned int evas_object_polygon_visual_id_get(Evas_Object *obj) { Evas_Object_Polygon *o; diff --git a/src/lib/canvas/evas_object_rectangle.c b/src/lib/canvas/evas_object_rectangle.c index 6264609..8599248 100644 --- a/src/lib/canvas/evas_object_rectangle.c +++ b/src/lib/canvas/evas_object_rectangle.c @@ -21,7 +21,8 @@ static void evas_object_rectangle_free(Evas_Object *obj); static void evas_object_rectangle_render_pre(Evas_Object *obj); static void evas_object_rectangle_render_post(Evas_Object *obj); -static int evas_object_rectangle_visual_type_get(Evas_Object *obj); +static unsigned int evas_object_rectangle_id_get(Evas_Object *obj); +static unsigned int evas_object_rectangle_visual_id_get(Evas_Object *obj); static void *evas_object_rectangle_engine_data_get(Evas_Object *obj); static int evas_object_rectangle_is_opaque(Evas_Object *obj); @@ -43,7 +44,8 @@ static const Evas_Object_Func object_func = evas_object_rectangle_render, evas_object_rectangle_render_pre, evas_object_rectangle_render_post, - evas_object_rectangle_visual_type_get, + evas_object_rectangle_id_get, + evas_object_rectangle_visual_id_get, evas_object_rectangle_engine_data_get, /* these are optional. NULL = nothing */ NULL, @@ -318,7 +320,16 @@ evas_object_rectangle_was_opaque(Evas_Object *obj) return 1; } -static int evas_object_rectangle_visual_type_get(Evas_Object *obj) +static unsigned int evas_object_rectangle_id_get(Evas_Object *obj) +{ + Evas_Object_Rectangle *o; + + o = (Evas_Object_Rectangle *)(obj->object_data); + if (!o) return 0; + return MAGIC_OBJ_RECTANGLE; +} + +static unsigned int evas_object_rectangle_visual_id_get(Evas_Object *obj) { Evas_Object_Rectangle *o; diff --git a/src/lib/canvas/evas_object_smart.c b/src/lib/canvas/evas_object_smart.c index cc67630..811cb81 100644 --- a/src/lib/canvas/evas_object_smart.c +++ b/src/lib/canvas/evas_object_smart.c @@ -32,7 +32,8 @@ static void evas_object_smart_free(Evas_Object *obj); static void evas_object_smart_render_pre(Evas_Object *obj); static void evas_object_smart_render_post(Evas_Object *obj); -static int evas_object_smart_visual_type_get(Evas_Object *obj); +static unsigned int evas_object_smart_id_get(Evas_Object *obj); +static unsigned int evas_object_smart_visual_id_get(Evas_Object *obj); static void *evas_object_smart_engine_data_get(Evas_Object *obj); static const Evas_Object_Func object_func = @@ -42,7 +43,8 @@ static const Evas_Object_Func object_func = evas_object_smart_render, evas_object_smart_render_pre, evas_object_smart_render_post, - evas_object_smart_visual_type_get, + evas_object_smart_id_get, + evas_object_smart_visual_id_get, evas_object_smart_engine_data_get, /* these are optional. NULL = nothing */ NULL, @@ -632,7 +634,16 @@ evas_object_smart_render_post(Evas_Object *obj) obj->prev = obj->cur; } -static int evas_object_smart_visual_type_get(Evas_Object *obj) +static unsigned int evas_object_smart_id_get(Evas_Object *obj) +{ + Evas_Object_Smart *o; + + o = (Evas_Object_Smart *)(obj->object_data); + if (!o) return 0; + return MAGIC_OBJ_SMART; +} + +static unsigned int evas_object_smart_visual_id_get(Evas_Object *obj) { Evas_Object_Smart *o; diff --git a/src/lib/canvas/evas_object_text.c b/src/lib/canvas/evas_object_text.c index 3f9d39d..d8db3b2 100644 --- a/src/lib/canvas/evas_object_text.c +++ b/src/lib/canvas/evas_object_text.c @@ -43,7 +43,8 @@ static void evas_object_text_free(Evas_Object *obj); static void evas_object_text_render_pre(Evas_Object *obj); static void evas_object_text_render_post(Evas_Object *obj); -static int evas_object_text_visual_type_get(Evas_Object *obj); +static unsigned int evas_object_text_id_get(Evas_Object *obj); +static unsigned int evas_object_text_visual_id_get(Evas_Object *obj); static void *evas_object_text_engine_data_get(Evas_Object *obj); static int evas_object_text_is_opaque(Evas_Object *obj); @@ -56,7 +57,8 @@ static const Evas_Object_Func object_func = evas_object_text_render, evas_object_text_render_pre, evas_object_text_render_post, - evas_object_text_visual_type_get, + evas_object_text_id_get, + evas_object_text_visual_id_get, evas_object_text_engine_data_get, /* these are optional. NULL = nothing */ NULL, @@ -1669,7 +1671,16 @@ evas_object_text_render_post(Evas_Object *obj) o->changed = 0; } -static int evas_object_text_visual_type_get(Evas_Object *obj) +static unsigned int evas_object_text_id_get(Evas_Object *obj) +{ + Evas_Object_Text *o; + + o = (Evas_Object_Text *)(obj->object_data); + if (!o) return 0; + return MAGIC_OBJ_TEXT; +} + +static unsigned int evas_object_text_visual_id_get(Evas_Object *obj) { Evas_Object_Text *o; diff --git a/src/lib/canvas/evas_object_textblock.c b/src/lib/canvas/evas_object_textblock.c index 93ac7d8..8bccfc7 100644 --- a/src/lib/canvas/evas_object_textblock.c +++ b/src/lib/canvas/evas_object_textblock.c @@ -143,7 +143,8 @@ static void evas_object_textblock_free(Evas_Object *obj); static void evas_object_textblock_render_pre(Evas_Object *obj); static void evas_object_textblock_render_post(Evas_Object *obj); -static int evas_object_textblock_visual_type_get(Evas_Object *obj); +static unsigned int evas_object_textblock_id_get(Evas_Object *obj); +static unsigned int evas_object_textblock_visual_id_get(Evas_Object *obj); static void *evas_object_textblock_engine_data_get(Evas_Object *obj); static int evas_object_textblock_is_opaque(Evas_Object *obj); @@ -158,7 +159,8 @@ static const Evas_Object_Func object_func = evas_object_textblock_render, evas_object_textblock_render_pre, evas_object_textblock_render_post, - evas_object_textblock_visual_type_get, + evas_object_textblock_id_get, + evas_object_textblock_visual_id_get, evas_object_textblock_engine_data_get, /* these are optional. NULL = nothing */ NULL, @@ -4878,7 +4880,16 @@ evas_object_textblock_render_post(Evas_Object *obj) /* o->changed = 0; */ } -static int evas_object_textblock_visual_type_get(Evas_Object *obj) +static unsigned int evas_object_textblock_id_get(Evas_Object *obj) +{ + Evas_Object_Textblock *o; + + o = (Evas_Object_Textblock *)(obj->object_data); + if (!o) return 0; + return MAGIC_OBJ_TEXTBLOCK; +} + +static unsigned int evas_object_textblock_visual_id_get(Evas_Object *obj) { Evas_Object_Textblock *o; diff --git a/src/lib/canvas/evas_transform.c b/src/lib/canvas/evas_transform.c new file mode 100644 index 0000000..f5d0f41 --- /dev/null +++ b/src/lib/canvas/evas_transform.c @@ -0,0 +1,117 @@ +#include "evas_common.h" +#include "evas_private.h" +#include + +EAPI void +evas_transform_identity_set(Evas_Transform *t) +{ + if (t) + { + t->mxx = t->myy = t->mzz = 1; + t->mxy = t->mxz = 0; + t->myx = t->myz = 0; + t->mzx = t->mzy = 0; + } +} + +EAPI void +evas_transform_rotate(double angle, Evas_Transform *t) +{ + double ca, sa; + float mxx, mxy, mxz; + float myx, myy, myz; + + if (!t) return; + + angle = (angle * M_PI) / 180.0; + ca = cos(angle); sa = sin(angle); + if ((ca == 1) && (sa == 0)) return; + + mxx = t->mxx; mxy = t->mxy; mxz = t->mxz; + myx = t->myx; myy = t->myy; myz = t->myz; + + t->mxx = (ca * mxx) + (sa * myx); + t->mxy = (ca * mxy) + (sa * myy); + t->mxz = (ca * mxz) + (sa * myz); + + t->myx = (-sa * mxx) + (ca * myx); + t->myy = (-sa * mxy) + (ca * myy); + t->myz = (-sa * mxz) + (ca * myz); +} + +EAPI void +evas_transform_translate(float dx, float dy, Evas_Transform *t) +{ + if (!t) return; + if (!dx && !dy) return; + + t->mxx = dx * t->mzx; + t->mxy = dx * t->mzy; + t->mxz = dx * t->mzz; + + t->myx = dy * t->mzx; + t->myy = dy * t->mzy; + t->myz = dy * t->mzz; +} + +EAPI void +evas_transform_scale(float sx, float sy, Evas_Transform *t) +{ + if (!t) return; + if ((sx == 1) && (sy == 1)) return; + + t->mxx = sx * t->mxx; + t->mxy = sx * t->mxy; + t->mxz = sx * t->mxz; + + t->myx = sy * t->myx; + t->myy = sy * t->myy; + t->myz = sy * t->myz; +} + +EAPI void +evas_transform_shear(float sh, float sv, Evas_Transform *t) +{ + float mxx, mxy, mxz; + float myx, myy, myz; + + if (!t) return; + if ((sh == 1) && (sv == 1)) return; + + mxx = t->mxx; mxy = t->mxy; mxz = t->mxz; + myx = t->myx; myy = t->myy; myz = t->myz; + + t->mxx = mxx + (sh * myx); + t->mxy = mxy + (sh * myy); + t->mxz = mxz + (sh * myz); + + t->myx = (sv * mxx) + myx; + t->myy = (sv * mxy) + myy; + t->myz = (sv * mxz) + myz; +} + +EAPI void +evas_transform_compose(Evas_Transform *l, Evas_Transform *t) +{ + float mxx, mxy, mxz; + float myx, myy, myz; + float mzx, mzy, mzz; + + if (!t || !l) return; + + mxx = t->mxx; mxy = t->mxy; mxz = t->mxz; + myx = t->myx; myy = t->myy; myz = t->myz; + mzx = t->mzx; mzy = t->mzy; mzz = t->mzz; + + t->mxx = (l->mxx * mxx) + (l->mxy * myx) + (l->mxz * mzx); + t->mxy = (l->mxx * mxy) + (l->mxy * myy) + (l->mxz * mzy); + t->mxz = (l->mxx * mxz) + (l->mxy * myz) + (l->mxz * mzz); + + t->myx = (l->myx * mxx) + (l->myy * myx) + (l->myz * mzx); + t->myy = (l->myx * mxy) + (l->myy * myy) + (l->myz * mzy); + t->myz = (l->myx * mxz) + (l->myy * myz) + (l->myz * mzz); + + t->mzx = (l->mzx * mxx) + (l->mzy * myx) + (l->mzz * mzx); + t->mzy = (l->mzx * mxy) + (l->mzy * myy) + (l->mzz * mzy); + t->mzz = (l->mzx * mxz) + (l->mzy * myz) + (l->mzz * mzz); +} diff --git a/src/lib/engines/common/evas_gradient2_linear.c b/src/lib/engines/common/evas_gradient2_linear.c index 3a829fa..1dcea65 100644 --- a/src/lib/engines/common/evas_gradient2_linear.c +++ b/src/lib/engines/common/evas_gradient2_linear.c @@ -2,12 +2,17 @@ #include "evas_private.h" #include +#define LINEAR_EPSILON 0.000030517578125 +#define LINEAR_INT_TOLERANCE 0.001953125 +// 1/512 = 0.001953125 <-- will use this one as our subpixel pos tolerance. +// 1/256 = 0.00390625 <-- though this one would be ok too for our uses. + typedef struct _Linear_Data Linear_Data; struct _Linear_Data { float x0, y0, x1, y1; - float fx0, fy0, fx1, fy1; + float fx0, fy0; int ayx, ayy; int len; unsigned char int_axis_aligned : 1; @@ -147,6 +152,7 @@ linear_update_geom(RGBA_Gradient2 *gr) { Linear_Data *linear_data; double f; + double fx0, fy0, fx1, fy1; int len; if (!gr || (gr->type.geometer != &linear)) return; @@ -155,38 +161,37 @@ linear_update_geom(RGBA_Gradient2 *gr) linear_data->int_axis_aligned = 0; linear_data->len = 0; - f = (gr->fill.transform.mxx * gr->fill.transform.myy) - (gr->fill.transform.mxy * gr->fill.transform.myx); - if (!f) return; + f = (gr->fill.transform.mxx * (double)gr->fill.transform.myy) - (gr->fill.transform.mxy * (double)gr->fill.transform.myx); + if (fabs(f) < LINEAR_EPSILON) return; f = 1.0 / f; - linear_data->fx0 = (((gr->fill.transform.myy * linear_data->x0) - (gr->fill.transform.mxy * linear_data->y0)) * f) - gr->fill.transform.mxz; - linear_data->fy0 = ((-(gr->fill.transform.myx * linear_data->x0) + (gr->fill.transform.mxx * linear_data->y0)) * f) - gr->fill.transform.myz; + fx0 = (((gr->fill.transform.myy * (double)linear_data->x0) - (gr->fill.transform.mxy * (double)linear_data->y0)) * f) - gr->fill.transform.mxz; + fy0 = ((-(gr->fill.transform.myx * (double)linear_data->x0) + (gr->fill.transform.mxx * (double)linear_data->y0)) * f) - gr->fill.transform.myz; - linear_data->fx1 = (((gr->fill.transform.myy * linear_data->x1) - (gr->fill.transform.mxy * linear_data->y1)) * f) - gr->fill.transform.mxz; - linear_data->fy1 = ((-(gr->fill.transform.myx * linear_data->x1) + (gr->fill.transform.mxx * linear_data->y1)) * f) - gr->fill.transform.myz; + fx1 = (((gr->fill.transform.myy * (double)linear_data->x1) - (gr->fill.transform.mxy * (double)linear_data->y1)) * f) - gr->fill.transform.mxz; + fy1 = ((-(gr->fill.transform.myx * (double)linear_data->x1) + (gr->fill.transform.mxx * (double)linear_data->y1)) * f) - gr->fill.transform.myz; - f = hypot(linear_data->fx0 - linear_data->fx1, linear_data->fy0 - linear_data->fy1); - linear_data->len = len = f; + f = hypot(fx1 - fx0, fy1 - fy0); + linear_data->len = len = f + 0.5; if (!len) return; - linear_data->ayx = ((double)(linear_data->fx1 - linear_data->fx0) * 65536) / f; - linear_data->ayy = ((double)(linear_data->fy1 - linear_data->fy0) * 65536) / f; + linear_data->ayx = ((fx1 - fx0) / f) * 65536; + linear_data->ayy = ((fy1 - fy0) / f) * 65536; -// 1/512 = 0.001953125 <-- will use this one as our subpixel pos tolerance. -// 1/256 = 0.00390625 <-- though this one would be ok too for our uses. - - if (fabs(linear_data->fy0 - linear_data->fy1) < 0.001953125) + if (fabs(fy0 - fy1) < LINEAR_INT_TOLERANCE) { - if ( (fabs(((int)linear_data->fy0) - linear_data->fy0) < 0.001953125) && - (fabs(((int)linear_data->fy1) - linear_data->fy1) < 0.001953125) ) + if ( (fabs(((int)fy0) - fy0) < LINEAR_INT_TOLERANCE) && + (fabs(((int)fy1) - fy1) < LINEAR_INT_TOLERANCE) ) { linear_data->int_axis_aligned = 1; linear_data->ayy = 0; } } - else if (fabs(linear_data->fx0 - linear_data->fx1) < 0.001953125) + else if (fabs(fx0 - fx1) < LINEAR_INT_TOLERANCE) { - if ( (fabs(((int)linear_data->fx0) - linear_data->fx0) < 0.001953125) && - (fabs(((int)linear_data->fx1) - linear_data->fx1) < 0.001953125) ) + if ( (fabs(((int)fx0) - fx0) < LINEAR_INT_TOLERANCE) && + (fabs(((int)fx1) - fx1) < LINEAR_INT_TOLERANCE) ) { linear_data->int_axis_aligned = 1; linear_data->ayx = 0; } } + linear_data->fx0 = fx0; + linear_data->fy0 = fy0; } static int @@ -348,9 +353,9 @@ linear_repeat_aa(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len int l = (yy >> 16); int a = 1 + ((yy & 0xffff) >> 8); - l = l % src_len; - if (l < 0) - l += src_len; + if ((l >= src_len) || (l < 0)) + { l = l % src_len; if (l < 0) l += src_len; } + #ifdef BUILD_MMX MOV_P2R(src[l], mm1, mm0) #else @@ -581,7 +586,7 @@ linear_restrict_aa(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_l if ((unsigned)(l + 1) < (src_len + 1)) { int a = 1 + ((yy & 0xffff) >> 8); - int lp = l; + int lp = l; if (l == -1) lp = 0; #ifdef BUILD_MMX @@ -646,7 +651,7 @@ linear_restrict_masked_aa(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, in if ((unsigned)(l + 1) < (src_len + 1)) { int a = 1 + ((yy & 0xffff) >> 8); - int lp = l; + int lp = l; if (l == -1) lp = 0; diff --git a/src/lib/engines/common/evas_gradient2_radial.c b/src/lib/engines/common/evas_gradient2_radial.c index 7a4601d..39939ba 100644 --- a/src/lib/engines/common/evas_gradient2_radial.c +++ b/src/lib/engines/common/evas_gradient2_radial.c @@ -2,13 +2,14 @@ #include "evas_private.h" #include +#define RADIAL_EPSILON 0.000030517578125 typedef struct _Radial_Data Radial_Data; struct _Radial_Data { - int axx, axy, axz; - int ayx, ayy, ayz; + int axx, axy; + int ayx, ayy; float cx, cy, rx, ry; float cx0, cy0; int len; @@ -79,8 +80,9 @@ evas_common_gradient2_radial_fill_set(RGBA_Gradient2 *gr, float cx, float cy, fl if (gr->type.geometer != &radial) return; radial_data = (Radial_Data *)gr->type.gdata; if (!radial_data) return; + if (rx < 0) rx = -rx; if (ry < 0) ry = -ry; radial_data->cx = cx; radial_data->cy = cy; - radial_data->rx = rx; radial_data->ry = ry; + radial_data->rx = 1 + rx; radial_data->ry = 1 + ry; } @@ -88,23 +90,23 @@ evas_common_gradient2_radial_fill_set(RGBA_Gradient2 *gr, float cx, float cy, fl static void radial_reflect_aa(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len, - int x, int y, void *params_data); + int x, int y, void *params_data); static void radial_repeat_aa(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len, - int x, int y, void *params_data); + int x, int y, void *params_data); static void radial_restrict_aa(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len, - int x, int y, void *params_data); + int x, int y, void *params_data); static void radial_restrict_masked_aa(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len, - int x, int y, void *params_data); + int x, int y, void *params_data); static void radial_pad_aa(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len, - int x, int y, void *params_data); + int x, int y, void *params_data); static void @@ -138,8 +140,8 @@ radial_init_geom(RGBA_Gradient2 *gr) if (!radial_data) return; radial_data->cx = radial_data->cy = 0; radial_data->rx = radial_data->ry = 0; - radial_data->axx = 65536; radial_data->axy = 0; radial_data->axz = 0; - radial_data->ayx = 0; radial_data->ayy = 65536; radial_data->ayz = 0; + radial_data->axx = 65536; radial_data->axy = 0; + radial_data->ayx = 0; radial_data->ayy = 65536; radial_data->len = 0; } gr->type.gdata = radial_data; @@ -150,40 +152,42 @@ radial_update_geom(RGBA_Gradient2 *gr) { Radial_Data *radial_data; double f, flen; + double fx1, fy1; int len; - float fx1, fy1; if (!gr || (gr->type.geometer != &radial)) return; radial_data = (Radial_Data *)gr->type.gdata; if (!radial_data) return; + if ((radial_data->rx < RADIAL_EPSILON) || (radial_data->ry < RADIAL_EPSILON)) return; + radial_data->len = 0; - f = (gr->fill.transform.mxx * gr->fill.transform.myy) - (gr->fill.transform.mxy * gr->fill.transform.myx); - if (!f) return; + f = (gr->fill.transform.mxx * (double)gr->fill.transform.myy) - (gr->fill.transform.mxy * (double)gr->fill.transform.myx); + if (fabs(f) < RADIAL_EPSILON) return; f = 1.0 / f; - radial_data->cx0 = (((gr->fill.transform.myy * radial_data->cx) - (gr->fill.transform.mxy * radial_data->cy)) * f) - gr->fill.transform.mxz; - radial_data->cy0 = ((-(gr->fill.transform.myx * radial_data->cx) + (gr->fill.transform.mxx * radial_data->cy)) * f) - gr->fill.transform.myz; + radial_data->cx0 = (((gr->fill.transform.myy * (double)radial_data->cx) - (gr->fill.transform.mxy * (double)radial_data->cy)) * f) - gr->fill.transform.mxz; + radial_data->cy0 = ((-(gr->fill.transform.myx * (double)radial_data->cx) + (gr->fill.transform.mxx * (double)radial_data->cy)) * f) - gr->fill.transform.myz; - fx1 = (((gr->fill.transform.myy * (radial_data->cx + radial_data->rx)) - (gr->fill.transform.mxy * (radial_data->cy))) * f) - gr->fill.transform.mxz; - fy1 = ((-(gr->fill.transform.myx * (radial_data->cx + radial_data->rx)) + (gr->fill.transform.mxx * (radial_data->cy))) * f) - gr->fill.transform.myz; + fx1 = (gr->fill.transform.myy * (double)radial_data->rx) * f; + fy1 = (gr->fill.transform.myx * (double)radial_data->rx) * f; - flen = hypot(radial_data->cx0 - fx1, radial_data->cy0 - fy1); + flen = hypot(fx1, fy1); - fx1 = (((gr->fill.transform.myy * (radial_data->cx)) - (gr->fill.transform.mxy * (radial_data->cy + radial_data->ry))) * f) - gr->fill.transform.mxz; - fy1 = ((-(gr->fill.transform.myx * (radial_data->cx)) + (gr->fill.transform.mxx * (radial_data->cy + radial_data->ry))) * f) - gr->fill.transform.myz; + fx1 = (gr->fill.transform.mxy * (double)radial_data->ry) * f; + fy1 = (gr->fill.transform.mxx * (double)radial_data->ry) * f; - flen = MAX(flen,hypot(radial_data->cx0 - fx1, radial_data->cy0 - fy1)); - radial_data->len = len = flen; + flen = sqrt(flen * hypot(fx1, fy1)); + + radial_data->len = len = flen + 0.5; if (!len) return; radial_data->axx = (((double)gr->fill.transform.mxx * 65536) * flen) / radial_data->rx; radial_data->axy = (((double)gr->fill.transform.mxy * 65536) * flen) / radial_data->rx; - radial_data->axz = (((double)gr->fill.transform.mxz * 65536) * flen) / radial_data->rx; + radial_data->ayx = (((double)gr->fill.transform.myx * 65536) * flen) / radial_data->ry; radial_data->ayy = (((double)gr->fill.transform.myy * 65536) * flen) / radial_data->ry; - radial_data->ayz = (((double)gr->fill.transform.myz * 65536) * flen) / radial_data->ry; } static int @@ -281,8 +285,8 @@ radial_repeat_aa(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len int xx, yy; evas_common_cpu_end_opt(); - xx = (gdata->axx * (x - gdata->cx0 + 0.5)) + (gdata->axy * (y - gdata->cy0 + 0.5)) + gdata->axz; - yy = (gdata->ayx * (x - gdata->cx0 + 0.5)) + (gdata->ayy * (y - gdata->cy0 + 0.5)) + gdata->ayz; + xx = (gdata->axx * (x - gdata->cx0 + 0.5)) + (gdata->axy * (y - gdata->cy0 + 0.5)); + yy = (gdata->ayx * (x - gdata->cx0 + 0.5)) + (gdata->ayy * (y - gdata->cy0 + 0.5)); while (dst < dst_end) { @@ -290,7 +294,7 @@ radial_repeat_aa(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len unsigned int l = (ll >> 16); int a = 1 + ((ll & 0xffff) >> 8); - if (l > (src_len - 1)) + if (l >= src_len) l = l % src_len; *dst = src[l]; if (l + 1 < src_len) @@ -315,8 +319,8 @@ radial_reflect_aa(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_le int xx, yy; evas_common_cpu_end_opt(); - xx = (gdata->axx * (x - gdata->cx0 + 0.5)) + (gdata->axy * (y - gdata->cy0 + 0.5)) + gdata->axz; - yy = (gdata->ayx * (x - gdata->cx0 + 0.5)) + (gdata->ayy * (y - gdata->cy0 + 0.5)) + gdata->ayz; + xx = (gdata->axx * (x - gdata->cx0 + 0.5)) + (gdata->axy * (y - gdata->cy0 + 0.5)); + yy = (gdata->ayx * (x - gdata->cx0 + 0.5)) + (gdata->ayy * (y - gdata->cy0 + 0.5)); while (dst < dst_end) { @@ -350,8 +354,8 @@ radial_restrict_aa(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_l int xx, yy; evas_common_cpu_end_opt(); - xx = (gdata->axx * (x - gdata->cx0 + 0.5)) + (gdata->axy * (y - gdata->cy0 + 0.5)) + gdata->axz; - yy = (gdata->ayx * (x - gdata->cx0 + 0.5)) + (gdata->ayy * (y - gdata->cy0 + 0.5)) + gdata->ayz; + xx = (gdata->axx * (x - gdata->cx0 + 0.5)) + (gdata->axy * (y - gdata->cy0 + 0.5)); + yy = (gdata->ayx * (x - gdata->cx0 + 0.5)) + (gdata->ayy * (y - gdata->cy0 + 0.5)); while (dst < dst_end) { @@ -386,8 +390,8 @@ radial_restrict_masked_aa(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, in int xx, yy; evas_common_cpu_end_opt(); - xx = (gdata->axx * (x - gdata->cx0 + 0.5)) + (gdata->axy * (y - gdata->cy0 + 0.5)) + gdata->axz; - yy = (gdata->ayx * (x - gdata->cx0 + 0.5)) + (gdata->ayy * (y - gdata->cy0 + 0.5)) + gdata->ayz; + xx = (gdata->axx * (x - gdata->cx0 + 0.5)) + (gdata->axy * (y - gdata->cy0 + 0.5)); + yy = (gdata->ayx * (x - gdata->cx0 + 0.5)) + (gdata->ayy * (y - gdata->cy0 + 0.5)); while (dst < dst_end) { @@ -422,8 +426,8 @@ radial_pad_aa(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len, int xx, yy; evas_common_cpu_end_opt(); - xx = (gdata->axx * (x - gdata->cx0 + 0.5)) + (gdata->axy * (y - gdata->cy0 + 0.5)) + gdata->axz; - yy = (gdata->ayx * (x - gdata->cx0 + 0.5)) + (gdata->ayy * (y - gdata->cy0 + 0.5)) + gdata->ayz; + xx = (gdata->axx * (x - gdata->cx0 + 0.5)) + (gdata->axy * (y - gdata->cy0 + 0.5)); + yy = (gdata->ayx * (x - gdata->cx0 + 0.5)) + (gdata->ayy * (y - gdata->cy0 + 0.5)); while (dst < dst_end) { diff --git a/src/lib/include/evas_private.h b/src/lib/include/evas_private.h index 8330b52..d2d5671 100644 --- a/src/lib/include/evas_private.h +++ b/src/lib/include/evas_private.h @@ -489,7 +489,8 @@ struct _Evas_Object_Func void (*render_pre) (Evas_Object *obj); void (*render_post) (Evas_Object *obj); - int (*visual_id_get) (Evas_Object *obj); + unsigned int (*type_id_get) (Evas_Object *obj); + unsigned int (*visual_id_get) (Evas_Object *obj); void *(*engine_data_get) (Evas_Object *obj); void (*store) (Evas_Object *obj); -- 2.7.4