Item_Block *itb;
Evas_Coord minw = 0, minh = 0, vw = 0, vh = 0, current_minh = 0;
Evas_Coord processed_size = sd->minh;
- int cnt = 0;
+ // TIZEN_ONLY(20161230): Optimization for application launch on item show scenario
+ int cnt = 0, stop_cnt = MAX_ITEMS_PER_BLOCK;
+ //
Evas_Coord bottom_margin;
-
if (sd->calc_done) return;
// TIZEN_ONLY(20150828) : Calculate item which position on viewport area
+ // TIZEN_ONLY(20161230): Optimization for application launch on item show scenario
+ Eina_Bool count_start = EINA_FALSE;
while (sd->queue &&
- ((sd->viewport_h > processed_size) && (cnt < MAX_ITEMS_PER_BLOCK)))
+ ((sd->viewport_h > processed_size) || (sd->show_item && cnt < stop_cnt)))
+ //
+ //
{
Elm_Gen_Item *tmp;
tmp = eina_list_data_get(sd->queue);
if (!_item_process(sd, tmp)) continue;
processed_size += GL_IT(tmp)->minh;
tmp->item->queued = EINA_FALSE;
- cnt++;
+ // TIZEN_ONLY(20161230): Optimization for application launch on item show scenario
+ if (sd->show_item)
+ {
+ if (sd->show_item == tmp) count_start = EINA_TRUE;
+ if (count_start) cnt++;
+ }
+ //
}
//
elm_interface_scrollable_content_viewport_geometry_get(sd->obj, NULL, NULL, &vw, &vh);
evas_object_geometry_get(obj, &ox, &oy, &ow, &oh);
evas_output_viewport_get(evas_object_evas_get(obj), &cvx, &cvy, &cvw, &cvh);
-
+ //TIZEN_ONLY(20190109): Show item in spinner when calc is completed
+ const char* str = edje_object_data_get(elm_layout_edje_get(psd->wsd->obj), "spinner_genlist");
+ //
//FIXME: This is for optimizing genlist calculation after
// genlist sizing eval properly.
if (ow <= 1) return;
}
#endif
+ // TIZEN_ONLY(20161230): Optimization for application launch on item show scenario
+ if (psd->wsd->show_item &&
+ !psd->wsd->show_item->item->queued &&
+ psd->wsd->show_item->item->calc_done &&
+ psd->wsd->show_item->item->block->calc_done &&
+ psd->wsd->calc_done &&
+ (oh > 0) &&
+ (!psd->wsd->loop_v || (psd->wsd->loop_v && !psd->wsd->queue)) && //psd->wsd->loop_v indicates if looping is enabled in vertical dir
+ (!str || (str && !psd->wsd->queue)))
+ {
+ Evas_Coord x, y, w, h;
+ Elm_Gen_Item *it = psd->wsd->show_item;
+ psd->wsd->show_item = NULL;
+ psd->wsd->comp_y = 0;
+ x = it->x + GL_IT(it)->block->x + psd->wsd->pan_x;
+ y = it->y + GL_IT(it)->block->y;
+ w = ow;
+ h = oh;
+
+ switch (psd->wsd->scroll_to_type)
+ {
+ case ELM_GENLIST_ITEM_SCROLLTO_IN:
+ h = GL_IT(it)->h;
+ break;
+ case ELM_GENLIST_ITEM_SCROLLTO_MIDDLE:
+ y = y - (oh / 2) + (GL_IT(it)->h / 2);
+ break;
+// tizen_feature
+ case ELM_GENLIST_ITEM_SCROLLTO_BOTTOM:
+ y = y - oh + GL_IT(it)->h;
+ break;
+///
+ default:
+ break;
+ }
+ if (psd->wsd->bring_in)
+ {
+ if (y != psd->wsd->pan_y)
+ elm_interface_scrollable_region_bring_in(psd->wsd->obj, x, y, w, h);
+ else
+ psd->wsd->adjusted_item = NULL;
+ }
+ else
+ {
+ if (psd->wsd->aligned_item && (psd->wsd->aligned_item != psd->wsd->adjusted_item))
+ {
+ edje_object_signal_emit(wd->resize_obj, SIGNAL_FOCUS_BG_HIDE, "elm");
+ edje_object_signal_emit(VIEW(psd->wsd->aligned_item), SIGNAL_ITEM_UNHIGHLIGHTED, "elm");
+ }
+ psd->wsd->aligned_item = NULL;
+ psd->wsd->unhighlight_skip = EINA_TRUE;
+
+ elm_interface_scrollable_content_region_show(WIDGET(it), x, y, ow, oh);
+
+ psd->wsd->unhighlight_skip = EINA_FALSE;
+ }
+ _changed(psd->wsd->pan_obj);
+ }
+
// Belows are tweaks for performance
// Block is not needed anymore because of below algorithm..
// later, we should remove dirty block algorithm
if (psd->wsd->comp_y)
{
+ // TIZEN_ONLY(20161230): Optimization for application launch on item show scenario
+ if (psd->wsd->aligned_item)
+ {
+ evas_object_smart_callback_call(WIDGET(psd->wsd->aligned_item), SIG_ALIGNED_ITEM_DETECTED, NULL);
+ edje_object_signal_emit(VIEW(psd->wsd->aligned_item), SIGNAL_ITEM_UNHIGHLIGHTED, "elm");
+ psd->wsd->aligned_item = NULL;
+ _changed(psd->wsd->pan_obj);
+ }
+ //
psd->wsd->unhighlight_skip = EINA_TRUE;
elm_interface_scrollable_content_region_show((psd->wsd)->obj, psd->wsd->pan_x,
psd->wsd->pan_y + psd->wsd->comp_y, ow, oh);
}
psd->wsd->expanded_item = NULL;
}
- if (psd->wsd->show_item &&
- !psd->wsd->show_item->item->queued &&
- psd->wsd->show_item->item->calc_done &&
- psd->wsd->show_item->item->block->calc_done &&
- psd->wsd->calc_done)
- {
- Evas_Coord x, y, w, h;
- Elm_Gen_Item *it = psd->wsd->show_item;
- psd->wsd->show_item = NULL;
- x = it->x + GL_IT(it)->block->x + psd->wsd->pan_x;
- y = it->y + GL_IT(it)->block->y;
- w = ow;
- h = oh;
-
- switch (psd->wsd->scroll_to_type)
- {
- case ELM_GENLIST_ITEM_SCROLLTO_IN:
- h = GL_IT(it)->h;
- break;
-
- case ELM_GENLIST_ITEM_SCROLLTO_MIDDLE:
- y = y - (oh / 2) + (GL_IT(it)->h / 2);
- break;
-// tizen_feature
- case ELM_GENLIST_ITEM_SCROLLTO_BOTTOM:
- y = y - oh + GL_IT(it)->h;
- break;
-///
- default:
- break;
- }
- if (psd->wsd->bring_in)
- elm_interface_scrollable_region_bring_in(WIDGET(it), x, y, w, h);
- else
- {
- if (psd->wsd->aligned_item && (psd->wsd->aligned_item != psd->wsd->adjusted_item))
- edje_object_signal_emit(VIEW(psd->wsd->aligned_item), SIGNAL_ITEM_UNHIGHLIGHTED, "elm");
- edje_object_signal_emit(wd->resize_obj, SIGNAL_FOCUS_BG_HIDE, "elm");
- psd->wsd->aligned_item = NULL;
- psd->wsd->unhighlight_skip = EINA_TRUE;
- elm_interface_scrollable_content_region_show(WIDGET(it), x, y, ow, oh);
- psd->wsd->unhighlight_skip = EINA_FALSE;
- }
-
- _changed(psd->wsd->pan_obj);
- }
#ifdef GENLIST_FX_SUPPORT
if (psd->wsd->add_fx.anim)
{
_queue_idle_enter(void *data)
{
Elm_Genlist_Data *sd = data;
- Evas_Coord vw = 0;
+ Evas_Coord vw = 0, vh = 0;
int n;
double ft, t0;
GL_IT(it)->resized = EINA_FALSE;
if (!_item_process(sd, it)) continue;
t = ecore_time_get();
+ // TIZEN_ONLY(20161230): Optimization for application launch
+ sd->processed_sizes += GL_IT(it)->minh;
+ Item_Block *itb = (Item_Block*) sd->blocks;
/* same as eina_inlist_count > 1 */
- if (sd->blocks && sd->blocks->next)
+ if ((sd->blocks && sd->blocks->next) || (sd->processed_sizes > vh) ||
+ (itb->minh > vh))
+ //
{
if ((t - t0) > ft) break;
}
{
if (eo_prev == elm_genlist_first_item_get(itb->sd->obj))
{
+ if (GL_IT(prev)->block && GL_IT(prev)->block != itb)
+ {
+ int diff = GL_IT(prev)->minh - first_item_height;
+ GL_IT(prev)->block->minh -= diff;
+ if (itb) itb->y -= diff;
+ }
GL_IT(prev)->h = GL_IT(prev)->minh = first_item_height;
break;
}