All pastes #135155 Raw Edit

Unnamed

public c v1 · immutable
#135155 ·published 2006-08-16 19:05 UTC
rendered paste body
/* * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 */#include "e.h"#include "e_mod_main.h"/***************************************************************************//**//* gadcon requirements */static E_Gadcon_Client *_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style);static void _gc_shutdown(E_Gadcon_Client *gcc);static void _gc_orient(E_Gadcon_Client *gcc);static char *_gc_label(void);static Evas_Object *_gc_icon(Evas *evas);/* and actually define the gadcon class that this module provides (just 1) */static const E_Gadcon_Client_Class _gc_class ={   GADCON_CLIENT_CLASS_VERSION,     "eyes",     {        _gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon     }};/**//***************************************************************************//***************************************************************************//**//* actual module specifics */typedef struct _Instance Instance;struct _Instance{   E_Gadcon_Client	*gcc;   Evas_Object		*o_eyes;   Ecore_Timer		*timer;	Evas_Object		*pupils[2];};Config *eyes_config = NULL;static E_Config_DD *conf_edd = NULL;static E_Config_DD *conf_item_edd = NULL;static Config_Item *_eyes_config_item_get (const char *id);static void _eyes_pupils_init(Instance *inst);static void _eyes_cb_mouse_down (void *data, Evas * e, Evas_Object * obj, void *event_info);static void _eyes_menu_cb_post (void *data, E_Menu * m);static int _eyes_cb_check (void *data);/**//***************************************************************************/static E_Gadcon_Client *_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style){   Evas_Object *o;   Instance *inst;   Config_Item *ci;   E_Gadcon_Client *gcc;   char edje_path[PATH_MAX];   inst = E_NEW(Instance, 1);      ci = _eyes_config_item_get (id);   o = edje_object_add(gc->evas);   if (!e_theme_edje_object_set(o, "base/theme/modules/eyes", "module/eyes/main"))     {	     snprintf(edje_path, sizeof(edje_path), "%s/themes/default.edj",		  e_module_dir_get(eyes_config->module));	     edje_object_file_set(o, edje_path, "module/eyes/main");     }   evas_object_show(o);      gcc = e_gadcon_client_new (gc, name, id, style, o);   gcc->data = inst;   inst->gcc = gcc;   inst->o_eyes = o;	_eyes_pupils_init(inst);	evas_object_event_callback_add (o, EVAS_CALLBACK_MOUSE_DOWN,				  _eyes_cb_mouse_down, inst);   eyes_config->instances = evas_list_append(eyes_config->instances, inst);   inst->timer = ecore_timer_add (1.0, _eyes_cb_check, inst);   return gcc;}static void_gc_shutdown(E_Gadcon_Client *gcc){   Instance *inst;   inst = gcc->data;	if (inst->timer)	  ecore_timer_del (inst->timer);   eyes_config->instances = 	  evas_list_remove(eyes_config->instances, inst);   evas_object_del(inst->o_eyes);   free(inst);}static void_gc_orient(E_Gadcon_Client *gcc){   Instance *inst;   inst = gcc->data;   e_gadcon_client_aspect_set(gcc, 16, 16);   e_gadcon_client_min_size_set(gcc, 16, 16);}static char *_gc_label(void){   return ("Eyes");}static Evas_Object *_gc_icon(Evas *evas){   Evas_Object *o;   char buf[PATH_MAX];   o = edje_object_add(evas);   snprintf(buf, sizeof(buf), "%s/module.eap",	    e_module_dir_get(eyes_config->module));   edje_object_file_set(o, buf, "icon");   return o;}static Config_Item *_eyes_config_item_get(const char *id){   Evas_List *l;   Config_Item *ci;   for (l = eyes_config->items; l; l = l->next)     {	ci = l->data;	if ((ci->id) && (!strcmp(ci->id, id)))	  return ci;     }   ci = E_NEW(Config_Item, 1);   ci->id = evas_stringshare_add(id);   eyes_config->items = evas_list_append(eyes_config->items, ci);   return ci;}static void _eyes_pupils_init(Instance *inst){	int i;	char edje_path[PATH_MAX];	for (i = 0; i < 2; i++)	  {	     inst->pupils[i] = edje_object_add(inst->gcc->gadcon->evas);     	     if (!e_theme_edje_object_set(inst->pupils[i], "base/theme/modules/eyes", "module/eyes/pupil"))          {	          snprintf(edje_path, sizeof(edje_path), "%s/themes/default.edj",		       e_module_dir_get(eyes_config->module));	          edje_object_file_set(inst->pupils[i], edje_path, "module/eyes/pupil");          }		  evas_object_resize(inst->pupils[i], 5, 5);		  evas_object_show(inst->pupils[i]);	  }	  _eyes_cb_check(inst);}static int _eyes_cb_check(void *data){	Evas_Coord x, y, w, h;	int cx, cy, cw, ch;	char buf[4096];	Instance *inst;	inst = (Instance *)data;		evas_object_geometry_get(inst->o_eyes, &x, &y, &w, &h);	e_gadcon_canvas_zone_geometry_get(inst->gcc->gadcon, 												 &cx, &cy, &cw, &ch);		x += cx;	y += cy;	evas_object_move(inst->pupils[0], x, y);//	evas_object_move(inst->pupils[0], x + (w / 4), y + (h / 2));//	evas_object_move(inst->pupils[1], x + (w * 3 / 4), y + (h / 2));}static void _eyes_cb_mouse_down (void *data, Evas * e, Evas_Object * obj, void *event_info){	Instance *inst;	Evas_Event_Mouse_Down *ev;		inst = data;	ev = event_info;	if ((ev->button == 3) && (!eyes_config->menu))	  {	     E_Menu *mn;		  E_Menu_Item *mi;		  int cx, cy, cw, ch;		  mn = e_menu_new();		  e_menu_post_deactivate_callback_set (mn, _eyes_menu_cb_post, inst);		  eyes_config->menu = mn;		  mi = e_menu_item_new(mn);		  e_menu_item_label_set(mi, "Configuration");		  e_util_menu_item_edje_icon_set(mi, "enlightenment/configuration");					  mi = e_menu_item_new (mn);		  e_menu_item_separator_set (mi, 1);		  e_gadcon_client_util_menu_items_append(inst->gcc, mn, 0);		  e_gadcon_canvas_zone_geometry_get(inst->gcc->gadcon,		  					 &cx, &cy, &cw, &ch);		  e_menu_activate_mouse(mn,		  				  e_util_zone_current_get(e_manager_current_get()),						  cx + ev->output.x, cy + ev->output.y, 1, 1,						  E_MENU_POP_DIRECTION_DOWN, ev->timestamp);		  evas_event_feed_mouse_up(inst->gcc->gadcon->evas, ev->button,		  				  EVAS_BUTTON_NONE, ev->timestamp, NULL);	evas_object_move(inst->pupils[0], cx+ev->output.x+10, cy + ev->output.y);	evas_object_show(inst->pupils[0]);	  }}static void _eyes_menu_cb_post (void *data, E_Menu * m){	if (!eyes_config->menu)	  return;	e_object_del (E_OBJECT (eyes_config->menu));	eyes_config->menu = NULL;}EAPI E_Module_Api e_modapi = {   E_MODULE_API_VERSION,     "Eyes"};EAPI void *e_modapi_init (E_Module *m){   conf_item_edd = E_CONFIG_DD_NEW ("Eyes_Config_Item", Config_Item);#undef T#undef D#define T Config_Item#define D conf_item_edd   E_CONFIG_VAL(D, T, id, STR);   conf_edd = E_CONFIG_DD_NEW ("Eyes_Config", Config);#undef T#undef D#define T Config#define D conf_edd   E_CONFIG_LIST (D, T, items, conf_item_edd);   eyes_config = e_config_domain_load("module.eyes", conf_edd);   if (!eyes_config)     {	Config_Item *ci;		eyes_config = E_NEW(Config, 1);	ci = E_NEW(Config_Item, 1);		ci->id = evas_stringshare_add ("0");	ci->last_x = 0;	ci->last_y = 0;	eyes_config->items = evas_list_append (eyes_config->items, ci);     }   eyes_config->module = m;    e_gadcon_provider_register (&_gc_class);    return m;}EAPI inte_modapi_shutdown(E_Module *m){   eyes_config->module = NULL;   e_gadcon_provider_unregister (&_gc_class);   while (eyes_config->items)     {	Config_Item *ci;	ci = eyes_config->items->data;	eyes_config->items = evas_list_remove_list(eyes_config->items, eyes_config->items);	if (ci->id)	  evas_stringshare_del (ci->id);	free (ci);	ci = NULL;     }   free (eyes_config);   eyes_config = NULL;   E_CONFIG_DD_FREE (conf_item_edd);   E_CONFIG_DD_FREE (conf_edd);   return 1;}EAPI inte_modapi_save (E_Module *m){   Evas_List *l;   for (l = eyes_config->instances; l; l = l->next)     {	Instance *inst;	Config_Item *ci;	inst = l->data;	ci = _eyes_config_item_get (inst->gcc->id);	if (ci->id)	  evas_stringshare_del (ci->id);	ci->id = evas_stringshare_add (inst->gcc->id);     }   e_config_domain_save("module.eyes", conf_edd, eyes_config);   return 1;}EAPI int e_modapi_about (E_Module *m){   e_module_dialog_show (m, ("A Geyes Clone"),			 ("Displays eyes on the shelf which follows the mouse pointer"));   return 1;}