diff --git a/src/bin/elementary/test.c b/src/bin/elementary/test.c index 114cd7927a..7484a2545d 100644 --- a/src/bin/elementary/test.c +++ b/src/bin/elementary/test.c @@ -285,6 +285,7 @@ void test_dayselector(void *data, Evas_Object *obj, void *event_info); void test_image(void *data, Evas_Object *obj, void *event_info); void test_image_scale_type(void *data, Evas_Object *obj, void *event_info); void test_image_swallow_align(void *data, Evas_Object *obj, void *event_info); +void test_image_prescale(void *data, Evas_Object *obj, void *event_info); void test_remote_image(void *data, Evas_Object *obj, void *event_info); void test_click_image(void *data, Evas_Object *obj, void *event_info); void test_load_image(void *data, Evas_Object *obj, void *event_info); @@ -773,6 +774,7 @@ add_tests: ADD_TEST(NULL, "Images", "Image Remote", test_remote_image); ADD_TEST(NULL, "Images", "Image Click", test_click_image); ADD_TEST(NULL, "Images", "Image Async Load", test_load_image); + ADD_TEST(NULL, "Images", "Image Prescale", test_image_prescale); ADD_TEST(NULL, "Images", "Slideshow", test_slideshow); ADD_TEST(NULL, "Images", "Video", test_video); diff --git a/src/bin/elementary/test_image.c b/src/bin/elementary/test_image.c index 08232dff20..0dbdbef0b0 100644 --- a/src/bin/elementary/test_image.c +++ b/src/bin/elementary/test_image.c @@ -658,3 +658,78 @@ test_load_image(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *eve evas_object_resize(win, 320, 480); evas_object_show(win); } + +static void +_cb_prescale_radio_changed(void *data, Evas_Object *obj, void *event EINA_UNUSED) +{ + Evas_Object *o_bg = data; + int size; + size = elm_radio_value_get((Evas_Object *)obj); + elm_image_prescale_set(o_bg, size); +} + +void +test_image_prescale(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + Evas_Object *win, *im; + Evas_Object *box, *hbox; + Evas_Object *rd, *rdg; + char buf[PATH_MAX]; + + + win = elm_win_util_standard_add("image-prescale", "Image Prescale Test"); + elm_win_autodel_set(win, EINA_TRUE); + + box = elm_box_add(win); + evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, box); + evas_object_show(box); + + im = elm_image_add(win); + snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", elm_app_data_dir_get()); + elm_image_file_set(im, buf, NULL); + evas_object_size_hint_weight_set(im, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(im, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(box, im); + evas_object_show(im); + + hbox = elm_box_add(win); + elm_box_horizontal_set(hbox, EINA_TRUE); + evas_object_size_hint_weight_set(hbox, EVAS_HINT_EXPAND, EVAS_HINT_FILL); + evas_object_size_hint_align_set(hbox, EVAS_HINT_FILL, EVAS_HINT_FILL); + + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, 50); + elm_object_text_set(rd, "50"); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_FILL); + evas_object_smart_callback_add(rd, "changed", _cb_prescale_radio_changed, im); + elm_box_pack_end(hbox, rd); + evas_object_show(rd); + rdg = rd; + + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, 100); + elm_radio_group_add(rd, rdg); + elm_object_text_set(rd, "100"); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_FILL); + evas_object_smart_callback_add(rd, "changed", _cb_prescale_radio_changed, im); + elm_box_pack_end(hbox, rd); + evas_object_show(rd); + + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, 200); + elm_radio_group_add(rd, rdg); + elm_object_text_set(rd, "200"); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_FILL); + evas_object_smart_callback_add(rd, "changed", _cb_prescale_radio_changed, im); + elm_box_pack_end(hbox, rd); + evas_object_show(rd); + + elm_radio_value_set(rdg, 200); + + elm_box_pack_end(box, hbox); + evas_object_show(hbox); + + evas_object_resize(win, 320, 320); + evas_object_show(win); +} diff --git a/src/lib/elementary/efl_ui_image.c b/src/lib/elementary/efl_ui_image.c index 696413df8e..35ee4e7c37 100644 --- a/src/lib/elementary/efl_ui_image.c +++ b/src/lib/elementary/efl_ui_image.c @@ -578,7 +578,7 @@ _efl_ui_image_efl_canvas_group_group_add(Eo *obj, Efl_Ui_Image_Data *priv) priv->smooth = EINA_TRUE; priv->fill_inside = EINA_TRUE; priv->aspect_fixed = EINA_TRUE; - priv->load_size = 0; + priv->load_size = EINA_SIZE2D(0, 0); priv->scale = 1.0; priv->scale_up = EINA_TRUE; priv->scale_down = EINA_TRUE; @@ -809,6 +809,16 @@ _efl_ui_image_sizing_eval(Evas_Object *obj) evas_object_size_hint_max_set(obj, maxw, maxh); } +static void +_efl_ui_image_load_size_set_internal(Evas_Object *obj, Efl_Ui_Image_Data *sd) +{ + Eina_Size2D sz = sd->load_size; + + if ((sz.w <= 0) || (sz.h <= 0)) + sz = efl_gfx_view_size_get(obj); + evas_object_image_load_size_set(sd->img, sz.w, sz.h); +} + static void _efl_ui_image_file_set_do(Evas_Object *obj) { @@ -831,13 +841,7 @@ _efl_ui_image_file_set_do(Evas_Object *obj) sd->edje = EINA_FALSE; - if (sd->load_size > 0) - evas_object_image_load_size_set(sd->img, sd->load_size, sd->load_size); - else - { - Eina_Size2D sz = efl_gfx_view_size_get(obj); - evas_object_image_load_size_set(sd->img, sz.w, sz.h); - } + _efl_ui_image_load_size_set_internal(obj, sd); } static void @@ -1283,30 +1287,27 @@ elm_image_prescale_set(Evas_Object *obj, } EOLIAN static void -_efl_ui_image_efl_image_load_load_size_set(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd, Eina_Size2D sz) +_efl_ui_image_efl_image_load_load_size_set(Eo *obj, Efl_Ui_Image_Data *sd, Eina_Size2D sz) { - // FIXME: This should handle both dimensions! - if (sz.w > sz.h) - sd->load_size = sz.w; - else - sd->load_size = sz.h; + sd->load_size = sz; + _efl_ui_image_load_size_set_internal(obj, sd); } EAPI int elm_image_prescale_get(const Evas_Object *obj) { Eina_Size2D sz; - EFL_UI_IMAGE_CHECK(obj) 0; sz = efl_image_load_size_get(obj); - return sz.w; + + return MAX(sz.w, sz.h); } EOLIAN static Eina_Size2D _efl_ui_image_efl_image_load_load_size_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd) { - return EINA_SIZE2D(sd->load_size, sd->load_size); + return sd->load_size; } EOLIAN static void diff --git a/src/lib/elementary/efl_ui_widget_image.h b/src/lib/elementary/efl_ui_widget_image.h index 88759c4a13..e5c45eb225 100644 --- a/src/lib/elementary/efl_ui_widget_image.h +++ b/src/lib/elementary/efl_ui_widget_image.h @@ -61,7 +61,7 @@ struct _Efl_Ui_Image_Data Evas_Coord img_x, img_y, img_w, img_h; - int load_size; + Eina_Size2D load_size; int frame_count; int cur_frame;