From 0c13ec5ceda7955baaabeee5eb0cdce5d03204b6 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Fri, 7 Jun 2013 17:17:30 +0900 Subject: [PATCH] part of the entry magnifier feature set from thiep. still more to go. --- legacy/elementary/ChangeLog | 4 + legacy/elementary/NEWS | 1 + legacy/elementary/config/default/base.src | 2 + legacy/elementary/config/mobile/base.src | 2 + legacy/elementary/config/standard/base.src | 2 + legacy/elementary/data/themes/Makefile.am | 2 + .../data/themes/images/magnifier_bg.png | Bin 0 -> 9144 bytes .../data/themes/images/magnifier_line.png | Bin 0 -> 5223 bytes .../elementary/data/themes/widgets/entry.edc | 82 ++++++++++ legacy/elementary/src/lib/elm_config.c | 32 ++++ legacy/elementary/src/lib/elm_entry.c | 146 +++++++++++++++++- legacy/elementary/src/lib/elm_priv.h | 2 + legacy/elementary/src/lib/elm_widget_entry.h | 4 + 13 files changed, 272 insertions(+), 7 deletions(-) create mode 100644 legacy/elementary/data/themes/images/magnifier_bg.png create mode 100644 legacy/elementary/data/themes/images/magnifier_line.png diff --git a/legacy/elementary/ChangeLog b/legacy/elementary/ChangeLog index c118914331..b123bc8fd1 100644 --- a/legacy/elementary/ChangeLog +++ b/legacy/elementary/ChangeLog @@ -1394,3 +1394,7 @@ 2013-06-06 Ryuan Choi (ryuan) * Up/down step of hour decimal of elm_clock is changed to 12 not to touch hour unit at editing mode. + +2013-06-07 Thiep Ha + + * Add magnifier to entry. diff --git a/legacy/elementary/NEWS b/legacy/elementary/NEWS index 369b44997e..4757161040 100644 --- a/legacy/elementary/NEWS +++ b/legacy/elementary/NEWS @@ -72,6 +72,7 @@ Additions: * Add support elm_object_item_signal_emit() for elm_list. * Add ELM_INPUT_PANEL_LAYOUT_DATETIME. * Add elm_config_glayer_long_tap_start_timeout_set/get, elm_config_glayer_double_tap_timeout_set/get + * Add magnifier to entry. Improvements: diff --git a/legacy/elementary/config/default/base.src b/legacy/elementary/config/default/base.src index 592280e632..445a3cd09d 100644 --- a/legacy/elementary/config/default/base.src +++ b/legacy/elementary/config/default/base.src @@ -77,6 +77,8 @@ group "Elm_Config" struct { value "auto_dump_withdrawn" uchar: 0; value "auto_throttle" uchar: 0; value "auto_throttle_amount" double: 0.1; + value "magnifier_enable" uchar: 1; + value "magnifier_scale" double: 1.5; group "color_palette" list { group "Elm_Custom_Palette" struct { value "palette_name" string: "default"; diff --git a/legacy/elementary/config/mobile/base.src b/legacy/elementary/config/mobile/base.src index d29bfcebe3..a3453cec6c 100644 --- a/legacy/elementary/config/mobile/base.src +++ b/legacy/elementary/config/mobile/base.src @@ -81,6 +81,8 @@ group "Elm_Config" struct { value "indicator_service_90" string: "elm_indicator_landscape"; value "indicator_service_180" string: "elm_indicator_portrait"; value "indicator_service_270" string: "elm_indicator_landscape"; + value "magnifier_enable" uchar: 1; + value "magnifier_scale" double: 1.5; group "color_palette" list { group "Elm_Custom_Palette" struct { value "palette_name" string: "default"; diff --git a/legacy/elementary/config/standard/base.src b/legacy/elementary/config/standard/base.src index 5d86646d8a..e159689897 100644 --- a/legacy/elementary/config/standard/base.src +++ b/legacy/elementary/config/standard/base.src @@ -77,6 +77,8 @@ group "Elm_Config" struct { value "auto_dump_withdrawn" uchar: 1; value "auto_throttle" uchar: 0; value "auto_throttle_amount" double: 0.0333333333; + value "magnifier_enable" uchar: 0; + value "magnifier_scale" double: 1.5; group "color_palette" list { group "Elm_Custom_Palette" struct { value "palette_name" string: "default"; diff --git a/legacy/elementary/data/themes/Makefile.am b/legacy/elementary/data/themes/Makefile.am index 5575508aaa..09166902f6 100644 --- a/legacy/elementary/data/themes/Makefile.am +++ b/legacy/elementary/data/themes/Makefile.am @@ -174,6 +174,8 @@ images/cur_shine.png \ images/cur_glow.png \ images/handler_start.png \ images/handler_end.png \ +images/magnifier_bg.png \ +images/magnifier_line.png \ images/bubble.png \ images/bubble_3.png \ images/bubble_shine3.png \ diff --git a/legacy/elementary/data/themes/images/magnifier_bg.png b/legacy/elementary/data/themes/images/magnifier_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..286e37e6644547d0c057bfb1870aa0d4f2bba463 GIT binary patch literal 9144 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⁣xZW1U#aA3f(kiiPUW|&tOzW%IT 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 literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/widgets/entry.edc b/legacy/elementary/data/themes/widgets/entry.edc index ff9adf24d3..00fcc96172 100644 --- a/legacy/elementary/data/themes/widgets/entry.edc +++ b/legacy/elementary/data/themes/widgets/entry.edc @@ -1541,3 +1541,85 @@ group { name: "elm/entry/handler/end/default"; } } } + +group { name: "elm/entry/magnifier/default"; + images { + image: "magnifier_bg.png" COMP; + image: "magnifier_line.png" COMP; + } + parts { + part { name: "bg"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + min: 100 55; + fixed: 1 1; + align: 0 0; + image { + normal: "magnifier_bg.png"; + } + image.middle: SOLID; + fill.smooth: 1; + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { name: "swallow"; + type: SWALLOW; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + rel1 { + to: "bg"; + offset: 4 4; + } + rel2 { + to: "bg"; + offset: -8 -8; + } + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { name: "outline"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + fixed: 1 1; + image { + normal: "magnifier_line.png"; + } + image.middle: SOLID; + fill.smooth: 1; + rel1.to: "bg"; + rel2.to: "bg"; + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + } + programs { + program { name: "magnifier_show"; + signal: "elm,action,show,magnifier"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "bg"; + target: "swallow"; + target: "outline"; + } + program { name: "magnifier_hide"; + signal: "elm,action,hide,magnifier"; + source: "elm"; + action: STATE_SET "hidden" 0.0; + target: "bg"; + target: "swallow"; + target: "outline"; + } + } +} diff --git a/legacy/elementary/src/lib/elm_config.c b/legacy/elementary/src/lib/elm_config.c index c356b125f2..53bab983f9 100644 --- a/legacy/elementary/src/lib/elm_config.c +++ b/legacy/elementary/src/lib/elm_config.c @@ -436,6 +436,8 @@ _desc_init(void) ELM_CONFIG_VAL(D, T, indicator_service_270, T_STRING); ELM_CONFIG_VAL(D, T, disable_external_menu, T_UCHAR); ELM_CONFIG_VAL(D, T, clouseau_enable, T_UCHAR); + ELM_CONFIG_VAL(D, T, magnifier_enable, T_UCHAR); + ELM_CONFIG_VAL(D, T, magnifier_scale, T_DOUBLE); #undef T #undef D #undef T_INT @@ -1176,6 +1178,8 @@ _config_load(void) _elm_config->indicator_service_180 = eina_stringshare_add("elm_indicator_portrait"); _elm_config->indicator_service_270 = eina_stringshare_add("elm_indicator_landscape"); _elm_config->disable_external_menu = EINA_FALSE; + _elm_config->magnifier_enable = EINA_TRUE; + _elm_config->magnifier_scale = 1.5; } static const char * @@ -1725,6 +1729,10 @@ _env_get(void) s = getenv("ELM_CLOUSEAU"); if (s) _elm_config->clouseau_enable = atoi(s); + s = getenv("ELM_MAGNIFIER_ENABLE"); + if (s) _elm_config->magnifier_enable = !!atoi(s); + s = getenv("ELM_MAGNIFIER_SCALE"); + if (s) _elm_config->magnifier_scale = _elm_atof(s); } EAPI Eina_Bool @@ -2359,6 +2367,30 @@ elm_config_glayer_double_tap_timeout_set(double double_tap_timeout) _elm_config->glayer_double_tap_timeout = double_tap_timeout; } +EAPI Eina_Bool +elm_config_magnifier_enable_get(void) +{ + return _elm_config->magnifier_enable; +} + +EAPI void +elm_config_magnifier_enable_set(Eina_Bool enable) +{ + _elm_config->magnifier_enable = !!enable; +} + +EAPI double +elm_config_magnifier_scale_get(void) +{ + return _elm_config->magnifier_scale; +} + +EAPI void +elm_config_magnifier_scale_set(double scale) +{ + _elm_config->magnifier_scale = scale; +} + EAPI void elm_config_all_flush(void) { diff --git a/legacy/elementary/src/lib/elm_entry.c b/legacy/elementary/src/lib/elm_entry.c index 4163d2934b..8008100307 100644 --- a/legacy/elementary/src/lib/elm_entry.c +++ b/legacy/elementary/src/lib/elm_entry.c @@ -1340,14 +1340,124 @@ _menu_call(Evas_Object *obj) } } +static void +_magnifier_create(void *data) +{ + ELM_ENTRY_DATA_GET(data, sd); + + double scale = _elm_config->magnifier_scale; + Evas_Coord w, h, mw, mh; + + if (sd->mgf_proxy) + { + evas_object_image_source_unset(sd->mgf_proxy); + evas_object_clip_unset(sd->mgf_proxy); + evas_object_del(sd->mgf_proxy); + } + if (sd->mgf_bg) evas_object_del(sd->mgf_bg); + if (sd->mgf_clip) evas_object_del(sd->mgf_clip); + + sd->mgf_bg = edje_object_add(evas_object_evas_get(data)); + _elm_theme_object_set(data, sd->mgf_bg, "entry", "magnifier", "default"); + evas_object_show(sd->mgf_bg); + + sd->mgf_clip = evas_object_rectangle_add(evas_object_evas_get(data)); + evas_object_color_set(sd->mgf_clip, 255, 255, 255, 255); + edje_object_part_swallow(sd->mgf_bg, "swallow", sd->mgf_clip); + + if (sd->scroll) + { + sd->mgf_proxy = evas_object_image_add(evas_object_evas_get(sd->scr_edje)); + evas_object_image_source_set(sd->mgf_proxy, sd->scr_edje); + evas_object_geometry_get(sd->scr_edje, NULL, NULL, &w, &h); + } + else + { + sd->mgf_proxy = evas_object_image_add(evas_object_evas_get(data)); + evas_object_image_source_set(sd->mgf_proxy, data); + evas_object_geometry_get(data, NULL, NULL, &w, &h); + } + + mw = (Evas_Coord)(scale * (float) w); + mh = (Evas_Coord)(scale * (float) h); + if ((mw <= 0) || (mh <= 0)) + return; + + evas_object_resize(sd->mgf_proxy, mw, mh); + evas_object_image_fill_set(sd->mgf_proxy, 0, 0, mw, mh); + evas_object_color_set(sd->mgf_proxy, 255, 255, 255, 255); + evas_object_pass_events_set(sd->mgf_proxy, EINA_TRUE); + evas_object_show(sd->mgf_proxy); + evas_object_clip_set(sd->mgf_proxy, sd->mgf_clip); + + evas_object_layer_set(sd->mgf_bg, EVAS_LAYER_MAX); + evas_object_layer_set(sd->mgf_proxy, EVAS_LAYER_MAX); +} + +static void +_magnifier_move(void *data, Evas_Coord px, Evas_Coord py) +{ + ELM_ENTRY_DATA_GET(data, sd); + + Evas_Coord x, y, w, h; + Evas_Coord ex, ey; + Evas_Coord sx, sy; + const Evas_Object *obj_bg; + double scale = _elm_config->magnifier_scale; + + obj_bg = edje_object_part_object_get(sd->mgf_bg, "bg"); + evas_object_geometry_get(obj_bg, NULL, NULL, &w, &h); + evas_object_move(sd->mgf_bg, px - w/2, py - h); + + obj_bg = edje_object_part_object_get(sd->mgf_bg, "swallow"); + evas_object_geometry_get(obj_bg, &x, &y, &w, &h); + sx = px - (x + w/2); + sy = py - (y + h/2); + + if (sd->scroll) + { + evas_object_geometry_get(sd->scr_edje, &ex, &ey, NULL, NULL); + } + else + { + evas_object_geometry_get(data, &ex, &ey, NULL, NULL); + } + evas_object_move(sd->mgf_proxy, ex * scale - (px * scale - px) - sx, + ey * scale - (py * scale - py) - sy); +} + +static void +_magnifier_hide(void *data) +{ + ELM_ENTRY_DATA_GET(data, sd); + edje_object_signal_emit(sd->mgf_bg, "elm,action,hide,magnifier", "elm"); + elm_widget_scroll_freeze_pop(data); +} + +static void +_magnifier_show(void *data) +{ + ELM_ENTRY_DATA_GET(data, sd); + edje_object_signal_emit(sd->mgf_bg, "elm,action,show,magnifier", "elm"); + elm_widget_scroll_freeze_push(data); +} + static Eina_Bool _long_press_cb(void *data) { ELM_ENTRY_DATA_GET(data, sd); - if (!_elm_config->desktop_entry) + if (_elm_config->magnifier_enable) + { + _magnifier_create(data); + _magnifier_show(data); + _magnifier_move(data, sd->downx, sd->downy); + } + else if (!_elm_config->desktop_entry) _menu_call(data); + sd->long_pressed = EINA_TRUE; + sd->longpress_timer = NULL; evas_object_smart_callback_call(data, SIG_LONGPRESSED, NULL); @@ -1380,12 +1490,15 @@ _mouse_down_cb(void *data, if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; sd->downx = ev->canvas.x; sd->downy = ev->canvas.y; - if (ev->button == 1) - { - if (sd->longpress_timer) ecore_timer_del(sd->longpress_timer); - sd->longpress_timer = ecore_timer_add - (_elm_config->longpress_timeout, _long_press_cb, data); - } + sd->long_pressed = EINA_FALSE; + + if (ev->button == 1) + { + ELM_SAFE_FREE(sd->longpress_timer, ecore_timer_del); + sd->longpress_timer = ecore_timer_add + (_elm_config->longpress_timeout, _long_press_cb, data); + sd->long_pressed = EINA_FALSE; + } else if (ev->button == 3) { if (_elm_config->desktop_entry) @@ -1407,6 +1520,11 @@ _mouse_up_cb(void *data, if (ev->button == 1) { ELM_SAFE_FREE(sd->longpress_timer, ecore_timer_del); + if ((sd->long_pressed) && (_elm_config->magnifier_enable)) + { + _magnifier_hide(data); + _menu_call(data); + } } else if ((ev->button == 3) && (!_elm_config->desktop_entry)) { @@ -1426,6 +1544,11 @@ _mouse_move_cb(void *data, ELM_ENTRY_DATA_GET(data, sd); if (sd->disabled) return; + if (ev->buttons == 1) + { + if ((sd->long_pressed) && (_elm_config->magnifier_enable)) + _magnifier_move(data, ev->cur.canvas.x, ev->cur.canvas.y); + } if (!sd->sel_mode) { if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) @@ -2973,6 +3096,15 @@ _elm_entry_smart_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED) if ((sd->api) && (sd->api->obj_unhook)) sd->api->obj_unhook(obj); // module - unhook + if (sd->mgf_proxy) + { + evas_object_image_source_unset(sd->mgf_proxy); + evas_object_clip_unset(sd->mgf_proxy); + evas_object_del(sd->mgf_proxy); + } + if (sd->mgf_bg) evas_object_del(sd->mgf_bg); + if (sd->mgf_clip) evas_object_del(sd->mgf_clip); + entries = eina_list_remove(entries, obj); #ifdef HAVE_ELEMENTARY_X if (sd->sel_notify_handler) diff --git a/legacy/elementary/src/lib/elm_priv.h b/legacy/elementary/src/lib/elm_priv.h index 4da2eed0a2..6100b6f039 100644 --- a/legacy/elementary/src/lib/elm_priv.h +++ b/legacy/elementary/src/lib/elm_priv.h @@ -243,6 +243,8 @@ struct _Elm_Config unsigned char selection_clear_enable; unsigned char disable_external_menu; unsigned char clouseau_enable; + unsigned char magnifier_enable; + double magnifier_scale; /* Not part of the EET file */ Eina_Bool is_mirrored : 1; diff --git a/legacy/elementary/src/lib/elm_widget_entry.h b/legacy/elementary/src/lib/elm_widget_entry.h index ddb0e543b4..bfa8918d28 100644 --- a/legacy/elementary/src/lib/elm_widget_entry.h +++ b/legacy/elementary/src/lib/elm_widget_entry.h @@ -26,6 +26,9 @@ struct _Elm_Entry_Smart_Data Evas_Object *hit_rect, *entry_edje, *scr_edje; Evas_Object *hoversel; + Evas_Object *mgf_bg; + Evas_Object *mgf_clip; + Evas_Object *mgf_proxy; Ecore_Job *deferred_recalc_job; Ecore_Event_Handler *sel_notify_handler; Ecore_Event_Handler *sel_clear_handler; @@ -76,6 +79,7 @@ struct _Elm_Entry_Smart_Data Eina_Bool have_selection : 1; Eina_Bool deferred_cur : 1; Eina_Bool context_menu : 1; + Eina_Bool long_pressed : 1; Eina_Bool cur_changed : 1; Eina_Bool single_line : 1; Eina_Bool can_write : 1;