#include "e_client_intern.h"
#include "e_view_intern.h"
#include "e_view_client_intern.h"
+#include "e_view_rect.h"
+#include "e_utils.h"
#define E_MAGNIFIER_SMART_DATA_GET(obj, ptr) \
E_Magnifier_Smart_Data *ptr = evas_object_smart_data_get(obj);
struct wl_listener resize_listener;
};
-EVAS_SMART_SUBCLASS_NEW(E_MAGNIFIER_SMART_OBJ_TYPE, _e_magnifier,
- Evas_Smart_Class, Evas_Smart_Class,
- evas_object_smart_clipped_class_get, NULL);
+static Eina_Bool _e_magnifier_smart_client_cb_add(void *data, int type, void *event);
+static Eina_Bool _e_magnifier_smart_client_cb_remove(void *data, int type, void *event);
+static Eina_Bool _e_magnifier_smart_client_cb_stack(void *data, int type, void *event);
+static Eina_Bool _e_magnifier_smart_client_cb_show(void *data, int type, void *event);
+static Eina_Bool _e_magnifier_smart_client_cb_hide(void *data, int type, void *event);
+static Eina_Bool _e_magnifier_smart_client_cb_move(void *data, int type, void *event);
+static Eina_Bool _e_magnifier_smart_client_cb_resize(void *data, int type, void *event);
+static void _e_magnifier_smart_cb_hook_client_del(void *data, E_Client *ec);
+static Eina_Bool _e_magnifier_smart_cb_hook_effect_end(void *data, E_Client *ec);
+static void _e_magnifier_smart_cb_hook_client_reuse(void *data, E_Client *ec);
-
-static Eina_Bool _e_magnifier_smart_init(void);
-static void _e_magnifier_smart_add(Evas_Object *obj);
-static void _e_magnifier_smart_del(Evas_Object *obj);
static Eina_Bool _e_magnifier_proxy_ec_new(E_Client *ec);
static void _e_magnifier_proxy_ec_del(E_Client *ec);
static Eina_Bool _e_magnifier_proxy_ec_all_add(void);
static void _e_magnifier_owner_set(E_Client *ec);
static void _e_magnifier_owner_unset(E_Client *ec);
-static Evas_Object *_e_magnifier_mgr = NULL;
static E_Magnifier_Listener *_e_magnifier_listener = NULL;
-static Eina_Bool
-_e_magnifier_smart_init(void)
+typedef struct _E_Magnifier_Manager
{
- E_Zone *zone;
+ E_View_Tree tree;
+ E_View_Rect *base_rect;
+ E_View_Rect *clip_rect;
+
+ Eina_List *handlers;
+ Eina_List *hooks;
+ Eina_List *cp_hooks;
+ Eina_List *wl_hooks;
+ E_Desk *desk;
+ E_Client *owner;
- zone = e_zone_current_get();
- EINA_SAFETY_ON_NULL_RETURN_VAL(zone, EINA_FALSE);
+ int stand_alone_mode;
+ E_Magnifier_Zoom_Ratio ratio;
+ struct
+ {
+ struct
+ {
+ int x, y, w, h;
+ } user;
+ struct
+ {
+ int x, y, w, h;
+ } system;
+ } geom;
+ Eina_Bool enabled;
- _e_magnifier_mgr = evas_object_smart_add(e_comp_evas_get(), _e_magnifier_smart_class_new());
- E_MAGNIFIER_SMART_DATA_GET_OR_RETURN(_e_magnifier_mgr, sd) EINA_FALSE;
+ struct wl_listener show;
+} E_Magnifier_Manager;
- ELOGF("MAGNIFIER", "INIT Magnifier (%p)", NULL, _e_magnifier_mgr);
+static E_Magnifier_Manager *_e_magnifier_mgr = NULL;
- sd->ratio = E_MAGNIFIER_ZOOM_RATIO_150;
+static E_View_Tree *_e_magnifier_tree_get(E_Magnifier_Manager *emm)
+{
+ E_View_Tree *tree;
+ tree = &_e_magnifier_mgr->tree;
- sd->geom.system.x = 0;
- sd->geom.system.y = 0;
- sd->geom.system.w = 360;
- sd->geom.system.h = 360;
+ return tree;
+}
- evas_object_move(_e_magnifier_mgr, zone->x, zone->y);
- evas_object_resize(_e_magnifier_mgr, zone->w, zone->h);
+static void
+_clip_rect_geometry_set(E_Magnifier_Manager *emm, int x, int y, int w, int h)
+{
+ e_view_rect_size_set(emm->clip_rect, w, h);
+ e_view_position_set(e_view_rect_view_get(emm->clip_rect), x, y);
+}
- return EINA_TRUE;
+static E_Magnifier_Manager *
+_e_magnifier_manager_create(E_Zone *zone)
+{
+ E_Magnifier_Manager *emm = NULL;
+
+ emm = E_NEW(E_Magnifier_Manager, 1);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(emm, NULL);
+
+ ELOGF("MAGNIFIER", "===== START Create Magnifier Manager(%p)", NULL, emm);
+
+ emm->ratio = E_MAGNIFIER_ZOOM_RATIO_100;
+
+ emm->geom.system.x = 0;
+ emm->geom.system.y = 0;
+ emm->geom.system.w = 360;
+ emm->geom.system.h = 360;
+
+ E_View_Tree *layer_tree = e_canvas_layer_view_tree_get(e_comp_canvas_get(), E_CANVAS_LAYER_DESK_OBJECT_BELOW);
+ e_view_tree_init(&emm->tree, NULL, layer_tree);
+ e_view_show(e_view_tree_view_get(&emm->tree));
+
+ // for clipping
+ const int color[4] = {255, 255, 255, 255};
+ emm->clip_rect = e_view_rect_create(layer_tree, zone->w, zone->h, color);
+ e_view_show(e_view_rect_view_get(emm->clip_rect));
+
+ E_LIST_HANDLER_APPEND(emm->handlers, E_EVENT_CLIENT_ADD, _e_magnifier_smart_client_cb_add, emm);
+ E_LIST_HANDLER_APPEND(emm->handlers, E_EVENT_CLIENT_REMOVE, _e_magnifier_smart_client_cb_remove, emm);
+ E_LIST_HANDLER_APPEND(emm->handlers, E_EVENT_CLIENT_STACK, _e_magnifier_smart_client_cb_stack, emm);
+ E_LIST_HANDLER_APPEND(emm->handlers, E_EVENT_CLIENT_SHOW, _e_magnifier_smart_client_cb_show, emm);
+ E_LIST_HANDLER_APPEND(emm->handlers, E_EVENT_CLIENT_HIDE, _e_magnifier_smart_client_cb_hide, emm);
+ E_LIST_HANDLER_APPEND(emm->handlers, E_EVENT_CLIENT_MOVE, _e_magnifier_smart_client_cb_move, emm);
+ E_LIST_HANDLER_APPEND(emm->handlers, E_EVENT_CLIENT_RESIZE, _e_magnifier_smart_client_cb_resize, emm);
+
+ // e_client hooks
+ E_LIST_HOOK_APPEND(emm->hooks, E_CLIENT_HOOK_DEL, _e_magnifier_smart_cb_hook_client_del, emm);
+
+ // e_comp_object hooks
+ E_COMP_COMP_HOOK_APPEND(emm->cp_hooks, E_COMP_OBJECT_HOOK_EFFECT_END, _e_magnifier_smart_cb_hook_effect_end, emm);
+
+ // e_comp_wl hooks
+ E_COMP_WL_HOOK_APPEND(emm->wl_hooks, E_COMP_WL_HOOK_CLIENT_REUSE, _e_magnifier_smart_cb_hook_client_reuse, emm);
+
+
+ ELOGF("MAGNIFIER", "===== END Create Magnifier Manager(%p)", NULL, emm);
+
+ return emm;
+}
+
+static void
+_e_magnifier_manager_destroy(E_Magnifier_Manager *emm)
+{
+ if (!emm) return;
+
+ E_FREE_LIST(emm->handlers, ecore_event_handler_del);
+ E_FREE_LIST(emm->hooks, e_client_hook_del);
+ E_FREE_LIST(emm->cp_hooks, e_comp_object_hook_del);
+ E_FREE_LIST(emm->wl_hooks, e_comp_wl_hook_del);
+
+ e_view_destroy(e_view_rect_view_get(emm->clip_rect));
+ e_view_destroy(e_view_tree_view_get(&emm->tree));
+
+ E_FREE(emm);
}
static Eina_Bool
_e_magnifier_proxy_ec_new(E_Client *ec)
{
Eina_Bool ret;
+ E_View *proxy_view;
if (!ec) return EINA_FALSE;
if (!e_client_view_get(ec)) return EINA_FALSE;
return EINA_FALSE;
}
- ec->magnifier_proxy = evas_object_image_filled_add(e_comp_evas_get());
+ ec->magnifier_proxy = e_view_image_create(_e_magnifier_tree_get(_e_magnifier_mgr));
if (!ec->magnifier_proxy)
{
ELOGF("MAGNIFIER", "CAN NOT make PROXY object..", ec);
return EINA_FALSE;
}
+ e_view_image_filled_set(ec->magnifier_proxy, true);
+ proxy_view = e_view_image_view_get(ec->magnifier_proxy);
- ELOGF("MAGNIFIER", "New PROXY object.. proxy:%p", ec, ec->magnifier_proxy);
+ ELOGF("MAGNIFIER", "New PROXY object.. proxy:(view_image:%p view:%p, evas_object:%p", ec, ec->magnifier_proxy, proxy_view, proxy_view->eo);
- ret = evas_object_image_source_set(ec->magnifier_proxy, ec->frame);
+ E_View_Client *evc = e_client_view_get(ec);
+ E_View *ev = e_view_client_view_get(evc);
+
+ ret = e_view_image_source_set(ec->magnifier_proxy, ev);
if (!ret)
{
ELOGF("MAGNIFIER", "Fail to set image source to PROXY object..", ec);
return EINA_FALSE;
}
- evas_object_image_source_events_set(ec->magnifier_proxy, EINA_TRUE);
- evas_object_image_source_clip_set(ec->magnifier_proxy, EINA_FALSE);
+ // doesn't support below APIs
+ // evas_object_image_source_events_set(ec->magnifier_proxy, EINA_TRUE);
+ // evas_object_image_source_clip_set(ec->magnifier_proxy, EINA_FALSE);
- evas_object_move(ec->magnifier_proxy, ec->x, ec->y);
- evas_object_resize(ec->magnifier_proxy, ec->w, ec->h);
+ e_view_image_geometry_set(ec->magnifier_proxy, ec->x, ec->y, ec->w, ec->h);
- evas_object_show(ec->magnifier_proxy);
+ e_view_clip_set(proxy_view, e_view_rect_view_get(_e_magnifier_mgr->clip_rect));
+ e_view_show(proxy_view);
return EINA_TRUE;
}
ELOGF("MAGNIFIER", "Delete PROXY object.. proxy:%p", ec, ec->magnifier_proxy);
- evas_object_del(ec->magnifier_proxy);
+ E_View *view = e_view_image_view_get(ec->magnifier_proxy);
+ e_view_destroy(view);
+
ec->magnifier_proxy = NULL;
}
_e_magnifier_proxy_ec_all_add(void)
{
E_Client *ec = NULL;
- Eina_Bool ret;
E_Zone *zone;
E_Desk *desk, *desk2;
if (!e_client_view_get(ec)) continue;
if (ec->is_magnifier) continue;
- ret = _e_magnifier_proxy_ec_new(ec);
- if (!ret) continue;
-
- e_magnifier_smart_member_add(desk, ec->magnifier_proxy);
+ _e_magnifier_proxy_ec_new(ec);
}
return EINA_TRUE;
E_CLIENT_FOREACH(ec)
{
- e_magnifier_smart_member_del(ec->magnifier_proxy);
_e_magnifier_proxy_ec_del(ec);
}
}
static void
-_e_magnifier_smart_member_reorder(E_Desk *desk)
+_e_magnifier_view_member_reorder(E_Desk *desk)
{
E_Client *ec;
- Evas_Object *proxy;
- Evas_Object *smart_parent;
+ E_View_Image *proxy;
+ E_View_Tree *parent;
+ E_View *proxy_view;
E_CLIENT_FOREACH(ec)
{
proxy = ec->magnifier_proxy;
if (!proxy) continue;
- smart_parent = evas_object_smart_parent_get(proxy);
- if (smart_parent == _e_magnifier_mgr)
+ proxy_view = e_view_image_view_get(proxy);
+ parent = e_view_parent_get(proxy_view);
+ if (parent == _e_magnifier_tree_get(_e_magnifier_mgr))
{
- evas_object_raise(proxy);
+ e_view_raise_to_top(proxy_view);
}
}
}
static void
-_e_magnifier_calculate_zoom_geometry(E_Magnifier_Zoom_Ratio ratio, int x, int y, int w, int h, int *nx, int *ny, int *nw, int *nh)
+_e_magnifier_calculate_zoom_geometry(E_Magnifier_Zoom_Ratio ratio, int x, int y, int w, int h, int *nx, int *ny, int *nw, int *nh, int *gapx, int *gapy)
{
if (!nx || !ny || !nw || !nh)
return;
+ if (gapx) *gapx = 0;
+ if (gapy) *gapy = 0;
+
switch (ratio)
{
case E_MAGNIFIER_ZOOM_RATIO_100:
*ny = y;
*nw = w;
*nh = h;
+ if (gapx) *gapx = 0;
+ if (gapy) *gapy = 0;
break;
case E_MAGNIFIER_ZOOM_RATIO_110:
// TODO: need to implement
*ny = y + (h/8);
*nw = w * 0.67;
*nh = h * 0.67;
+ if (gapx) *gapx = w/8;
+ if (gapy) *gapy = h/8;
break;
case E_MAGNIFIER_ZOOM_RATIO_160:
// TODO: need to implement
*ny = y + (h/4);
*nw = w/2;
*nh = h/2;
+ if (gapx) *gapx = w/4;
+ if (gapy) *gapy = h/4;
break;
default:
break;
}
static void
-_e_magnifier_apply_zoom(Evas_Object *zoom_obj)
+_e_magnifier_apply_zoom(E_Magnifier_Manager *emm)
{
- if (!zoom_obj) return;
+ if (!emm) return;
E_Magnifier_Zoom_Ratio zoom_ratio;
int x, y, w, h;
int mx, my, mw, mh;
E_Map *map;
- E_MAGNIFIER_SMART_DATA_GET_OR_RETURN(_e_magnifier_mgr, sd);
+ int gapx, gapy;
+ int cx, cy, cw, ch;
+ E_View_Image *evi;
//Evas Map
map = e_map_new();
- x = sd->geom.system.x;
- y = sd->geom.system.y;
- w = sd->geom.system.w;
- h = sd->geom.system.h;
+ E_View *child;
+ E_View_Tree *tree;
- mx = sd->geom.system.x;
- my = sd->geom.system.y;
- mw = sd->geom.system.w;
- mh = sd->geom.system.h;
+ tree = &emm->tree;
- e_map_point_coord_set(map, 0, x, y, 0);
- e_map_point_coord_set(map, 1, x + w, y, 0);
- e_map_point_coord_set(map, 2, x + w, y + h, 0);
- e_map_point_coord_set(map, 3, x, y + h, 0);
+ wl_list_for_each(child, &tree->children, link)
+ {
+ evi = e_view_image_try_from_view(child);
+ if (!evi) continue;
+
+ e_view_image_geometry_get(evi, &cx, &cy, &cw, &ch);
+
+ x = emm->geom.system.x;
+ y = emm->geom.system.y;
+ w = emm->geom.system.w;
+ h = emm->geom.system.h;
+
+ mx = emm->geom.system.x;
+ my = emm->geom.system.y;
+ mw = emm->geom.system.w;
+ mh = emm->geom.system.h;
+
+ //ELOGF("MAGNIFIER", "zoom_obj(%p) sd->geom.system(%d,%d,%d,%d)", NULL, zoom_obj, x, y, w, h);
+
+ zoom_ratio = emm->ratio;
+ _e_magnifier_calculate_zoom_geometry(zoom_ratio, x, y, w, h, &mx, &my, &mw, &mh, &gapx, &gapy);
+
+ //ELOGF("MAGNIFIER", "zoom_obj(%p) uv set(%d,%d,%d,%d)", NULL, zoom_obj, mx, my, mw, mh);
+
+ if (mx >= cx)
+ {
+ if (mx+mw > cx+cw)
+ {
+ mx = cw - mw;
+ x = cx + mx - gapx;
+ }
+ else
+ mx -= cx;
+ }
+ else
+ {
+ x = (x - (mx - cx));
+ mx = 0;
+ }
- //ELOGF("MAGNIFIER", "zoom_obj(%p) sd->geom.system(%d,%d,%d,%d)", NULL, zoom_obj, x, y, w, h);
+ if (my >= cy)
+ {
+ if (my+mh > cy+ch)
+ {
+ my = ch - mh;
+ y = cy + my - gapy;
+ }
+ else
+ {
+ my -= cy;
+ }
+ }
+ else
+ {
+ y = (y - (my - cy));
+ my = 0;
- zoom_ratio = sd->ratio;
- _e_magnifier_calculate_zoom_geometry(zoom_ratio, x, y, w, h, &mx, &my, &mw, &mh);
+ }
- //ELOGF("MAGNIFIER", "zoom_obj(%p) uv set(%d,%d,%d,%d)", NULL, zoom_obj, mx, my, mw, mh);
+ e_map_point_coord_set(map, 0, x, y, 0);
+ e_map_point_coord_set(map, 1, x + w, y, 0);
+ e_map_point_coord_set(map, 2, x + w, y + h, 0);
+ e_map_point_coord_set(map, 3, x, y + h, 0);
- e_map_point_image_uv_set(map, 0, mx, my);
- e_map_point_image_uv_set(map, 1, mx+mw, my);
- e_map_point_image_uv_set(map, 2, mx+mw, my+mh);
- e_map_point_image_uv_set(map, 3, mx, my+mh);
+ e_map_point_image_uv_set(map, 0, mx, my);
+ e_map_point_image_uv_set(map, 1, mx+mw, my);
+ e_map_point_image_uv_set(map, 2, mx+mw, my+mh);
+ e_map_point_image_uv_set(map, 3, mx, my+mh);
- // apply Evas Map to btn
- e_comp_object_map_set(zoom_obj, map);
- e_comp_object_map_enable_set(zoom_obj, EINA_TRUE);
+ // apply Evas Map
+ e_view_map_set(child, map);
+ e_view_map_enable_set(child, EINA_TRUE);
+ }
// Remove Map
e_map_free(map);
}
-static void
-_e_magnifier_smart_set_user(Evas_Smart_Class *sc)
-{
- sc->add = _e_magnifier_smart_add;
- sc->del = _e_magnifier_smart_del;
-}
-
static Eina_Bool
_e_magnifier_smart_client_cb_add(void *data, int type, void *event)
{
if (!desk) goto end;
_e_magnifier_proxy_ec_new(ec);
- e_magnifier_smart_member_add(desk, ec->magnifier_proxy);
end:
return ECORE_CALLBACK_PASS_ON;
if (!ec) goto end;
if (!ec->magnifier_proxy) goto end;
- e_magnifier_smart_member_del(ec->magnifier_proxy);
_e_magnifier_proxy_ec_del(ec);
end:
desk = e_zone_desk_find_by_ec(zone, ec);
if (!desk) goto end;
- _e_magnifier_smart_member_reorder(desk);
+ _e_magnifier_view_member_reorder(desk);
end:
return ECORE_CALLBACK_PASS_ON;
if (!ec) goto end;
if (!ec->magnifier_proxy) goto end;
- evas_object_show(ec->magnifier_proxy);
+ E_View *proxy_view = e_view_image_view_get(ec->magnifier_proxy);
+ e_view_show(proxy_view);
end:
return ECORE_CALLBACK_PASS_ON;
if (!ec) goto end;
if (!ec->magnifier_proxy) goto end;
- evas_object_hide(ec->magnifier_proxy);
+ E_View *proxy_view = e_view_image_view_get(ec->magnifier_proxy);
+ e_view_hide(proxy_view);
end:
return ECORE_CALLBACK_PASS_ON;
if (!ec->magnifier_proxy) goto end;
if (ec->is_magnifier) goto end;
- evas_object_move(ec->magnifier_proxy, ec->x, ec->y);
+ e_view_image_geometry_set(ec->magnifier_proxy, ec->x, ec->y, ec->w, ec->h);
end:
return ECORE_CALLBACK_PASS_ON;
if (!ec->magnifier_proxy) goto end;
if (ec->is_magnifier) goto end;
- evas_object_resize(ec->magnifier_proxy, ec->w, ec->h);
+ e_view_image_geometry_set(ec->magnifier_proxy, ec->x, ec->y, ec->w, ec->h);
end:
return ECORE_CALLBACK_PASS_ON;
desk = e_zone_desk_find_by_ec(zone, ec);
if (!desk) goto end;
- _e_magnifier_smart_member_reorder(desk);
+ _e_magnifier_view_member_reorder(desk);
end:
return EINA_TRUE;
static void
_e_magnifier_smart_cb_hook_client_reuse(void *data, E_Client *ec)
{
- Eina_Bool ret;
E_Zone *zone;
E_Desk *desk;
if (!desk) return;
_e_magnifier_proxy_ec_del(ec);
- ret = _e_magnifier_proxy_ec_new(ec);
- if (ret)
- e_magnifier_smart_member_add(desk, ec->magnifier_proxy);
+ _e_magnifier_proxy_ec_new(ec);
}
static void
if (!ec) return;
if (!_e_magnifier_mgr) return;
- E_MAGNIFIER_SMART_DATA_GET_OR_RETURN(_e_magnifier_mgr, sd);
- if (sd->owner == ec)
+ if (_e_magnifier_mgr->owner == ec)
{
ELOGF("MAGNIFIER", "Deleted Owner.. So, Unset owner", ec);
e_magnifier_owner_unset(ec);
}
}
-static void
-_e_magnifier_smart_add(Evas_Object *obj)
-{
- EVAS_SMART_DATA_ALLOC(obj, E_Magnifier_Smart_Data);
-
- // e_client event handler
- E_LIST_HANDLER_APPEND(priv->handlers, E_EVENT_CLIENT_ADD, _e_magnifier_smart_client_cb_add, priv);
- E_LIST_HANDLER_APPEND(priv->handlers, E_EVENT_CLIENT_REMOVE, _e_magnifier_smart_client_cb_remove, priv);
- E_LIST_HANDLER_APPEND(priv->handlers, E_EVENT_CLIENT_STACK, _e_magnifier_smart_client_cb_stack, priv);
- E_LIST_HANDLER_APPEND(priv->handlers, E_EVENT_CLIENT_SHOW, _e_magnifier_smart_client_cb_show, priv);
- E_LIST_HANDLER_APPEND(priv->handlers, E_EVENT_CLIENT_HIDE, _e_magnifier_smart_client_cb_hide, priv);
- E_LIST_HANDLER_APPEND(priv->handlers, E_EVENT_CLIENT_MOVE, _e_magnifier_smart_client_cb_move, priv);
- E_LIST_HANDLER_APPEND(priv->handlers, E_EVENT_CLIENT_RESIZE, _e_magnifier_smart_client_cb_resize, priv);
-
- // e_client hooks
- E_LIST_HOOK_APPEND(priv->hooks, E_CLIENT_HOOK_DEL, _e_magnifier_smart_cb_hook_client_del, priv);
-
- // e_comp_object hooks
- E_COMP_COMP_HOOK_APPEND(priv->cp_hooks, E_COMP_OBJECT_HOOK_EFFECT_END, _e_magnifier_smart_cb_hook_effect_end, priv);
-
- // e_comp_wl hooks
- E_COMP_WL_HOOK_APPEND(priv->wl_hooks, E_COMP_WL_HOOK_CLIENT_REUSE, _e_magnifier_smart_cb_hook_client_reuse, priv);
-
- evas_object_layer_set(obj, E_LAYER_DESK_OBJECT_BELOW);
-
- _e_magnifier_parent_sc->add(obj);
-}
-
-static void
-_e_magnifier_smart_del(Evas_Object *obj)
-{
- _e_magnifier_parent_sc->del(obj);
-
- E_MAGNIFIER_SMART_DATA_GET_OR_RETURN(obj, sd);
-
- E_FREE_LIST(sd->handlers, ecore_event_handler_del);
- E_FREE_LIST(sd->hooks, e_client_hook_del);
- E_FREE_LIST(sd->cp_hooks, e_comp_object_hook_del);
- E_FREE_LIST(sd->wl_hooks, e_comp_wl_hook_del);
- free(sd);
-
- evas_object_smart_data_set(obj, NULL);
-}
-
-static void
-_e_magnifier_cb_mouse_move_proxy(void *data,
- Evas *e EINA_UNUSED,
- Evas_Object *obj,
- void *event_info)
-{
- Evas_Event_Mouse_Move *ev = event_info;
- Evas_Object *target_obj;
- int w, h;
- int nx, ny;
-
- if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
-
- target_obj = _e_magnifier_mgr;
- if (!target_obj) return;
-
- E_MAGNIFIER_SMART_DATA_GET_OR_RETURN(_e_magnifier_mgr, sd);
-
- w = sd->geom.system.w;
- h = sd->geom.system.h;
-
- nx = ev->cur.output.x - (w/2);
- ny = ev->cur.output.y - (h/2);
-
- sd->geom.system.x = nx;
- sd->geom.system.y = ny;
-
- _e_magnifier_apply_zoom(_e_magnifier_mgr);
-}
-
-static void
-_e_magnifier_cb_mouse_down_proxy(void *data,
- Evas *e EINA_UNUSED,
- Evas_Object *obj,
- void *event_info)
-{
- Evas_Object *target_obj;
- Evas_Event_Mouse_Down *ev = event_info;
-
- if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
-
- target_obj = _e_magnifier_mgr;
- if (!target_obj) return;
-
- evas_object_event_callback_add(target_obj, EVAS_CALLBACK_MOUSE_MOVE, _e_magnifier_cb_mouse_move_proxy, NULL);
-}
-
-static void
-_e_magnifier_cb_mouse_up_proxy(void *data,
- Evas *e EINA_UNUSED,
- Evas_Object *obj,
- void *event_info)
-{
- Evas_Object *target_obj;
- Evas_Event_Mouse_Up *ev = event_info;
-
- if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
-
- target_obj = _e_magnifier_mgr;
- if (!target_obj) return;
-
- evas_object_event_callback_del(target_obj, EVAS_CALLBACK_MOUSE_MOVE, _e_magnifier_cb_mouse_move_proxy);
-}
-
static void
_e_magnifier_zoom_obj_geometry_convert_set(int angle, int x, int y, int w, int h, int tx, int ty, int tw, int th)
{
+ E_Magnifier_Manager *emm;
int nx, ny, nw, nh;
+ emm = _e_magnifier_mgr;
+ if (!emm) return;
+
switch (angle)
{
case 90:
break;
}
- E_MAGNIFIER_SMART_DATA_GET_OR_RETURN(_e_magnifier_mgr, sd);
-
- sd->geom.user.x = nx;
- sd->geom.user.y = ny;
- sd->geom.user.w = nw;
- sd->geom.user.h = nh;
+ emm->geom.user.x = nx;
+ emm->geom.user.y = ny;
+ emm->geom.user.w = nw;
+ emm->geom.user.h = nh;
- // ELOGF("MAGNIFIER", "New position.. (%d,%d,%dx%d)", NULL, nx, ny, nw, nh);
- _e_magnifier_apply_zoom(_e_magnifier_mgr);
+ //ELOGF("MAGNIFIER", "New position.. (%d,%d,%dx%d)", NULL, nx, ny, nw, nh);
+ _e_magnifier_apply_zoom(emm);
}
static void
_e_magnifier_cb_owner_move_resize(E_Client *ec)
{
+ E_Magnifier_Manager *emm;
int x, y, w, h;
int nx, ny, nw, nh;
- e_view_client_geometry_get(e_client_view_get(ec), &x, &y, &w, &h);
+ emm = _e_magnifier_mgr;
+ if (!emm) return;
- E_MAGNIFIER_SMART_DATA_GET_OR_RETURN(_e_magnifier_mgr, sd);
+ e_view_client_geometry_get(e_client_view_get(ec), &x, &y, &w, &h);
// TODO: Need to check rotation...
- nx = x + sd->geom.user.x;
- ny = y + sd->geom.user.y;
- nw = sd->geom.user.w;
- nh = sd->geom.user.h;
+ nx = x + emm->geom.user.x;
+ ny = y + emm->geom.user.y;
+ nw = emm->geom.user.w;
+ nh = emm->geom.user.h;
- sd->geom.system.x = nx;
- sd->geom.system.y = ny;
- sd->geom.system.w = nw;
- sd->geom.system.h = nh;
+ emm->geom.system.x = nx;
+ emm->geom.system.y = ny;
+ emm->geom.system.w = nw;
+ emm->geom.system.h = nh;
- //ELOGF("MAGNIFIER", "Magnifier Owner MoveResize (%,%d,%dx%d). Apply Geometry (%d,%d,%dx%d)", NULL, x, y, w, h, nx, ny, nw, nh);
- _e_magnifier_apply_zoom(_e_magnifier_mgr);
+ // for clip rect
+ _clip_rect_geometry_set(emm, nx, ny, nw, nh);
+
+ //ELOGF("MAGNIFIER", "Magnifier Owner MoveResize (%d,%d,%dx%d). Apply Geometry (%d,%d,%dx%d)", NULL, x, y, w, h, nx, ny, nw, nh);
+ _e_magnifier_apply_zoom(emm);
}
static void
EINTERN Eina_Bool
e_magnifier_new(void)
{
- Eina_Bool ret;
ELOGF("MAGNIFIER", "NEW Magnifier", NULL);
if (_e_magnifier_mgr)
return EINA_TRUE;
}
- ret = _e_magnifier_smart_init();
- if (!ret)
+ E_Zone *zone;
+
+ zone = e_zone_current_get();
+ EINA_SAFETY_ON_NULL_RETURN_VAL(zone, EINA_FALSE);
+
+ _e_magnifier_mgr = _e_magnifier_manager_create(zone);
+ if (!_e_magnifier_mgr)
{
- ELOGF("MAGNIFIER", "Fail to NEW Magnifier", NULL);
+ ELOGF("MAGNIFIER", "FAIL to Create Magnifier!!!", NULL);
return EINA_FALSE;
}
ELOGF("MAGNIFIER", "DELETE Magnifier", NULL);
if (!_e_magnifier_mgr) return;
- E_MAGNIFIER_SMART_DATA_GET_OR_RETURN(_e_magnifier_mgr, sd);
- if (sd->owner)
+ if (_e_magnifier_mgr->owner)
{
- ELOGF("MAGNIFIER", "Fail to DELETE Magnifier.. Owner (win:0x%08zx, ec:%p) exists",
- NULL, e_client_util_win_get(sd->owner), sd->owner);
+ ELOGF("MAGNIFIER", "Fail to DELETE Magnifier.. Owner (win:0x%08zx_e_magnifier_mgr ec:%p) exists",
+ NULL, e_client_util_win_get(_e_magnifier_mgr->owner), _e_magnifier_mgr->owner);
return;
}
_e_magnifier_proxy_ec_all_remove();
-
- evas_object_del(_e_magnifier_mgr);
- _e_magnifier_mgr = NULL;
+ _e_magnifier_manager_destroy(_e_magnifier_mgr);
}
EINTERN Eina_Bool
ELOGF("MAGNIFIER", "SHOW Magnifier", NULL);
if (!_e_magnifier_mgr) return EINA_FALSE;
- E_MAGNIFIER_SMART_DATA_GET_OR_RETURN(_e_magnifier_mgr, sd) EINA_FALSE;
- if (sd->owner != ec)
+ if (_e_magnifier_mgr->owner != ec)
{
ELOGF("MAGNIFIER", "Not owner... Failed to show...", ec);
return EINA_FALSE;
}
- evas_object_show(_e_magnifier_mgr);
-
+ e_view_show(e_view_tree_view_get(_e_magnifier_tree_get(_e_magnifier_mgr)));
_e_magnifier_apply_zoom(_e_magnifier_mgr);
return EINA_TRUE;
ELOGF("MAGNIFIER", "HIDE Magnifier", NULL);
if (!_e_magnifier_mgr) return;
- E_MAGNIFIER_SMART_DATA_GET_OR_RETURN(_e_magnifier_mgr, sd);
- if (sd->owner != ec)
+ if (_e_magnifier_mgr->owner != ec)
{
ELOGF("MAGNIFIER", "Not owner... Failed to hide...", ec);
return;
}
- evas_object_hide(_e_magnifier_mgr);
+ e_view_hide(e_view_tree_view_get(_e_magnifier_tree_get(_e_magnifier_mgr)));
}
EINTERN Eina_Bool
(ratio > E_MAGNIFIER_ZOOM_RATIO_200))
return EINA_FALSE;
- E_MAGNIFIER_SMART_DATA_GET_OR_RETURN(_e_magnifier_mgr, sd) EINA_FALSE;
- if (sd->owner != ec)
+ if (!_e_magnifier_mgr) return EINA_FALSE;
+
+ if (_e_magnifier_mgr->owner != ec)
{
ELOGF("MAGNIFIER", "Not owner... Failed to set ratio...", ec);
return EINA_FALSE;
}
- sd->ratio = ratio;
+ _e_magnifier_mgr->ratio = ratio;
_e_magnifier_apply_zoom(_e_magnifier_mgr);
ELOGF("MAGNIFIER", "Zoom obj geometry set (%d,%d,%dx%d)", ec, x, y, w, h);
- E_MAGNIFIER_SMART_DATA_GET_OR_RETURN(_e_magnifier_mgr, sd) EINA_FALSE;
- if (sd->owner != ec)
+ if (!_e_magnifier_mgr) return EINA_FALSE;
+
+ if (_e_magnifier_mgr->owner != ec)
{
ELOGF("MAGNIFIER", "Not owner... Failed to set geometry...", ec);
return EINA_FALSE;
return EINA_TRUE;
}
-EINTERN Eina_Bool
-e_magnifier_smart_member_add(E_Desk *desk, Evas_Object *obj)
-{
- E_OBJECT_CHECK_RETURN(desk, EINA_FALSE);
- E_OBJECT_TYPE_CHECK_RETURN(desk, E_DESK_TYPE, EINA_FALSE);
-
- ELOGF("MAGNIFIER", "SMART MEMBER ADD.. obj :%p", NULL, obj);
- evas_object_smart_member_add(obj, _e_magnifier_mgr);
-
- return EINA_TRUE;
-}
-
-EINTERN Eina_Bool
-e_magnifier_smart_member_del(Evas_Object *obj)
-{
- Evas_Object *parent = NULL;
-
- if (!obj) return EINA_FALSE;
- parent = evas_object_smart_parent_get(obj);
-
- if (parent != _e_magnifier_mgr)
- return EINA_FALSE;
-
- ELOGF("MAGNIFIER", "SMART MEMBER DEL.. obj :%p", NULL, obj);
-
- evas_object_smart_member_del(obj);
- return EINA_TRUE;
-}
-
static void
_e_magnifier_owner_set(E_Client *ec)
{
}
static Eina_Bool
-_e_magnifier_stand_alone_mode_set(Evas_Object *magnifier_mgr, Eina_Bool set)
+_e_magnifier_stand_alone_mode_set(E_Magnifier_Manager *emm, Eina_Bool set)
{
- if (!magnifier_mgr) return EINA_FALSE;
- E_MAGNIFIER_SMART_DATA_GET_OR_RETURN(magnifier_mgr, sd) EINA_FALSE;
+ if (!emm) return EINA_FALSE;
- if (sd->stand_alone_mode == set)
+ if (emm->stand_alone_mode == set)
return EINA_TRUE;
- sd->stand_alone_mode = set;
- if (sd->stand_alone_mode)
+ emm->stand_alone_mode = set;
+ if (emm->stand_alone_mode)
{
- evas_object_event_callback_add(magnifier_mgr, EVAS_CALLBACK_MOUSE_DOWN, _e_magnifier_cb_mouse_down_proxy, NULL);
- evas_object_event_callback_add(magnifier_mgr, EVAS_CALLBACK_MOUSE_UP, _e_magnifier_cb_mouse_up_proxy, NULL);
+ // TODO: change below functions to relative e_view's API
+ //evas_object_event_callback_add(magnifier_mgr, EVAS_CALLBACK_MOUSE_DOWN, _e_magnifier_cb_mouse_down_proxy, NULL);
+ //evas_object_event_callback_add(magnifier_mgr, EVAS_CALLBACK_MOUSE_UP, _e_magnifier_cb_mouse_up_proxy, NULL);
}
else
{
- evas_object_event_callback_del(magnifier_mgr, EVAS_CALLBACK_MOUSE_DOWN, _e_magnifier_cb_mouse_down_proxy);
- evas_object_event_callback_del(magnifier_mgr, EVAS_CALLBACK_MOUSE_UP, _e_magnifier_cb_mouse_up_proxy);
+ // TODO: change below functions to relative e_view's API
+ //evas_object_event_callback_del(magnifier_mgr, EVAS_CALLBACK_MOUSE_DOWN, _e_magnifier_cb_mouse_down_proxy);
+ //evas_object_event_callback_del(magnifier_mgr, EVAS_CALLBACK_MOUSE_UP, _e_magnifier_cb_mouse_up_proxy);
}
-
return EINA_TRUE;
}
e_magnifier_owner_set(E_Client *ec)
{
ELOGF("MAGNIFIER", "SET Magnifier Owner", ec);
- if (!_e_magnifier_mgr)
+
+ E_Magnifier_Manager *emm;
+ emm = _e_magnifier_mgr;
+ if (!emm)
{
ELOGF("MAGNIFIER", "Magnifier is not exist", ec);
return EINA_FALSE;
}
- E_MAGNIFIER_SMART_DATA_GET_OR_RETURN(_e_magnifier_mgr, sd) EINA_FALSE;
-
- if (sd->owner)
+ if (emm->owner)
{
- ELOGF("MAGNIFIER", "Already exist owner (win:0x%08zx, ec:%p)", ec, e_client_util_win_get(sd->owner), sd->owner);
+ ELOGF("MAGNIFIER", "Already exist owner (win:0x%08zx, ec:%p)", ec, e_client_util_win_get(emm->owner), emm->owner);
return EINA_FALSE;
}
- sd->owner = ec;
+ emm->owner = ec;
_e_magnifier_owner_set(ec);
- if (ec && sd->stand_alone_mode)
+ if (ec && emm->stand_alone_mode)
{
_e_magnifier_stand_alone_mode_set(_e_magnifier_mgr, EINA_FALSE);
}
_e_magnifier_owner_unset(ec);
- if (!_e_magnifier_mgr)
+ E_Magnifier_Manager *emm;
+ emm = _e_magnifier_mgr;
+ if (!emm)
{
ELOGF("MAGNIFIER", "Magnifier is not exist", ec);
return;
}
- E_MAGNIFIER_SMART_DATA_GET_OR_RETURN(_e_magnifier_mgr, sd);
-
- if (sd->owner != ec)
+ if (emm->owner != ec)
{
ELOGF("MAGNIFIER", "Owner is not matched.. current owner (win:0x%08zx, ec:%p)",
- ec, e_client_util_win_get(sd->owner), sd->owner);
+ ec, e_client_util_win_get(emm->owner), emm->owner);
return;
}
- sd->owner = NULL;
+ emm->owner = NULL;
}
EINTERN E_Client *
if (!_e_magnifier_mgr)
return NULL;
- E_MAGNIFIER_SMART_DATA_GET_OR_RETURN(_e_magnifier_mgr, sd) NULL;
-
- ec = sd->owner;
+ ec = _e_magnifier_mgr->owner;
ELOGF("MAGNIFIER", "Current Magnifier owner (win:0x%08zx, ec:%p)",
NULL, e_client_util_win_get(ec), ec);
}
else
{
- E_MAGNIFIER_SMART_DATA_GET_OR_RETURN(_e_magnifier_mgr, sd) EINA_FALSE;
-
- if (sd->owner)
+ if (_e_magnifier_mgr->owner)
{
- ELOGF("MAGNIFIER", "Failed to Stand_Alone mode. Magnifier window exists...", sd->owner);
+ ELOGF("MAGNIFIER", "Failed to Stand_Alone mode. Magnifier window exists...", _e_magnifier_mgr->owner);
return EINA_FALSE;
}