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...
This commit is contained in:
parent
11a55d0dea
commit
c794cfd4ea
|
@ -48,6 +48,20 @@ typedef struct
|
||||||
Evas_Object *win;
|
Evas_Object *win;
|
||||||
} Fill_Data;
|
} 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 char *selfile = NULL;
|
||||||
static Entry *selentry = NULL;
|
static Entry *selentry = NULL;
|
||||||
static int seli = 0;
|
static int seli = 0;
|
||||||
|
@ -60,10 +74,8 @@ static Eina_List *entries = NULL;
|
||||||
static Ecore_Timer *_browser_hide_focus_restore_timer = NULL;
|
static Ecore_Timer *_browser_hide_focus_restore_timer = NULL;
|
||||||
static Eina_Semaphore step_sema;
|
static Eina_Semaphore step_sema;
|
||||||
static Ecore_Timer *initial_update_timer = NULL;
|
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 _pop_eval_delay(Evas_Object *win, int created, int destroyed);
|
||||||
static void _entry_files_pop_eval(Evas_Object *win, Entry *entry);
|
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)
|
_item_size_get(Evas_Object *win, Evas_Coord *w, Evas_Coord *h)
|
||||||
{
|
{
|
||||||
Evas_Coord sz = 0;
|
Evas_Coord sz = 0;
|
||||||
Evas_Coord minw = 100, minh = 100;
|
Evas_Coord minw = ITEM_MIN_W, minh = ITEM_MIN_H;
|
||||||
Evas_Coord maxw = 140, maxh = 140;
|
Evas_Coord maxw = ITEM_MAX_W, maxh = ITEM_MAX_H;
|
||||||
|
|
||||||
minw = elm_config_scale_get() * (double)minw;
|
minw = elm_config_scale_get() * (double)minw;
|
||||||
minh = elm_config_scale_get() * (double)minh;
|
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);
|
evas_object_geometry_get(win, NULL, NULL, w, h);
|
||||||
if (elm_win_fullscreen_get(win))
|
if (elm_win_fullscreen_get(win))
|
||||||
{
|
{
|
||||||
*w = (double)(*w) / 6.0;
|
*w = (double)(*w) / (double)FULLSCREEN_COLS;
|
||||||
*h = (double)(*h) / 3.0;
|
*h = (double)(*h) / (double)FULLSCREEN_ROWS;
|
||||||
maxw = 0;
|
maxw = 0;
|
||||||
maxh = 0;
|
maxh = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
*w = (double)(*w) / 12.0;
|
*w = (double)(*w) / (double)NORMAL_COLS;
|
||||||
*h = (double)(*h) / 4.0;
|
*h = (double)(*h) / (double)NORMAL_ROWS;
|
||||||
}
|
}
|
||||||
if (*w < minw) *w = minw;
|
if (*w < minw) *w = minw;
|
||||||
if (*h < minh) *h = minh;
|
if (*h < minh) *h = minh;
|
||||||
if ((maxw > 0) && (*w > maxw)) *w = maxw;
|
if ((maxw > 0) && (*w > maxw)) *w = maxw;
|
||||||
if ((maxh > 0) && (*h > maxh)) *h = maxh;
|
if ((maxh > 0) && (*h > maxh)) *h = maxh;
|
||||||
if (((*w * 100) / *h) < 50) *w = (*h * 50) / 100;
|
if (((*w * 100) / *h) < ITEM_ASPECT_MIN)
|
||||||
else if (((*w * 100) / *h) > 150) *w = (*h * 150) / 100;
|
*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 (*w < minw) *w = minw;
|
||||||
if (*h < minh) *h = minh;
|
if (*h < minh) *h = minh;
|
||||||
if (*w < sz) *w = sz;
|
if (*w < sz) *w = sz;
|
||||||
|
@ -319,7 +333,7 @@ _entry_files_pop_clear(Entry *entry)
|
||||||
evas_object_del(entry->file_obj[i]);
|
evas_object_del(entry->file_obj[i]);
|
||||||
entry->file_obj[i] = NULL;
|
entry->file_obj[i] = NULL;
|
||||||
destroyed++;
|
destroyed++;
|
||||||
if (destroyed >= max_destroyed) break;
|
if (destroyed >= DESTROYED_MAX) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_pop_eval_delay(win, 0, destroyed);
|
_pop_eval_delay(win, 0, destroyed);
|
||||||
|
@ -347,14 +361,14 @@ _cb_pop_eval_redo(void *data)
|
||||||
static void
|
static void
|
||||||
_pop_eval_delay(Evas_Object *win, int created, int destroyed)
|
_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)
|
if (pop_eval_redo)
|
||||||
{
|
{
|
||||||
ecore_timer_del(pop_eval_redo);
|
ecore_animator_del(pop_eval_redo);
|
||||||
pop_eval_redo = NULL;
|
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
|
// walk files to find which intersect the window
|
||||||
EINA_LIST_FOREACH(entry->files, l, file)
|
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.x = ent_x + ((i * ent_w) / entry->cols);
|
||||||
file_rect.y = ent_y + ((j * ent_h) / entry->rows);
|
file_rect.y = ent_y + ((j * ent_h) / entry->rows);
|
||||||
file_rect.w = (ent_w / entry->cols);
|
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]);
|
obj = &(entry->file_obj[(j * entry->cols) + i]);
|
||||||
if (eina_rectangles_intersect(&win_rect, &file_rect))
|
if (eina_rectangles_intersect(&win_rect, &file_rect))
|
||||||
{
|
{
|
||||||
if ((!(*obj)) && (created < max_created))
|
if ((!(*obj)) && (created < CREATED_MAX))
|
||||||
{
|
{
|
||||||
Evas_Object *o, *base;
|
Evas_Object *o, *base;
|
||||||
char buf[PATH_MAX], *p;
|
char buf[PATH_MAX], *p;
|
||||||
|
@ -479,7 +493,7 @@ _entry_files_pop_eval(Evas_Object *win, Entry *entry)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ((*obj) && (destroyed < max_destroyed))
|
if ((*obj) && (destroyed < DESTROYED_MAX))
|
||||||
{
|
{
|
||||||
entry->sels = eina_list_remove(entry->sels, *obj);
|
entry->sels = eina_list_remove(entry->sels, *obj);
|
||||||
evas_object_del(*obj);
|
evas_object_del(*obj);
|
||||||
|
|
Loading…
Reference in New Issue