gengrid: add scrollto BOTTOM alignment type.

Summary:
Add new scrollto type allowing to align gengrid item to bottom of viewport.
Feature compleates and closes list of all alignment types for gengrid items.

Reviewers: seoz, cedric, SanghyeonLee

Subscribers: seoz

Differential Revision: https://phab.enlightenment.org/D3452

Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
This commit is contained in:
Lukasz Stanislawski 2016-01-04 14:06:21 -08:00 committed by Cedric BAIL
parent 0a7d24dab1
commit eac2c2e512
3 changed files with 65 additions and 110 deletions

View File

@ -36,8 +36,8 @@ typedef struct _api_data api_data;
struct _Show_Data
{
int winmode;
int scrollto;
Evas_Object *grid;
};
typedef struct _Show_Data Show_Data;
@ -1128,7 +1128,11 @@ static void
_rd1_changed_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
{
Show_Data *sd = data;
sd->winmode = elm_radio_state_value_get(obj);
int winmode = elm_radio_state_value_get(obj);
if (winmode == 0)
elm_gengrid_horizontal_set(sd->grid, EINA_TRUE);
else if (winmode == 1)
elm_gengrid_horizontal_set(sd->grid, EINA_FALSE);
}
static void
@ -1141,119 +1145,19 @@ _rd2_changed_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
static void
_bring_in_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Evas_Object *win, *grid;
static Item_Data ti[5000];
int i, n;
char buf[PATH_MAX];
if (!data) return;
Show_Data *sd = data;
if (sd->winmode == 0)
win = elm_win_util_standard_add("horz bring_in", "Horz Bring_in");
else
win = elm_win_util_standard_add("vertical bring_in", "Vertical Bring_in");
elm_win_autodel_set(win, EINA_TRUE);
grid = elm_gengrid_add(win);
elm_gengrid_item_size_set(grid, 150, 150);
elm_gengrid_group_item_size_set(grid, 31, 31);
if (sd->winmode == 0)
elm_gengrid_horizontal_set(grid, EINA_TRUE);
else if (sd->winmode == 1)
elm_gengrid_horizontal_set(grid, EINA_FALSE);
evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_win_resize_object_add(win, grid);
elm_gengrid_align_set(grid, 0.1, 0.1);
gic = elm_gengrid_item_class_new();
gic->item_style = "default";
gic->func.text_get = grid_text_get;
gic->func.content_get = grid_content_get;
gic->func.state_get = grid_state_get;
gic->func.del = NULL;
n = 0;
for (i = 0; i < 5000; i++)
{
snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[n]);
n = (n + 1) % 9;
ti[i].mode = i;
ti[i].path = eina_stringshare_add(buf);
ti[i].item = elm_gengrid_item_append(grid, gic, &(ti[i]), grid_sel, NULL);
if (i == 1430)
elm_gengrid_item_selected_set(ti[i].item, EINA_TRUE);
}
elm_gengrid_item_class_free(gic);
elm_gengrid_item_bring_in(ti[1430].item, sd->scrollto);
evas_object_show(grid);
if (sd->winmode == 0)
evas_object_resize(win, 600, 200);
if (sd->winmode == 1)
evas_object_resize(win, 600, 400);
evas_object_show(win);
Elm_Object_Item *item = elm_gengrid_selected_item_get(sd->grid);
elm_gengrid_item_bring_in(item, sd->scrollto);
elm_gengrid_item_selected_set(item, EINA_TRUE);
}
static void
_show_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Evas_Object *win, *grid;
static Item_Data ti[10000];
int i, n;
char buf[PATH_MAX];
if (!data) return;
Show_Data *sd = data;
if (sd->winmode == 0)
win = elm_win_util_standard_add("horz show", "Horz Show");
else
win = elm_win_util_standard_add("vertical show", "Vertical Show");
elm_win_autodel_set(win, EINA_TRUE);
grid = elm_gengrid_add(win);
elm_gengrid_item_size_set(grid, ELM_SCALE_SIZE(150), ELM_SCALE_SIZE(150));
elm_gengrid_group_item_size_set(grid, ELM_SCALE_SIZE(31), ELM_SCALE_SIZE(31));
if (sd->winmode == 0)
elm_gengrid_horizontal_set(grid, EINA_TRUE);
else if (sd->winmode == 1)
elm_gengrid_horizontal_set(grid, EINA_FALSE);
evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_win_resize_object_add(win, grid);
elm_gengrid_align_set(grid, 0.1, 0.1);
gic = elm_gengrid_item_class_new();
gic->item_style = "default";
gic->func.text_get = grid_text_get;
gic->func.content_get = grid_content_get;
gic->func.state_get = grid_state_get;
gic->func.del = NULL;
n = 0;
for (i = 0; i < 10000; i++)
{
snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[n]);
n = (n + 1) % 9;
ti[i].mode = i;
ti[i].path = eina_stringshare_add(buf);
ti[i].item = elm_gengrid_item_append(grid, gic, &(ti[i]), grid_sel, NULL);
if (i == 2579)
elm_gengrid_item_selected_set(ti[i].item, EINA_TRUE);
}
elm_gengrid_item_class_free(gic);
evas_object_show(grid);
elm_gengrid_item_show(ti[2579].item, sd->scrollto);
if (sd->winmode == 0)
evas_object_resize(win, 600, 200);
if (sd->winmode == 1)
evas_object_resize(win, 600, 600);
evas_object_show(win);
Elm_Object_Item *item = elm_gengrid_selected_item_get(sd->grid);
elm_gengrid_item_show(item, sd->scrollto);
elm_gengrid_item_selected_set(item, EINA_TRUE);
}
static Evas_Object *
@ -1345,14 +1249,26 @@ _scrollto_mode_frame_new(Evas_Object *win, void *data)
evas_object_show(rd);
elm_box_pack_end(bx, rd);
rd = elm_radio_add(win);
evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_radio_state_value_set(rd, 8);
elm_object_text_set(rd, "SCROLLTO_BOTTOM");
elm_radio_group_add(rd, rdg);
evas_object_smart_callback_add(rd, "changed", _rd2_changed_cb, sd);
evas_object_show(rd);
elm_box_pack_end(bx, rd);
return fr;
}
void
test_gengrid4(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Evas_Object *win, *bt, *bx, *bx2, *fr;
Evas_Object *win, *bt, *bx, *bx2, *fr, *grid;
Show_Data *sd = calloc(1, sizeof(Show_Data));
char buf[PATH_MAX];
int i, n;
static Item_Data ti[10000];
win = elm_win_util_standard_add("gengrid-show-bringin", "GenGrid Show/Bring_in");
elm_win_autodel_set(win, EINA_TRUE);
@ -1363,6 +1279,38 @@ test_gengrid4(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_
elm_win_resize_object_add(win, bx);
evas_object_show(bx);
grid = elm_gengrid_add(win);
elm_gengrid_item_size_set(grid, ELM_SCALE_SIZE(150), ELM_SCALE_SIZE(150));
elm_gengrid_group_item_size_set(grid, ELM_SCALE_SIZE(31), ELM_SCALE_SIZE(31));
elm_gengrid_align_set(grid, 0.1, 0.1);
elm_gengrid_horizontal_set(grid, EINA_TRUE);
gic = elm_gengrid_item_class_new();
gic->item_style = "default";
gic->func.text_get = grid_text_get;
gic->func.content_get = grid_content_get;
gic->func.state_get = grid_state_get;
gic->func.del = NULL;
for (i = 0, n = 0; i < 10000; i++)
{
snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[n]);
n = (n + 1) % 9;
ti[i].mode = i;
ti[i].path = eina_stringshare_add(buf);
ti[i].item = elm_gengrid_item_append(grid, gic, &(ti[i]), grid_sel, NULL);
if (i == 2579)
elm_gengrid_item_selected_set(ti[i].item, EINA_TRUE);
}
elm_gengrid_item_class_free(gic);
elm_gengrid_item_show(ti[2579].item, sd->scrollto);
evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_min_set(grid, 600, 400);
evas_object_show(grid);
sd->grid = grid;
elm_box_pack_end(bx, grid);
bx2 = elm_box_add(bx);
elm_box_horizontal_set(bx2, EINA_TRUE);
elm_box_pack_end(bx, bx2);

View File

@ -400,6 +400,12 @@ _item_show_region(void *data)
it_xpos = it_xpos - ((vw - sd->item_width) / 2);
it_ypos = it_ypos - ((vh - sd->item_height) / 2);
break;
case ELM_GENGRID_ITEM_SCROLLTO_BOTTOM:
eo_do(WIDGET(it), elm_interface_scrollable_content_viewport_geometry_get
(NULL, NULL, &vw, &vh));
it_xpos = it_xpos - vw + sd->item_width;
it_ypos = it_ypos - vh + sd->item_height;
break;
default:
vw = sd->item_width;
vh = sd->item_height;

View File

@ -7,7 +7,8 @@ enum Elm.Gengrid.Item.Scrollto_Type
none = 0, [[No scrollto.]]
in = (1 << 0), [[To the nearest viewport.]]
top = (1 << 1), [[To the top of viewport.]]
middle = (1 << 2) [[To the middle of viewport.]]
middle = (1 << 2), [[To the middle of viewport.]]
bottom = (1 << 3) [[To the bottom of viewport.]]
}
enum Elm.Gengrid.Item.Field_Type