Enlightenment CVS committal Author : raster Project : e17 Module : libs/evas
Dir : e17/libs/evas/src/lib/canvas Modified Files: evas_object_gradient.c evas_object_image.c evas_object_line.c evas_object_main.c evas_object_polygon.c evas_object_rectangle.c evas_object_text.c Log Message: jose's software rendering work - slight improvements (about 5-10%). i had to disable destination alha mmx support for text rendering (mask + color) as it was broken in tests. =================================================================== RCS file: /cvs/e/e17/libs/evas/src/lib/canvas/evas_object_gradient.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -3 -r1.11 -r1.12 --- evas_object_gradient.c 6 Jan 2006 23:05:17 -0000 1.11 +++ evas_object_gradient.c 2 May 2006 07:28:46 -0000 1.12 @@ -14,6 +14,7 @@ struct { Evas_Angle angle; int spread; + float range_offset; struct { Evas_Coord x, y, w, h; } fill; @@ -21,11 +22,12 @@ char *name; char *params; } type; - unsigned char gradient_opaque : 1; + unsigned char gradient_opaque : 1; } cur, prev; - + unsigned char changed : 1; unsigned char gradient_changed : 1; + unsigned char imported_data : 1; void *engine_data; }; @@ -60,8 +62,7 @@ NULL }; -/* the actual api call to add a rect */ -/* it has no other api calls as all properties are standard */ +/* the actual api call to add a gradient */ /** * @defgroup Evas_Object_Gradient_Group Evas Gradient Object Functions @@ -122,6 +123,7 @@ MAGIC_CHECK(o, Evas_Object_Gradient, MAGIC_OBJ_GRADIENT); return; MAGIC_CHECK_END(); + if (o->imported_data) return; o->engine_data = obj->layer->evas->engine.func->gradient_color_add(obj->layer->evas->engine.data.output, obj->layer->evas->engine.data.context, o->engine_data, @@ -150,6 +152,7 @@ MAGIC_CHECK(o, Evas_Object_Gradient, MAGIC_OBJ_GRADIENT); return; MAGIC_CHECK_END(); + if (o->imported_data) return; o->engine_data = obj->layer->evas->engine.func->gradient_colors_clear(obj->layer->evas->engine.data.output, obj->layer->evas->engine.data.context, o->engine_data); @@ -160,6 +163,85 @@ } /** + * Sets color data for the given evas gradient object. + * + * If data is so set, any existing gradient colors will be cleared, + * and any calls to add gradient colors are then ignored until the data is unset. + * To unset any set data, use the evas_object_gradient_data_unset call. + * The data is not copied, so if it was allocated, do not free it while it's set. + * + * @param obj The given evas gradient object. + * @param data The color data to be set. Should be in argb32 pixel format. + * @param len The length of the data pointer - multiple of the pixel size. + * @param has_alpha A flag indicating if the data has alpha or not. + * @ingroup Evas_Object_Gradient_Group + */ +EAPI void +evas_object_gradient_data_set(Evas_Object *obj, void *data, int len, int has_alpha) +{ + Evas_Object_Gradient *o; + + MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); + return; + MAGIC_CHECK_END(); + o = (Evas_Object_Gradient *)(obj->object_data); + MAGIC_CHECK(o, Evas_Object_Gradient, MAGIC_OBJ_GRADIENT); + return; + MAGIC_CHECK_END(); + if ((o->engine_data) && (!o->imported_data)) + o->engine_data = obj->layer->evas->engine.func->gradient_colors_clear(obj->layer->evas->engine.data.output, + obj->layer->evas->engine.data.context, + o->engine_data); + else if ((o->engine_data) && (o->imported_data)) + o->engine_data = obj->layer->evas->engine.func->gradient_data_unset(obj->layer->evas->engine.data.output, + obj->layer->evas->engine.data.context, + o->engine_data); + o->engine_data = obj->layer->evas->engine.func->gradient_data_set(obj->layer->evas->engine.data.output, + obj->layer->evas->engine.data.context, + o->engine_data, + data, len, has_alpha); + o->imported_data = 1; + if (has_alpha) o->cur.gradient_opaque = 0; + o->gradient_changed = 1; + o->changed = 1; + evas_object_change(obj); +} + +/** + * Unsets color data for the given evas gradient object. + * + * If no data is set, this does nothing. If data has been set, then this + * unsets any such color data. One can then add colors or set other data. + * The data may now be freed if need be. + * + * @param obj The given evas gradient object. + * @ingroup Evas_Object_Gradient_Group + */ +EAPI void +evas_object_gradient_data_unset(Evas_Object *obj) +{ + Evas_Object_Gradient *o; + + MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); + return; + MAGIC_CHECK_END(); + o = (Evas_Object_Gradient *)(obj->object_data); + MAGIC_CHECK(o, Evas_Object_Gradient, MAGIC_OBJ_GRADIENT); + return; + MAGIC_CHECK_END(); + if (!o->imported_data) return; + if (o->engine_data) + o->engine_data = obj->layer->evas->engine.func->gradient_data_unset(obj->layer->evas->engine.data.output, + obj->layer->evas->engine.data.context, + o->engine_data); + o->imported_data = 0; + o->cur.gradient_opaque = 1; + o->gradient_changed = 1; + o->changed = 1; + evas_object_change(obj); +} + +/** * Sets the angle at which the given evas gradient object sits clockwise * from vertical. * @param obj The given evas gradient object. @@ -204,7 +286,6 @@ return 0.0; MAGIC_CHECK_END(); return o->cur.angle; - evas_object_change(obj); } /** @@ -256,8 +337,8 @@ o->cur.fill.y = y; o->cur.fill.w = w; o->cur.fill.h = h; - o->changed = 1; o->gradient_changed = 1; + o->changed = 1; evas_object_change(obj); } @@ -298,13 +379,60 @@ if (y) *y = o->cur.fill.y; if (w) *w = o->cur.fill.w; if (h) *h = o->cur.fill.h; + return; +} + +/** + * Sets the offset which the given evas gradient object uses in its color data range. + * @param obj The given evas gradient object. + * @param offset Values can be negative. + * @ingroup Evas_Object_Gradient_Group + */ +EAPI void +evas_object_gradient_range_offset_set(Evas_Object *obj, float offset) +{ + Evas_Object_Gradient *o; + + MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); + return; + MAGIC_CHECK_END(); + o = (Evas_Object_Gradient *)(obj->object_data); + MAGIC_CHECK(o, Evas_Object_Gradient, MAGIC_OBJ_GRADIENT); + return; + MAGIC_CHECK_END(); + if (offset == o->cur.range_offset) return; + o->cur.range_offset = offset; + o->changed = 1; + evas_object_change(obj); +} + +/** + * Retrieves the range offset + * @param obj The given evas gradient object. + * @return The current gradient range offset if successful. @c 0.0 otherwise. + * @ingroup Evas_Object_Gradient_Group + */ +EAPI float +evas_object_gradient_range_offset_get(Evas_Object *obj) +{ + Evas_Object_Gradient *o; + + MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); + return 0.0; + MAGIC_CHECK_END(); + o = (Evas_Object_Gradient *)(obj->object_data); + MAGIC_CHECK(o, Evas_Object_Gradient, MAGIC_OBJ_GRADIENT); + return 0.0; + MAGIC_CHECK_END(); + return o->cur.range_offset; } /** * Sets the tiling mode for the given evas gradient object. * @param obj The given evas gradient object. - * @param spread One of EVAS_TEXTURE_RESTRICT, EVAS_TEXTURE_REPEAT, - * or EVAS_TEXTURE_REFLECT. + * @param spread One of EVAS_TEXTURE_REFLECT, EVAS_TEXTURE_REPEAT, + * EVAS_TEXTURE_RESTRICT, EVAS_TEXTURE_RESTRICT_REFLECT, EVAS_TEXTURE_RESTRICT_REPEAT, + * or EVAS_TEXTURE_PAD. * @ingroup Evas_Object_Gradient_Group */ EAPI void @@ -322,9 +450,6 @@ if (spread == o->cur.spread) return; o->cur.spread = spread; o->changed = 1; - o->gradient_changed = 1; - if (spread == EVAS_TEXTURE_RESTRICT) - o->cur.gradient_opaque = 0; evas_object_change(obj); } @@ -353,8 +478,8 @@ * @defgroup Evas_Object_Gradient_Type_Group Gradient Object Type Functions * * Functions that set or get a gradient's geometric type. Examples are "linear", - * "radial", "rectangular", "sinusoidal", ... Some types may accept added parameters - * to further specify the look. + * "radial", "rectangular", "angular", "sinusoidal", ... + * Some types may accept additional parameters to further specify the look. */ /** @@ -502,6 +627,7 @@ obj->cur.layer = 0; obj->cur.anti_alias = 1; obj->cur.interpolation.color_space = EVAS_COLOR_SPACE_ARGB; + obj->cur.render_op = EVAS_RENDER_BLEND; /* set up object-specific settings */ obj->prev = obj->cur; /* set up methods (compulsory) */ @@ -520,16 +646,17 @@ o->magic = MAGIC_OBJ_GRADIENT; o->cur.angle = 0.0; o->cur.spread = EVAS_TEXTURE_REFLECT; + o->cur.range_offset = 0.0; o->cur.fill.x = 0; o->cur.fill.y = 0; o->cur.fill.w = 32; o->cur.fill.h = 32; o->cur.type.name = strdup("linear"); o->cur.type.params = NULL; - o->cur.gradient_opaque = 1; + o->cur.gradient_opaque = 0; o->prev = o->cur; - o->gradient_changed = 1; o->changed = 1; + o->gradient_changed = 1; return o; } @@ -569,13 +696,11 @@ (Evas_Coord)obj->layer->evas->viewport.w); w = ((fw * obj->layer->evas->output.w) / (Evas_Coord)obj->layer->evas->viewport.w); - if (fw <= 0) fw = 1; y = ((fy * obj->layer->evas->output.h) / (Evas_Coord)obj->layer->evas->viewport.h); h = ((fh * obj->layer->evas->output.h) / (Evas_Coord)obj->layer->evas->viewport.h); - if (fh <= 0) fh = 1; - + *fx_ret = x; *fw_ret = w; *fy_ret = y; *fh_ret = h; } @@ -607,11 +732,13 @@ obj->cur.anti_alias); obj->layer->evas->engine.func->context_color_interpolation_set(output, context, obj->cur.interpolation.color_space); + obj->layer->evas->engine.func->context_render_op_set(output, context, + obj->cur.render_op); if (o->engine_data) { if (o->gradient_changed) obj->layer->evas->engine.func->gradient_map(output, context, o->engine_data, - o->cur.spread); + o->cur.spread); obj->layer->evas->engine.func->gradient_draw(output, context, surface, o->engine_data, obj->cur.cache.geometry.x + x, @@ -653,16 +780,19 @@ o->gradient_changed = 1; if ((obj->cur.cache.clip.r != obj->prev.cache.clip.r) || (obj->cur.cache.clip.g != obj->prev.cache.clip.g) || - (obj->cur.cache.clip.b != obj->prev.cache.clip.b) || - (obj->cur.cache.clip.a != obj->prev.cache.clip.a)) + (obj->cur.cache.clip.b != obj->prev.cache.clip.b) || + (obj->cur.cache.clip.a != obj->prev.cache.clip.a)) o->gradient_changed = 1; if (obj->cur.anti_alias != obj->prev.anti_alias) - o->gradient_changed = 1; + o->changed = 1; if (obj->cur.interpolation.color_space != obj->prev.interpolation.color_space) o->gradient_changed = 1; - if (obj->cur.cache.clip.a != 255) + if ((obj->cur.render_op != EVAS_RENDER_COPY) && + (obj->cur.cache.clip.a != 255)) o->cur.gradient_opaque = 0; - if (o->gradient_changed && o->engine_data) + if (obj->cur.render_op != obj->prev.render_op) + o->changed = 1; + if (o->changed && o->engine_data) { Evas_Coord fx, fy, fw, fh; @@ -671,6 +801,8 @@ &fx, &fy, &fw, &fh); obj->layer->evas->engine.func->gradient_fill_set(obj->layer->evas->engine.data.output, o->engine_data, fx, fy, fw, fh); + obj->layer->evas->engine.func->gradient_range_offset_set(obj->layer->evas->engine.data.output, o->engine_data, + o->cur.range_offset); obj->layer->evas->engine.func->gradient_type_set(obj->layer->evas->engine.data.output, o->engine_data, o->cur.type.name); obj->layer->evas->engine.func->gradient_type_params_set(obj->layer->evas->engine.data.output, o->engine_data, @@ -679,7 +811,7 @@ o->engine_data = obj->layer->evas->engine.func->gradient_geometry_init(obj->layer->evas->engine.data.output, o->engine_data, o->cur.spread); if (o->engine_data) { - o->cur.gradient_opaque &= !(obj->layer->evas->engine.func->gradient_alpha_get(obj->layer->evas->engine.data.output, o->engine_data, o->cur.spread)); + o->cur.gradient_opaque &= !(obj->layer->evas->engine.func->gradient_alpha_get(obj->layer->evas->engine.data.output, o->engine_data, o->cur.spread, obj->cur.render_op)); } } /* now figure what changed and add draw rects */ @@ -716,8 +848,8 @@ updates = evas_object_render_pre_prev_cur_add(updates, obj); goto done; } - /* angle changed */ - if ((o->changed) && (o->cur.angle != o->prev.angle)) + /* o->changed */ + if (o->changed) { updates = evas_object_render_pre_prev_cur_add(updates, obj); goto done; @@ -774,12 +906,12 @@ Evas_Object_Gradient *o; /* this returns 1 if the internal object data implies that the object is */ - /* currently fulyl opque over the entire gradient it occupies */ + /* currently fully opaque over the entire gradient it occupies */ o = (Evas_Object_Gradient *)(obj->object_data); - if (!o->engine_data) return 1; + if (!o->engine_data) return 0; o->cur.gradient_opaque &= !(obj->layer->evas->engine.func->gradient_alpha_get(obj->layer->evas->engine.data.output, - o->engine_data, o->cur.spread)); + o->engine_data, o->cur.spread, obj->cur.render_op)); return o->cur.gradient_opaque; } @@ -789,8 +921,8 @@ Evas_Object_Gradient *o; /* this returns 1 if the internal object data implies that the object was */ - /* currently fulyl opque over the entire gradient it occupies */ + /* currently fully opaque over the entire gradient it occupies */ o = (Evas_Object_Gradient *)(obj->object_data); - if (!o->engine_data) return 1; + if (!o->engine_data) return 0; return o->prev.gradient_opaque; } =================================================================== RCS file: /cvs/e/e17/libs/evas/src/lib/canvas/evas_object_image.c,v retrieving revision 1.38 retrieving revision 1.39 diff -u -3 -r1.38 -r1.39 --- evas_object_image.c 6 Jan 2006 23:05:17 -0000 1.38 +++ evas_object_image.c 2 May 2006 07:28:46 -0000 1.39 @@ -1293,6 +1293,7 @@ obj->cur.geometry.w = 32.0; obj->cur.geometry.h = 32.0; obj->cur.layer = 0; + obj->cur.render_op = EVAS_RENDER_BLEND; /* set up object-specific settings */ obj->prev = obj->cur; /* set up methods (compulsory) */ @@ -1371,6 +1372,9 @@ obj->cur.cache.clip.g, obj->cur.cache.clip.b, obj->cur.cache.clip.a); + + obj->layer->evas->engine.func->context_render_op_set(output, context, + obj->cur.render_op); if (o->engine_data) { Evas_Coord idw, idh, idx, idy; @@ -1582,6 +1586,12 @@ updates = evas_object_render_pre_prev_cur_add(updates, obj); if (!o->pixel_updates) goto done; } + /* if it changed render op */ + if (obj->cur.render_op != obj->prev.render_op) + { + updates = evas_object_render_pre_prev_cur_add(updates, obj); + if (!o->pixel_updates) goto done; + } if (o->changed) { if (((o->cur.file) && (!o->prev.file)) || @@ -1796,7 +1806,11 @@ (o->cur.border.b != 0)) && (!o->cur.border.fill)) return 0; if (!o->engine_data) return 0; + if (obj->cur.render_op == EVAS_RENDER_COPY) + return 1; if (o->cur.has_alpha) return 0; + if (obj->cur.render_op != EVAS_RENDER_BLEND) + return 0; return 1; } @@ -1814,6 +1828,10 @@ (o->prev.border.b != 0)) && (!o->prev.border.fill)) return 0; if (!o->engine_data) return 0; + if (obj->prev.render_op == EVAS_RENDER_COPY) + return 1; if (o->prev.has_alpha) return 0; + if (obj->prev.render_op != EVAS_RENDER_BLEND) + return 0; return 1; } =================================================================== RCS file: /cvs/e/e17/libs/evas/src/lib/canvas/evas_object_line.c,v retrieving revision 1.17 retrieving revision 1.18 diff -u -3 -r1.17 -r1.18 --- evas_object_line.c 6 Jan 2006 23:05:17 -0000 1.17 +++ evas_object_line.c 2 May 2006 07:28:47 -0000 1.18 @@ -226,6 +226,8 @@ obj->cur.geometry.w = 32.0; obj->cur.geometry.h = 32.0; obj->cur.layer = 0; + obj->cur.anti_alias = 1; + obj->cur.render_op = EVAS_RENDER_BLEND; /* set up object-specific settings */ obj->prev = obj->cur; /* set up methods (compulsory) */ @@ -279,6 +281,10 @@ obj->cur.cache.clip.a); obj->layer->evas->engine.func->context_multiplier_unset(output, context); + obj->layer->evas->engine.func->context_anti_alias_set(output, context, + obj->cur.anti_alias); + obj->layer->evas->engine.func->context_render_op_set(output, context, + obj->cur.render_op); obj->layer->evas->engine.func->line_draw(output, context, surface, @@ -326,6 +332,18 @@ updates = evas_object_render_pre_clipper_change(updates, obj); /* if we restacked (layer or just within a layer) */ if (obj->restack) + { + updates = evas_object_render_pre_prev_cur_add(updates, obj); + goto done; + } + /* if it changed anti_alias */ + if (obj->cur.anti_alias != obj->prev.anti_alias) + { + updates = evas_object_render_pre_prev_cur_add(updates, obj); + goto done; + } + /* if it changed render op */ + if (obj->cur.render_op != obj->prev.render_op) { updates = evas_object_render_pre_prev_cur_add(updates, obj); goto done; =================================================================== RCS file: /cvs/e/e17/libs/evas/src/lib/canvas/evas_object_main.c,v retrieving revision 1.45 retrieving revision 1.46 diff -u -3 -r1.45 -r1.46 --- evas_object_main.c 19 Apr 2006 14:37:49 -0000 1.45 +++ evas_object_main.c 2 May 2006 07:28:47 -0000 1.46 @@ -845,7 +845,7 @@ if (obj->cur.anti_alias == !!anti_alias) return; obj->cur.anti_alias = !!anti_alias; - evas_object_change(obj); + evas_object_change(obj); } @@ -881,7 +881,7 @@ if (obj->cur.interpolation.color_space == color_space) return; obj->cur.interpolation.color_space = color_space; - evas_object_change(obj); + evas_object_change(obj); } @@ -899,6 +899,42 @@ MAGIC_CHECK_END(); if (obj->delete_me) return 0; return obj->cur.interpolation.color_space; +} + +/** + * Sets the render_op to be used for rendering the evas object. + * @param obj The given evas object. + * @param render_op one of the Evas_Render_Op values. + * @ingroup Evas_Object_Group + */ +EAPI void +evas_object_render_op_set(Evas_Object *obj, Evas_Render_Op render_op) +{ + MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); + return; + MAGIC_CHECK_END(); + if (obj->delete_me) return; + if (obj->cur.render_op == render_op) + return; + obj->cur.render_op = render_op; + evas_object_change(obj); +} + + +/** + * Retrieves the current value of the operation used for rendering the evas object. + * @param obj The given evas object. + * @return one of the enumerated values in Evas_Render_Op. + * @ingroup Evas_Object_Group + */ +EAPI Evas_Render_Op +evas_object_render_op_get(Evas_Object *obj) +{ + MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); + return 0; + MAGIC_CHECK_END(); + if (obj->delete_me) return EVAS_RENDER_BLEND; + return obj->cur.render_op; } /** =================================================================== RCS file: /cvs/e/e17/libs/evas/src/lib/canvas/evas_object_polygon.c,v retrieving revision 1.16 retrieving revision 1.17 diff -u -3 -r1.16 -r1.17 --- evas_object_polygon.c 6 Jan 2006 23:05:17 -0000 1.16 +++ evas_object_polygon.c 2 May 2006 07:28:47 -0000 1.17 @@ -286,6 +286,8 @@ obj->cur.cache.clip.a); obj->layer->evas->engine.func->context_multiplier_unset(output, context); + obj->layer->evas->engine.func->context_render_op_set(output, context, + obj->cur.render_op); o->engine_data = obj->layer->evas->engine.func->polygon_points_clear(obj->layer->evas->engine.data.output, obj->layer->evas->engine.data.context, o->engine_data); @@ -347,6 +349,12 @@ updates = evas_object_render_pre_clipper_change(updates, obj); /* if we restacked (layer or just within a layer) */ if (obj->restack) + { + updates = evas_object_render_pre_prev_cur_add(updates, obj); + goto done; + } + /* if it changed render op */ + if (obj->cur.render_op != obj->prev.render_op) { updates = evas_object_render_pre_prev_cur_add(updates, obj); goto done; =================================================================== RCS file: /cvs/e/e17/libs/evas/src/lib/canvas/evas_object_rectangle.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -3 -r1.9 -r1.10 --- evas_object_rectangle.c 6 Jan 2006 23:05:17 -0000 1.9 +++ evas_object_rectangle.c 2 May 2006 07:28:47 -0000 1.10 @@ -20,14 +20,14 @@ 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_is_opaque(Evas_Object *obj); +static int evas_object_rectangle_was_opaque(Evas_Object *obj); #if 0 /* usless calls for a rect object. much more useful for images etc. */ static void evas_object_rectangle_store(Evas_Object *obj); static void evas_object_rectangle_unstore(Evas_Object *obj); static int evas_object_rectangle_is_visible(Evas_Object *obj); static int evas_object_rectangle_was_visible(Evas_Object *obj); -static int evas_object_rectangle_is_opaque(Evas_Object *obj); -static int evas_object_rectangle_was_opaque(Evas_Object *obj); static int evas_object_rectangle_is_inside(Evas_Object *obj, double x, double y); static int evas_object_rectangle_was_inside(Evas_Object *obj, double x, double y); #endif @@ -44,8 +44,8 @@ NULL, NULL, NULL, - NULL, - NULL, + evas_object_rectangle_is_opaque, + evas_object_rectangle_was_opaque, NULL, NULL, NULL @@ -95,11 +95,13 @@ obj->cur.geometry.w = 32.0; obj->cur.geometry.h = 32.0; obj->cur.layer = 0; + obj->cur.render_op = EVAS_RENDER_BLEND; /* set up object-specific settings */ obj->prev = obj->cur; /* set up methods (compulsory) */ obj->func = &object_func; obj->type = o_type; + obj->changed = 1; } static void * @@ -143,6 +145,8 @@ obj->cur.cache.clip.a); obj->layer->evas->engine.func->context_multiplier_unset(output, context); + obj->layer->evas->engine.func->context_render_op_set(output, context, + obj->cur.render_op); obj->layer->evas->engine.func->rectangle_draw(output, context, surface, @@ -194,6 +198,12 @@ updates = evas_object_render_pre_prev_cur_add(updates, obj); goto done; } + /* if it changed render op */ + if (obj->cur.render_op != obj->prev.render_op) + { + updates = evas_object_render_pre_prev_cur_add(updates, obj); + goto done; + } /* if it changed color */ if ((obj->cur.color.r != obj->prev.color.r) || (obj->cur.color.g != obj->prev.color.g) || @@ -233,7 +243,7 @@ /* it obviously didn't change - add a NO obscure - this "unupdates" this */ /* area so if there were updates for it they get wiped. don't do it if we */ /* arent fully opaque and we are visible */ -/* + /* if (evas_object_is_visible(obj) && evas_object_is_opaque(obj) && (!obj->clip.clipees)) @@ -242,7 +252,7 @@ obj->cur.cache.clip.y, obj->cur.cache.clip.w, obj->cur.cache.clip.h); - */ + */ done: evas_object_render_pre_effect_updates(updates, obj, is_v, was_v); } @@ -267,6 +277,37 @@ } /* move cur to prev safely for object data */ obj->prev = obj->cur; + obj->changed = 0; +} + +static int +evas_object_rectangle_is_opaque(Evas_Object *obj) +{ + Evas_Object_Rectangle *o; + + /* this returns 1 if the internal object data implies that the object is */ + /* currently fully opaque over the entire rectangle it occupies */ + o = (Evas_Object_Rectangle *)(obj->object_data); + if (obj->cur.render_op == EVAS_RENDER_COPY) + return 1; + if (obj->cur.render_op != EVAS_RENDER_BLEND) + return 0; + return 1; +} + +static int +evas_object_rectangle_was_opaque(Evas_Object *obj) +{ + Evas_Object_Rectangle *o; + + /* this returns 1 if the internal object data implies that the object was */ + /* previously fully opaque over the entire rectangle it occupies */ + o = (Evas_Object_Rectangle *)(obj->object_data); + if (obj->prev.render_op == EVAS_RENDER_COPY) + return 1; + if (obj->prev.render_op != EVAS_RENDER_BLEND) + return 0; + return 1; } #if 0 /* usless calls for a rect object. much more useful for images etc. */ @@ -303,28 +344,6 @@ /* this returns 1 if the internal object data would imply that it was */ /* visible (ie drawing it draws something. this is not to do with events */ - o = (Evas_Object_Rectangle *)(obj->object_data); - return 1; -} - -static int -evas_object_rectangle_is_opaque(Evas_Object *obj) -{ - Evas_Object_Rectangle *o; - - /* this returns 1 if the internal object data implies that the object is */ - /* currently fully opaque over the entire rectangle it occupies */ - o = (Evas_Object_Rectangle *)(obj->object_data); - return 1; -} - -static int -evas_object_rectangle_was_opaque(Evas_Object *obj) -{ - Evas_Object_Rectangle *o; - - /* this returns 1 if the internal object data implies that the object was */ - /* previously fully opaque over the entire rectangle it occupies */ o = (Evas_Object_Rectangle *)(obj->object_data); return 1; } =================================================================== RCS file: /cvs/e/e17/libs/evas/src/lib/canvas/evas_object_text.c,v retrieving revision 1.56 retrieving revision 1.57 diff -u -3 -r1.56 -r1.57 --- evas_object_text.c 30 Apr 2006 11:39:44 -0000 1.56 +++ evas_object_text.c 2 May 2006 07:28:47 -0000 1.57 @@ -1329,6 +1329,7 @@ o = (Evas_Object_Text *)(obj->object_data); evas_text_style_pad_get(o->cur.style, &sl, NULL, &st, NULL); ENFN->context_multiplier_unset(output, context); + ENFN->context_render_op_set(output, context, obj->cur.render_op); /* ENFN->context_color_set(output, context, @@ -1547,6 +1548,11 @@ (obj->cur.geometry.y != obj->prev.geometry.y) || (obj->cur.geometry.w != obj->prev.geometry.w) || (obj->cur.geometry.h != obj->prev.geometry.h)) + { + updates = evas_object_render_pre_prev_cur_add(updates, obj); + goto done; + } + if (obj->cur.render_op != obj->prev.render_op) { updates = evas_object_render_pre_prev_cur_add(updates, obj); goto done; ------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs