raster pushed a commit to branch master.

http://git.enlightenment.org/apps/rage.git/commit/?id=c794cfd4ea3552eb747a3def7393276e5d09a190

commit c794cfd4ea3552eb747a3def7393276e5d09a190
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date:   Sat Feb 15 12:00:36 2020 +0000

    browser - move propulate to animator and consts to defines
    
    a bunch of magic constants in the browser - move to defines at the
    top. these are for tuning the general way the browser does things so
    keep them in a block at the top as defines and move the delayed
    populate to an animator to keep a constant amount of per-frame actions
    limited (like creates and destroys). up these to 32 creates and
    destroys max per frame to keep max smoodness in scrolling around.
    
    on reflection i could also just limit it by time as well... but... for
    now this is bvery good and improved over what was there a little bit
    ago...
---
 src/bin/browser.c | 50 ++++++++++++++++++++++++++++++++------------------
 1 file changed, 32 insertions(+), 18 deletions(-)

diff --git a/src/bin/browser.c b/src/bin/browser.c
index 905be88..d742c03 100644
--- a/src/bin/browser.c
+++ b/src/bin/browser.c
@@ -48,6 +48,20 @@ typedef struct
    Evas_Object *win;
 } Fill_Data;
 
+#define CREATED_MAX      32
+#define DESTROYED_MAX    32
+#define NORMAL_COLS      12
+#define NORMAL_ROWS       4
+#define FULLSCREEN_COLS   6
+#define FULLSCREEN_ROWS   3
+// these gets scaled by scaling factor anyway...
+#define ITEM_MIN_W      100
+#define ITEM_MIN_H      100
+#define ITEM_MAX_W      140
+#define ITEM_MAX_H      140
+#define ITEM_ASPECT_MIN  50
+#define ITEM_ASPECT_MAX 150
+
 static char *selfile = NULL;
 static Entry *selentry = NULL;
 static int seli = 0;
@@ -60,10 +74,8 @@ static Eina_List *entries = NULL;
 static Ecore_Timer *_browser_hide_focus_restore_timer = NULL;
 static Eina_Semaphore step_sema;
 static Ecore_Timer *initial_update_timer = NULL;
-static Ecore_Timer *pop_eval_redo = NULL;
+static Ecore_Animator *pop_eval_redo = NULL;
 
-static const int max_created = 8;
-static const int max_destroyed = 16;
 
 static void _pop_eval_delay(Evas_Object *win, int created, int destroyed);
 static void _entry_files_pop_eval(Evas_Object *win, Entry *entry);
@@ -73,8 +85,8 @@ static void
 _item_size_get(Evas_Object *win, Evas_Coord *w, Evas_Coord *h)
 {
    Evas_Coord sz = 0;
-   Evas_Coord minw = 100, minh = 100;
-   Evas_Coord maxw = 140, maxh = 140;
+   Evas_Coord minw = ITEM_MIN_W, minh = ITEM_MIN_H;
+   Evas_Coord maxw = ITEM_MAX_W, maxh = ITEM_MAX_H;
 
    minw = elm_config_scale_get() * (double)minw;
    minh = elm_config_scale_get() * (double)minh;
@@ -84,22 +96,24 @@ _item_size_get(Evas_Object *win, Evas_Coord *w, Evas_Coord 
*h)
    evas_object_geometry_get(win, NULL, NULL, w, h);
    if (elm_win_fullscreen_get(win))
      {
-        *w = (double)(*w) / 6.0;
-        *h = (double)(*h) / 3.0;
+        *w = (double)(*w) / (double)FULLSCREEN_COLS;
+        *h = (double)(*h) / (double)FULLSCREEN_ROWS;
         maxw = 0;
         maxh = 0;
      }
    else
      {
-        *w = (double)(*w) / 12.0;
-        *h = (double)(*h) / 4.0;
+        *w = (double)(*w) / (double)NORMAL_COLS;
+        *h = (double)(*h) / (double)NORMAL_ROWS;
      }
    if (*w < minw) *w = minw;
    if (*h < minh) *h = minh;
    if ((maxw > 0) && (*w > maxw)) *w = maxw;
    if ((maxh > 0) && (*h > maxh)) *h = maxh;
-   if      (((*w * 100) / *h) <  50) *w = (*h *  50) / 100;
-   else if (((*w * 100) / *h) > 150) *w = (*h * 150) / 100;
+   if (((*w * 100) / *h) < ITEM_ASPECT_MIN)
+     *w = (*h * ITEM_ASPECT_MIN) / 100;
+   else if (((*w * 100) / *h) > ITEM_ASPECT_MAX)
+     *w = (*h * ITEM_ASPECT_MAX) / 100;
    if (*w < minw) *w = minw;
    if (*h < minh) *h = minh;
    if (*w < sz) *w = sz;
@@ -319,7 +333,7 @@ _entry_files_pop_clear(Entry *entry)
                   evas_object_del(entry->file_obj[i]);
                   entry->file_obj[i] = NULL;
                   destroyed++;
-                  if (destroyed >= max_destroyed) break;
+                  if (destroyed >= DESTROYED_MAX) break;
                }
           }
         _pop_eval_delay(win, 0, destroyed);
@@ -347,14 +361,14 @@ _cb_pop_eval_redo(void *data)
 static void
 _pop_eval_delay(Evas_Object *win, int created, int destroyed)
 {
-   if ((created >= max_created) || (destroyed >= max_destroyed))
+   if ((created >= CREATED_MAX) || (destroyed >= DESTROYED_MAX))
      {
         if (pop_eval_redo)
           {
-             ecore_timer_del(pop_eval_redo);
+             ecore_animator_del(pop_eval_redo);
              pop_eval_redo = NULL;
           }
-        pop_eval_redo = ecore_timer_add(0.01, _cb_pop_eval_redo, win);
+        pop_eval_redo = ecore_animator_add(_cb_pop_eval_redo, win);
      }
 }
 
@@ -393,7 +407,7 @@ _entry_files_pop_eval(Evas_Object *win, Entry *entry)
    // walk files to find which intersect the window
    EINA_LIST_FOREACH(entry->files, l, file)
      {
-        if ((created >= max_created) && (destroyed >= max_destroyed)) break;
+        if ((created >= CREATED_MAX) && (destroyed >= DESTROYED_MAX)) break;
         file_rect.x = ent_x + ((i * ent_w) / entry->cols);
         file_rect.y = ent_y + ((j * ent_h) / entry->rows);
         file_rect.w = (ent_w / entry->cols);
@@ -405,7 +419,7 @@ _entry_files_pop_eval(Evas_Object *win, Entry *entry)
         obj = &(entry->file_obj[(j * entry->cols) + i]);
         if (eina_rectangles_intersect(&win_rect, &file_rect))
           {
-             if ((!(*obj)) && (created < max_created))
+             if ((!(*obj)) && (created < CREATED_MAX))
                {
                   Evas_Object *o, *base;
                   char buf[PATH_MAX], *p;
@@ -479,7 +493,7 @@ _entry_files_pop_eval(Evas_Object *win, Entry *entry)
           }
         else
           {
-             if ((*obj) && (destroyed < max_destroyed))
+             if ((*obj) && (destroyed < DESTROYED_MAX))
                {
                   entry->sels = eina_list_remove(entry->sels, *obj);
                   evas_object_del(*obj);

-- 


Reply via email to