and make dynamic hint actually work when we have zero-copy texture
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 19 Aug 2010 05:18:17 +0000 (05:18 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 19 Aug 2010 05:18:17 +0000 (05:18 +0000)
support. fully ok now for argb8888.

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/evas@51380 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/canvas/evas_object_image.c
src/modules/engines/gl_common/evas_gl_image.c
src/modules/engines/gl_x11/evas_engine.c

index 08a4452..d5d94f2 100644 (file)
@@ -803,7 +803,6 @@ evas_object_image_size_set(Evas_Object *obj, int w, int h)
       o->engine_data = obj->layer->evas->engine.func->image_new_from_copied_data
       (obj->layer->evas->engine.data.output, w, h, NULL, o->cur.has_alpha,
           o->cur.cspace);
-   printf("size set %i %i -> %p\n", w, h, o->engine_data);
    
    if (o->engine_data)
      {
@@ -1080,9 +1079,12 @@ evas_object_image_data_get(const Evas_Object *obj, Eina_Bool for_writing)
                                                                  o->engine_data,
                                                                  for_writing,
                                                                  &data);
-   if (obj->layer->evas->engine.func->image_stride_get)
-      obj->layer->evas->engine.func->image_stride_get(obj->layer->evas->engine.data.output,
-                                                      o->engine_data, &o->cur.image.stride);
+   if (o->engine_data)
+     {
+        if (obj->layer->evas->engine.func->image_stride_get)
+           obj->layer->evas->engine.func->image_stride_get(obj->layer->evas->engine.data.output,
+                                                           o->engine_data, &o->cur.image.stride);
+     }
    o->pixels_checked_out++;
    if (for_writing)
      {
@@ -2003,20 +2005,20 @@ evas_object_image_scale_hint_set(Evas_Object *obj, Evas_Image_Scale_Hint hint)
    MAGIC_CHECK_END();
    if (o->scale_hint == hint) return;
 #ifdef EVAS_FRAME_QUEUING
-   if (o->scale_hint != hint)
-     {
-        if (o->engine_data)
-          evas_common_pipe_op_image_flush(o->engine_data);
-     }
+   if (o->engine_data)
+      evas_common_pipe_op_image_flush(o->engine_data);
 #endif
    o->scale_hint = hint;
-   if (obj->layer->evas->engine.func->image_scale_hint_set)
-      obj->layer->evas->engine.func->image_scale_hint_set
-      (obj->layer->evas->engine.data.output,
-          o->engine_data, o->scale_hint);
-   if (obj->layer->evas->engine.func->image_stride_get)
-      obj->layer->evas->engine.func->image_stride_get(obj->layer->evas->engine.data.output,
-                                                      o->engine_data, &o->cur.image.stride);
+   if (o->engine_data)
+     {
+        if (obj->layer->evas->engine.func->image_scale_hint_set)
+           obj->layer->evas->engine.func->image_scale_hint_set
+           (obj->layer->evas->engine.data.output,
+               o->engine_data, o->scale_hint);
+        if (obj->layer->evas->engine.func->image_stride_get)
+           obj->layer->evas->engine.func->image_stride_get(obj->layer->evas->engine.data.output,
+                                                           o->engine_data, &o->cur.image.stride);
+     }
 }
 
 /**
@@ -2065,21 +2067,20 @@ evas_object_image_content_hint_set(Evas_Object *obj, Evas_Image_Content_Hint hin
    MAGIC_CHECK_END();
    if (o->content_hint == hint) return;
 #ifdef EVAS_FRAME_QUEUING
-   if (o->content_hint != hint)
-     {
-        if (o->engine_data)
-          evas_common_pipe_op_image_flush(o->engine_data);
-     }
+   if (o->engine_data)
+      evas_common_pipe_op_image_flush(o->engine_data);
 #endif
-   printf("content hint!!!!\n");
    o->content_hint = hint;
-   if (obj->layer->evas->engine.func->image_content_hint_set)
-      obj->layer->evas->engine.func->image_content_hint_set
-      (obj->layer->evas->engine.data.output,
-          o->engine_data, o->content_hint);
-   if (obj->layer->evas->engine.func->image_stride_get)
-      obj->layer->evas->engine.func->image_stride_get(obj->layer->evas->engine.data.output,
-                                                      o->engine_data, &o->cur.image.stride);
+   if (o->engine_data)
+     {
+        if (obj->layer->evas->engine.func->image_content_hint_set)
+           obj->layer->evas->engine.func->image_content_hint_set
+           (obj->layer->evas->engine.data.output,
+               o->engine_data, o->content_hint);
+        if (obj->layer->evas->engine.func->image_stride_get)
+           obj->layer->evas->engine.func->image_stride_get(obj->layer->evas->engine.data.output,
+                                                           o->engine_data, &o->cur.image.stride);
+     }
 }
 
 /**
index 0bfd102..83c9641 100644 (file)
@@ -276,19 +276,13 @@ evas_gl_common_image_scale_hint_set(Evas_GL_Image *im, int hint)
 void
 evas_gl_common_image_content_hint_set(Evas_GL_Image *im, int hint)
 {
-   printf("xxxx1\n");
    if (im->content_hint == hint) return;
    im->content_hint = hint;
-   printf("xxxx2\n");
    if (!im->gc) return;
-   printf("xxxx3\n");
    if (!im->gc->shared->info.sec_image_map) return;
-   printf("xxxx4\n");
    if (!im->gc->shared->info.bgra) return;
-   printf("xxxx5\n");
    // does not handle yuv yet.
    if (im->cs.space != EVAS_COLORSPACE_ARGB8888) return;
-   printf("xxxx6\n");
    if (im->content_hint == EVAS_IMAGE_CONTENT_HINT_DYNAMIC)
      {
         if (im->cs.data)
index f8a7f9f..4fffd30 100644 (file)
@@ -783,12 +783,19 @@ eng_image_alpha_set(void *data, void *image, int has_alpha)
    re = (Render_Engine *)data;
    if (!image) return NULL;
    im = image;
+   if (im->alpha == has_alpha) return image;
    if (im->native.data)
      {
         im->alpha = has_alpha;
         return image;
      }
    eng_window_use(re->win);
+   if ((im->tex) && (im->tex->pt->dyn.img))
+     {
+        im->alpha = has_alpha;
+        im->tex->alpha = im->alpha;
+        return image;
+     }
    /* FIXME: can move to gl_common */
    if (im->cs.space != EVAS_COLORSPACE_ARGB8888) return im;
    if ((has_alpha) && (im->im->cache_entry.flags.alpha)) return image;
@@ -1632,13 +1639,13 @@ eng_image_content_hint_get(void *data __UNUSED__, void *image)
    return gim->content_hint;
 }
 
-static int
-eng_image_stride_get(void *data, void *image)
+static void
+eng_image_stride_get(void *data, void *image, int *stride)
 {
    Render_Engine *re = (Render_Engine *)data;
    Evas_GL_Image *im = image;
-   if ((im->tex) && (im->tex->pt->dyn.img)) return im->tex->pt->dyn.w;
-   return im->w;
+   *stride = im->w;
+   if ((im->tex) && (im->tex->pt->dyn.img)) *stride = im->tex->pt->dyn.w;
 }
 
 static void