svn update: 55757 (latest:55757)
authorJaehwan Kim <jae.hwan.kim@samsung.com>
Mon, 3 Jan 2011 09:18:24 +0000 (18:18 +0900)
committerJaehwan Kim <jae.hwan.kim@samsung.com>
Mon, 3 Jan 2011 09:18:24 +0000 (18:18 +0900)
14 files changed:
evas.rebase.complete [new file with mode: 0644]
src/lib/Evas.h
src/lib/cache/evas_cache_image.c
src/lib/canvas/evas_async_events.c
src/lib/canvas/evas_object_image.c
src/lib/canvas/evas_object_inform.c
src/lib/canvas/evas_object_textblock.c
src/lib/canvas/evas_render.c
src/lib/engines/common/evas_image.h
src/lib/engines/common/evas_image_data.c
src/lib/engines/common/evas_image_main.c
src/lib/engines/common/evas_image_scalecache.c
src/lib/include/evas_private.h
src/modules/engines/gl_x11/evas_engine.c

diff --git a/evas.rebase.complete b/evas.rebase.complete
new file mode 100644 (file)
index 0000000..429083f
--- /dev/null
@@ -0,0 +1 @@
+[evas] Rebase is completed.
index 3884793..7e9fc5f 100644 (file)
@@ -102,20 +102,22 @@ typedef enum _Evas_Callback_Type
    EVAS_CALLBACK_CHANGED_SIZE_HINTS, /**< Size hints changed event */
    EVAS_CALLBACK_IMAGE_PRELOADED, /**< Image as been preloaded */
 
-
    /*
     * The following events are only for use with canvas
     * evas_event_callback_add():
     */
-
    EVAS_CALLBACK_CANVAS_FOCUS_IN, /**< Canvas got focus as a whole */
    EVAS_CALLBACK_CANVAS_FOCUS_OUT, /**< Canvas lost focus as a whole */
    EVAS_CALLBACK_RENDER_FLUSH_PRE, /**< Called just before rendering is updated on the canvas target */
    EVAS_CALLBACK_RENDER_FLUSH_POST, /**< Called just after rendering is updated on the canvas target */
-
    EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN, /**< Canvas object got focus */
    EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_OUT, /**< Canvas object lost focus */
 
+   /* 
+    * More object event types - see evas_object_event_callback_add():
+    */
+   EVAS_CALLBACK_IMAGE_UNLOADED, /**< Image data has been unloaded (by some mechanims in evas that throws out original image data) */
+
    /* the following id no event number, but a sentinel: */
    EVAS_CALLBACK_LAST /**< keep as last element/sentinel -- not really an event */
 } Evas_Callback_Type; /**< The type of event to trigger the callback */
index 4d200a7..b75261d 100644 (file)
@@ -1443,6 +1443,7 @@ evas_cache_image_unload_data(Image_Entry *im)
 #ifdef BUILD_ASYNC_PRELOAD
    LKU(im->lock);
 #endif
+   //FIXME: imagedataunload - inform owners
 }
 
 static Eina_Bool
index 93f0f50..a88620d 100644 (file)
@@ -3,7 +3,9 @@
 
 #ifdef BUILD_ASYNC_EVENTS
 
-#include <unistd.h>
+#ifndef _MSC_VER
+# include <unistd.h>
+#endif
 #include <fcntl.h>
 #include <errno.h>
 
index cefd634..5b713f6 100644 (file)
@@ -1432,6 +1432,7 @@ evas_object_image_reload(Evas_Object *obj)
    if (o->engine_data)
      o->engine_data = obj->layer->evas->engine.func->image_dirty_region(obj->layer->evas->engine.data.output, o->engine_data, 0, 0, o->cur.image.w, o->cur.image.h);
    evas_object_image_unload(obj, 1);
+   evas_object_inform_call_image_unloaded(obj);
    evas_object_image_load(obj);
    o->prev.file = NULL;
    o->prev.key = NULL;
@@ -1715,6 +1716,7 @@ evas_object_image_load_dpi_set(Evas_Object *obj, double dpi)
    if (o->cur.file)
      {
        evas_object_image_unload(obj, 0);
+        evas_object_inform_call_image_unloaded(obj);
        evas_object_image_load(obj);
        o->changed = 1;
        evas_object_change(obj);
@@ -1773,6 +1775,7 @@ evas_object_image_load_size_set(Evas_Object *obj, int w, int h)
    if (o->cur.file)
      {
        evas_object_image_unload(obj, 0);
+        evas_object_inform_call_image_unloaded(obj);
        evas_object_image_load(obj);
        o->changed = 1;
        evas_object_change(obj);
@@ -1831,6 +1834,7 @@ evas_object_image_load_scale_down_set(Evas_Object *obj, int scale_down)
    if (o->cur.file)
      {
        evas_object_image_unload(obj, 0);
+        evas_object_inform_call_image_unloaded(obj);
        evas_object_image_load(obj);
        o->changed = 1;
        evas_object_change(obj);
@@ -1881,6 +1885,7 @@ evas_object_image_load_region_set(Evas_Object *obj, int x, int y, int w, int h)
    if (o->cur.file)
      {
        evas_object_image_unload(obj, 0);
+        evas_object_inform_call_image_unloaded(obj);
        evas_object_image_load(obj);
        o->changed = 1;
        evas_object_change(obj);
@@ -2217,6 +2222,7 @@ evas_image_cache_reload(Evas *e)
             if (o->magic == MAGIC_OBJ_IMAGE)
               {
                  evas_object_image_unload(obj, 1);
+                  evas_object_inform_call_image_unloaded(obj);
               }
          }
      }
@@ -2457,8 +2463,13 @@ evas_object_image_unload(Evas_Object *obj, Eina_Bool dirty)
                o->cur.image.w, o->cur.image.h);
      }
    if (o->engine_data)
-     obj->layer->evas->engine.func->image_free(obj->layer->evas->engine.data.output,
-                                              o->engine_data);
+     {
+        obj->layer->evas->engine.func->image_data_preload_cancel(obj->layer->evas->engine.data.output,
+                                                                 o->engine_data,
+                                                                 obj);
+        obj->layer->evas->engine.func->image_free(obj->layer->evas->engine.data.output,
+                                                  o->engine_data);
+     }
    o->engine_data = NULL;
    o->load_error = EVAS_LOAD_ERROR_NONE;
    o->cur.has_alpha = 1;
index 90ead99..d1dd645 100644 (file)
@@ -65,3 +65,12 @@ evas_object_inform_call_image_preloaded(Evas_Object *obj)
    evas_object_event_callback_call(obj, EVAS_CALLBACK_IMAGE_PRELOADED, NULL);
    _evas_post_event_callback_call(obj->layer->evas);
 }
+
+void
+evas_object_inform_call_image_unloaded(Evas_Object *obj)
+{
+   _evas_object_event_new();
+
+   evas_object_event_callback_call(obj, EVAS_CALLBACK_IMAGE_UNLOADED, NULL);
+   _evas_post_event_callback_call(obj->layer->evas);
+}
index fe507ff..057c52e 100644 (file)
@@ -5323,8 +5323,19 @@ _evas_textblock_node_format_pos_get(const Evas_Object_Textblock_Node_Format *fmt
 EAPI int
 evas_textblock_cursor_pos_get(const Evas_Textblock_Cursor *cur)
 {
+   Evas_Object_Textblock *o;
+   Evas_Object_Textblock_Node_Text *n;
+   size_t npos = 0;
+
    if (!cur) return -1;
-   return cur->pos;
+   o = (Evas_Object_Textblock *)(cur->obj->object_data);
+   n = o->text_nodes;
+   while (n != cur->node)
+     {
+        npos += eina_ustrbuf_length_get(n->unicode);
+        n = _NODE_TEXT(EINA_INLIST_GET(n)->next);
+     }
+   return npos + cur->pos;
 }
 
 /**
@@ -5336,11 +5347,13 @@ evas_textblock_cursor_pos_get(const Evas_Textblock_Cursor *cur)
 EAPI void
 evas_textblock_cursor_pos_set(Evas_Textblock_Cursor *cur, int _pos)
 {
-   size_t len, pos;
+   Evas_Object_Textblock *o;
+   Evas_Object_Textblock_Node_Text *n;
+   size_t pos;
 
    if (!cur) return;
-   if (!cur->node) return;
-   len = eina_ustrbuf_length_get(cur->node->unicode);
+   o = (Evas_Object_Textblock *)(cur->obj->object_data);
+
    if (_pos < 0)
      {
         pos = 0;
@@ -5350,11 +5363,28 @@ evas_textblock_cursor_pos_set(Evas_Textblock_Cursor *cur, int _pos)
         pos = (size_t) _pos;
      }
 
-   if (pos > len)
+   n = o->text_nodes;
+   while (n && (pos >= eina_ustrbuf_length_get(n->unicode)))
      {
-        pos = len;
+        pos -= eina_ustrbuf_length_get(n->unicode);
+        n = _NODE_TEXT(EINA_INLIST_GET(n)->next);
+     }
+
+   if (n)
+     {
+        cur->node = n;
+        cur->pos = pos;
+     }
+   else
+     {
+        Evas_Object_Textblock_Node_Text *last_n;
+
+        last_n = _NODE_TEXT(EINA_INLIST_GET(o->text_nodes)->last);
+        cur->node = last_n;
+       cur->pos = 0;
+
+        evas_textblock_cursor_paragraph_char_last(cur);
      }
-   cur->pos = pos;
 
 }
 
index 27599a9..c35e0bd 100644 (file)
@@ -1591,7 +1591,11 @@ evas_render_dump(Evas *e)
         Evas_Object *obj;
 
         EINA_INLIST_FOREACH(lay->objects, obj)
-          _evas_render_dump_map_surfaces(obj);
+          {
+             if ((obj->type) && (!strcmp(obj->type, "image")))
+                evas_object_inform_call_image_unloaded(obj);
+             _evas_render_dump_map_surfaces(obj);
+          }
      }
    if ((e->engine.func) && (e->engine.func->output_dump) &&
        (e->engine.data.output))
index 0958009..0e2a66a 100644 (file)
@@ -35,7 +35,7 @@ EAPI int               evas_common_save_image_to_file              (RGBA_Image *
 EAPI void evas_common_rgba_image_scalecache_size_set(unsigned int size);
 EAPI unsigned int evas_common_rgba_image_scalecache_size_get(void);
 EAPI void evas_common_rgba_image_scalecache_flush(void);
-    
+EAPI void evas_common_rgba_image_scalecache_dump(void);
 EAPI void
   evas_common_rgba_image_scalecache_prepare(Image_Entry *ie, RGBA_Image *dst,
                                             RGBA_Draw_Context *dc, int smooth,
index 2213ced..15ee166 100644 (file)
@@ -104,7 +104,9 @@ evas_common_rgba_image_colorspace_set(Image_Entry* ie_dst, int cspace)
          {
              ie_dst->allocated.w = 0;
              ie_dst->allocated.h = 0;
+#ifdef BUILD_ASYNC_PRELOAD
              ie_dst->flags.preload_done = 0;
+#endif
              ie_dst->flags.loaded = 0;
              dst->image.data = NULL;
             dst->image.no_free = 0;
index 164e811..9287185 100644 (file)
@@ -213,8 +213,10 @@ evas_common_rgba_image_unload(Image_Entry *ie)
         im->image.data = NULL;
         ie->allocated.w = 0;
         ie->allocated.h = 0;
-        ie->flags.preload_done = 0;
         ie->flags.loaded = 0;
+#ifdef BUILD_ASYNC_PRELOAD
+        ie->flags.preload_done = 0;
+#endif
         return;
      }
 #endif   
@@ -224,8 +226,10 @@ evas_common_rgba_image_unload(Image_Entry *ie)
    im->image.data = NULL;
    ie->allocated.w = 0;
    ie->allocated.h = 0;
-   ie->flags.preload_done = 0;
    ie->flags.loaded = 0;
+#ifdef BUILD_ASYNC_PRELOAD
+   ie->flags.preload_done = 0;
+#endif
 }
 
 static int
@@ -290,7 +294,9 @@ _evas_common_rgba_image_surface_delete(Image_Entry *ie)
    im->image.data = NULL;
    ie->allocated.w = 0;
    ie->allocated.h = 0;
+#ifdef BUILD_ASYNC_PRELOAD
    ie->flags.preload_done = 0;
+#endif
    ie->flags.loaded = 0;
    evas_common_rgba_image_scalecache_dirty(&im->cache_entry);
 }
index 52a48a4..c479e32 100644 (file)
@@ -743,6 +743,7 @@ evas_common_rgba_image_scalecache_do(Image_Entry *ie, RGBA_Image *dst,
                   if ((dounload) || (im->cache.orig_usage < 
                                      (im->cache.newest_usage / 20)))
                     {
+                       //FIXME: imagedataunload - inform owners
                        evas_common_rgba_image_unload(&im->cache_entry);
                     }
                }
index 86909af..b4a4463 100644 (file)
@@ -767,6 +767,7 @@ void evas_object_inform_call_resize(Evas_Object *obj);
 void evas_object_inform_call_restack(Evas_Object *obj);
 void evas_object_inform_call_changed_size_hints(Evas_Object *obj);
 void evas_object_inform_call_image_preloaded(Evas_Object *obj);
+void evas_object_inform_call_image_unloaded(Evas_Object *obj);
 void evas_object_intercept_cleanup(Evas_Object *obj);
 int evas_object_intercept_call_show(Evas_Object *obj);
 int evas_object_intercept_call_hide(Evas_Object *obj);
index 3c92ef9..a4b6f4d 100644 (file)
@@ -66,6 +66,7 @@ int      (*glsym_glXWaitVideoSync)   (int a, int b, unsigned int *c) = NULL;
 XID      (*glsym_glXCreatePixmap)    (Display *a, void *b, Pixmap c, const int *d) = NULL;
 void     (*glsym_glXDestroyPixmap)   (Display *a, XID b) = NULL;
 void     (*glsym_glXQueryDrawable)   (Display *a, XID b, int c, unsigned int *d) = NULL;
+void     (*glsym_glxSwapInterval)    (int a) = NULL;
 #endif
 
 static void
@@ -138,6 +139,11 @@ _sym_init(void)
    FINDSYM(glsym_glXQueryDrawable, "glXQueryDrawable", glsym_func_void);
    FINDSYM(glsym_glXQueryDrawable, "glXQueryDrawableEXT", glsym_func_void);
    FINDSYM(glsym_glXQueryDrawable, "glXQueryDrawableARB", glsym_func_void);
+
+   FINDSYM(glsym_glxSwapInterval, "glxSwapInterval", glsym_func_void);
+   FINDSYM(glsym_glxSwapInterval, "glxSwapIntervalEXT", glsym_func_void);
+   FINDSYM(glsym_glxSwapInterval, "glxSwapIntervalARB", glsym_func_void);
+   FINDSYM(glsym_glxSwapInterval, "glxSwapIntervalSGI", glsym_func_void);
 #endif
 }
 
@@ -658,12 +664,24 @@ eng_output_flush(void *data)
 #ifdef VSYNC_TO_SCREEN   
    if ((re->info->vsync)/* || (1)*/)
      {
-        if ((glsym_glXGetVideoSync) && (glsym_glXWaitVideoSync))
+        if (glsym_glxSwapInterval)
           {
-             unsigned int rc;
-             
-             glsym_glXGetVideoSync(&rc);
-             glsym_glXWaitVideoSync(1, 0, &rc);
+             if (!re->vsync)
+               {
+                  if (re->info->vsync) glsym_glxSwapInterval(1);
+                  else glsym_glxSwapInterval(0);
+                  re->vsync = 1;
+               }
+          }
+        else
+          {
+             if ((glsym_glXGetVideoSync) && (glsym_glXWaitVideoSync))
+               {
+                  unsigned int rc;
+                  
+                  glsym_glXGetVideoSync(&rc);
+                  glsym_glXWaitVideoSync(1, 0, &rc);
+               }
           }
      }
 # endif