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

Reply via email to