Enlightenment CVS committal Author : monkeyiq Project : misc Module : gevas2
Dir : misc/gevas2/src Modified Files: .cvsignore gevas.c gevas.h gevas_obj_collection.c gevas_util.c gevasedje.c gevasevh_drag.c gevasevh_group_selector.c gevasevh_group_selector.h gevasevh_popup.c gevasevh_selectable.c gevasimage.h gevasobj.c gevasobj.h gevastwin.c gevastwin.h project.c Log Message: A flurry of updates. Syned to work with latest evas event _feed_() functions amoung other misc changes. =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas2/src/.cvsignore,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- .cvsignore 29 Apr 2005 05:27:54 -0000 1.2 +++ .cvsignore 4 Aug 2005 04:12:15 -0000 1.3 @@ -6,3 +6,4 @@ *.o Makefile Makefile.in +*.flc =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas2/src/gevas.c,v retrieving revision 1.15 retrieving revision 1.16 diff -u -3 -r1.15 -r1.16 --- gevas.c 4 May 2005 02:28:44 -0000 1.15 +++ gevas.c 4 Aug 2005 04:12:15 -0000 1.16 @@ -63,7 +63,6 @@ #include <Ecore_X.h> #include <Ecore_Evas.h> -//#define EVAS_FREE_HAS_BUGS /* Always disable NLS, since we have no config.h; @@ -203,8 +202,8 @@ void gevas_add_fontpath(GtkgEvas * ev, const gchar * path) { +// fprintf(stderr,"gevas_add_fontpath() ev:%p evas:%p\n",ev,EVAS(ev)); evas_font_path_append(EVAS(ev), (char*)path); -// fprintf(stderr," GEVAS add font path: %s\n", path); } @@ -255,26 +254,64 @@ /* == ((GtkgEvasEvHClass*)(((GtkObject*) (hdata))->klass))-> */ +/************************************************************/ +/************************************************************/ + +#define __HANDLE_EVENT_DISPATCH_GLOBAL( func_to_call ) if( _data ) { \ + { \ + int i = 0; \ + GtkgEvas *gevas = gevasobj_get_gevas(_data); \ + GSList* l = gevas->m_global_event_handlers; \ + int size = g_slist_length( l ); \ + for( i=0; i < size; i++ ) \ + { \ + gpointer hdata = g_slist_nth_data( l, i ); \ + GtkgEvasEvHClass* k = (GtkgEvasEvHClass*)GTK_OBJECT_GET_CLASS(hdata); \ + ret = k->func_to_call(GTK_OBJECT(hdata), GTK_OBJECT(_data), _b, _x, _y ); \ + if( ret == GEVASEV_HANDLER_RET_CHOMP ) break; \ + } \ + } \ + } \ + + + +/************************************************************/ +/************************************************************/ +/************************************************************/ +/************************************************************/ +/************************************************************/ void __gevas_mouse_in(void *_data, Evas* _e, Evas_Object* _o, void *event_info ) { Evas_Event_Mouse_In* ev = (Evas_Event_Mouse_In*)event_info; +/* fprintf(stderr,"__gevas_mouse_in() x:%d y:%d\n", */ +/* ev->output.x, */ +/* ev->output.y ); */ int _b = ev->buttons; int _x = ev->output.x; int _y = ev->output.y; - __HANDLE_EVENT_DISPATCH(handler_mouse_in) + GEVASEV_HANDLER_RET ret = GEVASEV_HANDLER_RET_NEXT; + __HANDLE_EVENT_DISPATCH_GLOBAL(handler_mouse_in); + if( ret != GEVASEV_HANDLER_RET_CHOMP ) + __HANDLE_EVENT_DISPATCH(handler_mouse_in); } void __gevas_mouse_out(void *_data, Evas* _e, Evas_Object* _o, void *event_info ) { Evas_Event_Mouse_Out* ev = (Evas_Event_Mouse_Out*)event_info; +/* fprintf(stderr,"__gevas_mouse_out() x:%d y:%d\n", */ +/* ev->output.x, */ +/* ev->output.y ); */ int _b = ev->buttons; int _x = ev->output.x; int _y = ev->output.y; - __HANDLE_EVENT_DISPATCH(handler_mouse_out) + GEVASEV_HANDLER_RET ret = GEVASEV_HANDLER_RET_NEXT; + __HANDLE_EVENT_DISPATCH_GLOBAL(handler_mouse_out); + if( ret != GEVASEV_HANDLER_RET_CHOMP ) + __HANDLE_EVENT_DISPATCH(handler_mouse_out); } void __gevas_mouse_down(void *_data, Evas* _e, Evas_Object* _o, void *event_info ) @@ -288,34 +325,10 @@ Evas_Object* topobj = evas_object_top_at_xy_get( _e, _x, _y, 0, 0 ); _data = EVASO_TO_GTKO(topobj); -/* { */ -/* GSList* hans; */ -/* int i=0,size=0; */ -/* hans = gevasobj_get_evhandlers( GTK_GEVASOBJ(_data) ); */ -/* size = g_slist_length( hans ); */ -/* printf("__gevas_mouse_down() _b:%d sz:%d\n",_b,size); */ -/* if( size ) */ -/* { */ -/* gpointer hdata = g_slist_nth_data( hans, 0 ); */ -/* GtkgEvasEvHClass* k = (GtkgEvasEvHClass*)GTK_OBJECT_GET_CLASS(hdata); */ -/* printf("__gevas_mouse_down() _b:%d sz:%d evh:%x\n",_b,size,k); */ -/* } */ -/* Evas_Object* topobj = evas_object_top_at_xy_get( _e, _x, _y, 0, 0 ); */ -/* printf("__gevas_mouse_down(2) _b:%d sz:%d top:%x\n",_b,size,topobj); */ -/* hans = gevasobj_get_evhandlers( GTK_GEVASOBJ(EVASO_TO_GTKO(topobj)) ); */ -/* size = g_slist_length( hans ); */ -/* if( size ) */ -/* { */ -/* gpointer hdata = g_slist_nth_data( hans, 0 ); */ -/* GtkgEvasEvHClass* k = (GtkgEvasEvHClass*)GTK_OBJECT_GET_CLASS(hdata); */ -/* printf("__gevas_mouse_down(2) _b:%d sz:%d evh:%x\n",_b,size,k); */ -/* } */ - - -/* } */ - - - __HANDLE_EVENT_DISPATCH(handler_mouse_down) + GEVASEV_HANDLER_RET ret = GEVASEV_HANDLER_RET_NEXT; + __HANDLE_EVENT_DISPATCH_GLOBAL(handler_mouse_down); + if( ret != GEVASEV_HANDLER_RET_CHOMP ) + __HANDLE_EVENT_DISPATCH(handler_mouse_down); } void __gevas_mouse_up(void *_data, Evas* _e, Evas_Object* _o, void *event_info ) @@ -329,8 +342,12 @@ Evas_Object* topobj = evas_object_top_at_xy_get( _e, _x, _y, 0, 0 ); _data = EVASO_TO_GTKO(topobj); - __HANDLE_EVENT_DISPATCH(handler_mouse_up) + GEVASEV_HANDLER_RET ret = GEVASEV_HANDLER_RET_NEXT; + __HANDLE_EVENT_DISPATCH_GLOBAL(handler_mouse_up); + if( ret != GEVASEV_HANDLER_RET_CHOMP ) + __HANDLE_EVENT_DISPATCH(handler_mouse_up); } + void __gevas_mouse_move(void *_data, Evas* _e, Evas_Object* _o, void *event_info ) { @@ -339,15 +356,32 @@ int _x = ev->cur.output.x; int _y = ev->cur.output.y; -/* printf("__gevas_mouse_move() _b:%d\n",_b); */ +/* printf("__gevas_mouse_move() _b:%d _x:%d _y:%d\n",_b,_x,_y); */ // _data lags one click for some reason. Evas_Object* topobj = evas_object_top_at_xy_get( _e, _x, _y, 0, 0 ); _data = EVASO_TO_GTKO(topobj); - - __HANDLE_EVENT_DISPATCH(handler_mouse_move) + + GEVASEV_HANDLER_RET ret = GEVASEV_HANDLER_RET_NEXT; + __HANDLE_EVENT_DISPATCH_GLOBAL(handler_mouse_move); + if( ret != GEVASEV_HANDLER_RET_CHOMP ) + __HANDLE_EVENT_DISPATCH(handler_mouse_move); +} + +void +gevas_add_global_event_watcher( GtkgEvas* gevas, GtkObject * h ) +{ + gevas_remove_global_event_watcher( gevas, h ); + gevas->m_global_event_handlers = g_slist_append( gevas->m_global_event_handlers, h ); +} + +void +gevas_remove_global_event_watcher( GtkgEvas* gevas, GtkObject * h ) +{ + gevas->m_global_event_handlers = g_slist_remove( gevas->m_global_event_handlers, h ); } + #if 0 static void gevas_drag_data_get (GtkWidget *widget, @@ -482,7 +516,7 @@ parent_class = gtk_type_class(gtk_widget_get_type()); -// object_class->destroy = gevas_destroy; + object_class->destroy = gevas_destroy; // go->finalize = gevas_finalize; widget_class->realize = gevas_realize; widget_class->unrealize = gevas_unrealize; @@ -575,7 +609,8 @@ ev->middleb_scrolls_xplane = 0; ev->gevasobjs = g_hash_table_new(NULL, NULL); ev->gevasobjlist = NULL; - + ev->m_global_event_handlers = 0; + evas_output_method_set( ev->evas, evas_render_method_lookup("software_x11")); /* printf("gevas_init() end\n"); */ @@ -603,20 +638,19 @@ { GtkgEvas *ev; -// printf("gevas_destroy() 1\n"); +// fprintf(stderr,"gevas_destroy() 1 p:%p\n",object); g_return_if_fail(object != NULL); g_return_if_fail(GTK_IS_GEVAS(object)); ev = GTK_GEVAS(object); -// printf("gevas_destroy() 2\n"); +// fprintf(stderr,"gevas_destroy() 2\n"); if( ev->ecore_timer_id ) g_source_remove( ev->ecore_timer_id ); /* Chain up */ - if (GTK_OBJECT_GET_CLASS(parent_class)->destroy) - (*GTK_OBJECT_GET_CLASS(parent_class)->destroy) (object); + GTK_OBJECT_CLASS (parent_class)->destroy (object); } static void gevas_finalize(GObject* object) @@ -626,9 +660,10 @@ g_return_if_fail(GTK_IS_GEVAS(object)); ev = GTK_GEVAS(object); +// fprintf(stderr,"gevas_finalize() 2\n"); + /* Chain up */ - if (G_OBJECT_CLASS(parent_class)->finalize) - (*G_OBJECT_CLASS(parent_class)->finalize) (object); + G_OBJECT_CLASS (parent_class)->finalize (object); } @@ -665,6 +700,8 @@ ev = GTK_GEVAS(widget); + + /* printf("gevas_event() ev:%p type:%d\n",ev,event->type); */ @@ -674,14 +711,18 @@ case GDK_ENTER_NOTIFY: { - evas_event_feed_mouse_in( ev->evas, 0 ); + time_t tt = time( 0 ); +/* fprintf(stderr,"GDK_ENTER_NOTIFY feeding mouse in\n"); */ + evas_event_feed_mouse_in( ev->evas, tt, 0 ); break; } case GDK_LEAVE_NOTIFY: { + time_t tt = time( 0 ); +/* fprintf(stderr,"GDK_LEAVE_NOTIFY feeding mouse out\n"); */ /* GdkEventCrossing* e = (GdkEventCrossing*)event; */ - evas_event_feed_mouse_out( ev->evas, 0 ); + evas_event_feed_mouse_out( ev->evas, tt, 0 ); break; } @@ -689,7 +730,10 @@ case GDK_MOTION_NOTIFY: { - gint x = 0, y = 0; + GdkEventMotion* mev = (GdkEventMotion*)ev; + time_t tt = mev->time; + + gint x = 0, y = 0; /* x=(int)event->motion.x; y=(int)event->motion.y; */ @@ -735,7 +779,7 @@ } } else { - evas_event_feed_mouse_move(ev->evas, x, y, 0); + evas_event_feed_mouse_move(ev->evas, x, y, tt, 0); /* printf("evas_event_move() x:%d y:%d \n",x,y); */ @@ -782,6 +826,9 @@ case GDK_2BUTTON_PRESS: case GDK_3BUTTON_PRESS: { + GdkEventButton* mev = (GdkEventButton*)ev; + time_t tt = mev->time; + int x = 0, y = 0, b = 0; x = (int) event->button.x; @@ -800,30 +847,33 @@ if( ev->middleb_scrolls_pgate_event ) { - evas_event_feed_mouse_move( ev->evas, x, y, 0 ); - evas_event_feed_mouse_down( ev->evas, b, EVAS_BUTTON_NONE, 0 ); +// evas_event_feed_mouse_move( ev->evas, x, y, 0 ); + evas_event_feed_mouse_down( ev->evas, b, EVAS_BUTTON_NONE, tt, 0 ); } } else { - printf("GDK_BUTTON_PRESS: x:%d y:%d b:%d frez:%d \n",x,y,b, - evas_event_freeze_get( ev->evas ) - ); - evas_event_feed_mouse_move( ev->evas, x, y, 0 ); - evas_event_feed_mouse_down( ev->evas, b, EVAS_BUTTON_NONE, 0 ); +/* printf("GDK_BUTTON_PRESS: x:%d y:%d b:%d frez:%d \n",x,y,b, */ +/* evas_event_freeze_get( ev->evas ) */ +/* ); */ +// evas_event_feed_mouse_move( ev->evas, x, y, 0 ); + evas_event_feed_mouse_down( ev->evas, b, EVAS_BUTTON_NONE, tt, 0 ); } } break; case GDK_BUTTON_RELEASE: { + GdkEventButton* mev = (GdkEventButton*)ev; + time_t tt = mev->time; + int x = 0, y = 0, b = 0; x = (int) event->button.x; y = (int) event->button.y; b = (int) event->button.button; -/* printf("GDK_BUTTON_RELEASE: x:%d y:%d\n",x,y); */ +// printf("GDK_BUTTON_RELEASE: b:%d x:%d y:%d\n",b,x,y); /* gdk_pointer_ungrab( GDK_CURRENT_TIME ); @@ -833,14 +883,14 @@ ev->scrolling = 0; if( ev->middleb_scrolls_pgate_event ) { - evas_event_feed_mouse_move(ev->evas, x, y, 0 ); - evas_event_feed_mouse_up(ev->evas, b, EVAS_BUTTON_NONE, 0 ); +// evas_event_feed_mouse_move(ev->evas, x, y, 0 ); + evas_event_feed_mouse_up(ev->evas, b, EVAS_BUTTON_NONE, tt, 0 ); } } else { - evas_event_feed_mouse_move(ev->evas, x, y, 0 ); - evas_event_feed_mouse_up(ev->evas, b, EVAS_BUTTON_NONE, 0 ); +// evas_event_feed_mouse_move(ev->evas, x, y, 0 ); + evas_event_feed_mouse_up(ev->evas, b, EVAS_BUTTON_NONE, tt, 0 ); } break; } @@ -936,7 +986,7 @@ /* evas_get_optimal_colormap(ev->evas, */ /* GDK_WINDOW_XDISPLAY(GDK_ROOT_PARENT())); */ gdk_vis = gdkx_visual_get(XVisualIDFromVisual(vis)); - gdk_cmap = gdkx_colormap_get(cmap); + gdk_cmap = (GdkColormap *)gdkx_colormap_get(cmap); attributes.visual = gdk_vis; /*gtk_widget_get_visual (widget); */ attributes.colormap = gdk_cmap; /*gtk_widget_get_colormap (widget); */ @@ -955,6 +1005,7 @@ attributes.wclass = GDK_INPUT_OUTPUT; attributes.event_mask = gtk_widget_get_events(widget) | GDK_EXPOSURE_MASK; attributes.event_mask |= GDK_EXPOSURE_MASK + | GDK_FOCUS_CHANGE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK @@ -992,7 +1043,7 @@ einfo = (Evas_Engine_Info_Software_X11 *) evas_engine_info_get(evas); - fprintf(stderr,"gevas_realize() drawable:%lx\n", GDK_WINDOW_XWINDOW(widget->window)); +// fprintf(stderr,"gevas_realize() drawable:%lx\n", GDK_WINDOW_XWINDOW(widget->window)); /* the following is specific to the engine */ einfo->info.display = GDK_WINDOW_XDISPLAY(widget->window); @@ -1021,6 +1072,7 @@ { GtkgEvas *ev; +// fprintf(stderr,"gevas_unrealize() 1\n"); // printf("gevas_unrealize() start\n"); g_return_if_fail(widget != NULL); @@ -1070,9 +1122,10 @@ if (ev->evas) { -#ifndef EVAS_FREE_HAS_BUGS + if (ev->current_idle) + g_source_remove( ev->current_idle ); + ev->current_idle = 0; evas_free(ev->evas); -#endif ev->evas = NULL; } @@ -1083,11 +1136,9 @@ GTK_WIDGET_UNSET_FLAGS(widget, GTK_MAPPED); - /* This destroys widget->window and unsets the realized flag - */ if (GTK_WIDGET_CLASS(parent_class)->unrealize) (*GTK_WIDGET_CLASS(parent_class)->unrealize) (widget); -// printf("gevas_unrealize() end\n"); +// fprintf(stderr,"gevas_unrealize() end\n"); } static void gevas_size_request(GtkWidget * widget, GtkRequisition * requisition) @@ -1371,8 +1422,16 @@ if (!GTK_WIDGET_MAPPED(GTK_WIDGET(data))) return 1; - ecore_main_loop_iterate(); - gevas_queue_redraw( GTK_GEVAS(data) ); + GtkgEvas *ev; + g_return_if_fail(data != NULL); + g_return_if_fail(GTK_IS_GEVAS(data)); + ev = GTK_GEVAS(data); + + if( ev->evas ) + { + ecore_main_loop_iterate(); + gevas_queue_redraw( GTK_GEVAS(data) ); + } return 1; // call again } =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas2/src/gevas.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- gevas.h 4 May 2005 02:28:44 -0000 1.3 +++ gevas.h 4 Aug 2005 04:12:16 -0000 1.4 @@ -155,6 +155,11 @@ // how many evas_render()s were called long evas_render_call_count; + + // handlers that don't care which canvas object is in focus + // they want to know all events. + GSList *m_global_event_handlers; + }; struct _GtkgEvasClass { @@ -227,6 +232,9 @@ GList* gevas_get_metadata_prefix_list( GtkgEvas *ev ); GList* gevas_get_image_prefix_list ( GtkgEvas *ev ); + + void gevas_add_global_event_watcher( GtkgEvas* gevas, GtkObject * h ); + void gevas_remove_global_event_watcher( GtkgEvas* gevas, GtkObject * h ); void __gevas_mouse_in( void *_data, Evas* _e, Evas_Object* _o, void *event_info ); =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas2/src/gevas_obj_collection.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- gevas_obj_collection.c 15 Nov 2004 16:41:22 -0000 1.3 +++ gevas_obj_collection.c 4 Aug 2005 04:12:16 -0000 1.4 @@ -605,7 +605,23 @@ for( li=ev->selected_objs; li; li = li->next) if(li->data) { - gevasobj_move_relative( li->data, dx, dy ); +// gevasobj_move_relative( li->data, (double)dx, (double)dy ); + + double ddx = 0; + double ddy = 0; + ddx += dx; + ddy += dy; + + if( li->data ) + { + Evas_Coord x=0,y=0; +// gevasobj_get_location( GTK_GEVASOBJ(li->data), &x, &y ); + char buffer[1024]; + snprintf(buffer,200,"FIXME FIXME FIXME() size:%d getloc.x:%d getlox.y:%d %f \n", + sizeof(Evas_Coord), x, y, 0.0 ); + } + + gevasobj_move_relative( li->data, ddx, ddy ); } } =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas2/src/gevas_util.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- gevas_util.c 17 Aug 2002 15:26:38 -0000 1.2 +++ gevas_util.c 4 Aug 2005 04:12:16 -0000 1.3 @@ -26,6 +26,7 @@ #include <gevas_util.h> +#include <string.h> /** =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas2/src/gevasedje.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- gevasedje.c 29 Apr 2005 05:19:15 -0000 1.2 +++ gevasedje.c 4 Aug 2005 04:12:16 -0000 1.3 @@ -184,7 +184,7 @@ ev = GTK_GEVASEDJE(object); - + /* Chain up */ if (GTK_OBJECT_CLASS(parent_class)->destroy) =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas2/src/gevasevh_drag.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- gevasevh_drag.c 29 Apr 2005 05:19:15 -0000 1.4 +++ gevasevh_drag.c 4 Aug 2005 04:12:16 -0000 1.5 @@ -92,14 +92,19 @@ GEVASEV_HANDLER_RET_NEXT); ev = GTK_GEVASEVH_DRAG(object); - printf("gevasev_drag_mouse_down()\n"); +// printf("gevasev_drag_mouse_down() _x:%d _y:%d\n",_x,_y); if (_b == 1) { Evas_Coord x = 0, y = 0, w = 0, h = 0; gevasobj_get_geometry(GTK_GEVASOBJ(gevasobj), &x, &y, &w, &h); +// printf("gevasev_drag_mouse_down(2) _x:%d _y:%d\n",_x,_y); ev->dragging = 1; ev->click_x_offset = _x - x; ev->click_y_offset = _y - y; - printf("Starting to drag\n"); +/* printf("gevasev_drag_mouse_down(3) _x:%d _y:%d\n",_x,_y); */ +/* printf("Starting to drag coffx:%f coffy:%f _x:%d _y:%d x:%d y:%d\n", */ +/* ev->click_x_offset, ev->click_y_offset, */ +/* _x, _y, x, y */ +/* ); */ } return GEVASEV_HANDLER_RET_NEXT; } @@ -139,10 +144,15 @@ if( x < 0 ) x = 0; if( y < 0 ) y = 0; - gevasobj_move(GTK_GEVASOBJ(gevasobj), x, y ); -/* gevasobj_queue_redraw(GTK_GEVASOBJ(gevasobj));*/ - } + +/* { */ +/* Evas_Coord cx = 0, cy = 0, cw = 0, ch = 0; */ +/* gevasobj_get_geometry(GTK_GEVASOBJ(gevasobj), &cx, &cy, &cw, &ch); */ +/* gevasobj_move_relative(GTK_GEVASOBJ(gevasobj), x - cx, y - cy ); */ +/* printf("gevasev_drag_mouse_move() x:%d y:%d _x:%d _y:%d\n",x,y,_x,_y); */ +/* } */ + } return GEVASEV_HANDLER_RET_NEXT; } =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas2/src/gevasevh_group_selector.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- gevasevh_group_selector.c 15 Nov 2004 16:41:22 -0000 1.5 +++ gevasevh_group_selector.c 4 Aug 2005 04:12:16 -0000 1.6 @@ -505,7 +505,12 @@ gevasobj_set_layer(ct, 9999); /* printf(" Made the gradient\n");*/ + + gevasobj_add_evhandler(ev->rect, GTK_OBJECT(object)); + } + + gevas_add_global_event_watcher( gevas, GTK_OBJECT(ev) ); // fprintf(stderr,"gevasevh_group_selector_set_object(end)\n"); } @@ -516,6 +521,7 @@ gevasev_group_selector_mouse_in(GtkObject * object, GtkObject * gevasobj, int _b, int _x, int _y) { +// fprintf(stderr,"gevasev_group_selector_mouse_in()\n"); GtkgEvasEvHGroupSelector *ev; g_return_val_if_fail(object != NULL, GEVASEV_HANDLER_RET_NEXT); g_return_val_if_fail(GTK_IS_GEVASEVH_GROUP_SELECTOR(object), @@ -525,50 +531,70 @@ } GEVASEV_HANDLER_RET +gevasev_group_selector_mouse_up(GtkObject * object, GtkObject * gevasobj, int _b, + int _x, int _y); + + +GEVASEV_HANDLER_RET gevasev_group_selector_mouse_out(GtkObject * object, GtkObject * gevasobj, int _b, int _x, int _y) { - GtkgEvasEvHGroupSelector *ev; + GtkgEvasEvHGroupSelector *ev; g_return_val_if_fail(object != NULL, GEVASEV_HANDLER_RET_NEXT); g_return_val_if_fail(GTK_IS_GEVASEVH_GROUP_SELECTOR(object), GEVASEV_HANDLER_RET_NEXT); ev = GTK_GEVASEVH_GROUP_SELECTOR(object); + +// fprintf(stderr,"gevasev_group_selector_mouse_out() ev->tracking:%d\n",ev->tracking); + if( ev->rect && ev->tracking && GTK_OBJECT(gevasobj) != GTK_OBJECT(ev->rect) ) + { + return gevasev_group_selector_mouse_up( object, gevasobj, 1, _x, _y ); + } + + return GEVASEV_HANDLER_RET_NEXT; } GEVASEV_HANDLER_RET -gevasev_group_selector_mouse_down(GtkObject * object, GtkObject * gevasobj, int _b, - int _x, int _y) +gevasev_group_selector_mouse_down(GtkObject * object, GtkObject * gevasobj, int _b, int _x, int _y) { - GtkgEvasEvHGroupSelector *ev; + GtkgEvasEvHGroupSelector *ev = 0; GdkEvent *gdkev; - if( _b != 1 ) - return GEVASEV_HANDLER_RET_NEXT; - - g_return_val_if_fail(object != NULL, GEVASEV_HANDLER_RET_NEXT); + g_return_val_if_fail(object != NULL, GEVASEV_HANDLER_RET_NEXT); g_return_val_if_fail(GTK_IS_GEVASEVH_GROUP_SELECTOR(object), GEVASEV_HANDLER_RET_NEXT); ev = GTK_GEVASEVH_GROUP_SELECTOR(object); - +/* fprintf(stderr,"gevasev_group_selector_mouse_down() gobj:%p mark:%p rect:%p\n", */ +/* gevasobj, ev->mark, ev->rect ); */ + + if( _b != 1 ) + return GEVASEV_HANDLER_RET_NEXT; + +/* fprintf(stderr,"gevasev_group_selector_mouse_down(2) gobj:%p mark:%p rect:%p\n", */ +/* gevasobj, ev->mark, ev->rect ); */ /* gevasev_group_selector_show(ev, ev->hot_clicked[_b - 1]);*/ - gdkev = gevas_get_current_event( ev->rect->gevas ); + int hadModifier = 0; + /* printf("got gdkev:%p\n", gdkev );*/ + gdkev = gevas_get_current_event( ev->rect->gevas ); if( gdkev ) /*&& gdkev->type == GDK_BUTTON_PRESS )*/ { GdkEventButton* gdkbev; -/* printf("got gdkev button\n");*/ + printf("got gdkev button\n"); gdkbev = (GdkEventButton*)gdkev; if( gdkbev->state & GDK_SHIFT_MASK ) { + hadModifier = 1; /* printf("gevasev_group_selector_mouse_down shift key\n");*/ } else if( gdkbev->state & GDK_CONTROL_MASK ) { + hadModifier = 1; /* printf("gevasev_group_selector_mouse_down control key\n");*/ } else @@ -577,6 +603,19 @@ } } + if( !g_slist_find( ev->m_rubber_band_starters, gevasobj ) ) + { + int size = g_slist_length( ev->m_rubber_band_starters ); + + if( !hadModifier ) + gevas_obj_collection_clear( ev->col ); + gevasevh_group_selector_floodselect( ev, _x, _y, 1, 1 ); + ev->selected_objs_lastadded = 0; + + return GEVASEV_HANDLER_RET_NEXT; + } + +/* gevasobj_set_layer(ev->rect, 999); */ gevasobj_move( ev->rect, _x, _y); gevasobj_resize( ev->rect, 2,2); gevasobj_show( ev->rect ); @@ -585,32 +624,38 @@ ev->tracking_ix = _x; ev->tracking_iy = _y; -/* printf("gevasev_group_selector_mouse_down() done\n");*/ +// printf("gevasev_group_selector_mouse_down() done\n"); return GEVASEV_HANDLER_RET_NEXT; } GEVASEV_HANDLER_RET gevasev_group_selector_mouse_up(GtkObject * object, GtkObject * gevasobj, int _b, - int _x, int _y) + int _x, int _y) { Evas_Coord x=0,y=0,w=0,h=0; Evas_List* list; void* data; GtkgEvasEvHGroupSelector *ev; +// printf("gevasev_group_selector_mouse_up() b:%d _x:%d _y:%d\n",_b,_x,_y); + if( _b != 1 ) return GEVASEV_HANDLER_RET_NEXT; -/* printf("gevasev_group_selector_mouse_up()\n");*/ - - g_return_val_if_fail(object != NULL, GEVASEV_HANDLER_RET_NEXT); + g_return_val_if_fail(object != NULL, GEVASEV_HANDLER_RET_NEXT); g_return_val_if_fail(GTK_IS_GEVASEVH_GROUP_SELECTOR(object), GEVASEV_HANDLER_RET_NEXT); ev = GTK_GEVASEVH_GROUP_SELECTOR(object); gevasobj_hide( ev->rect ); - ev->tracking = 0; +/* printf("gevasev_group_selector_mouse_up() _x:%d _y:%d tracking:%d\n", */ +/* _x,_y,ev->tracking); */ + if( !ev->tracking ) + return GEVASEV_HANDLER_RET_NEXT; + + ev->tracking = 0; + gevas_group_selector_get_wh( ev, _x, _y, &x, &y, &w, &h ); gevasevh_group_selector_floodselect( ev, x, y, w, h ); ev->selected_objs_lastadded = 0; @@ -641,7 +686,7 @@ if( cx < tix ) { moveit=1; - *x = cx; + *x = cx; } *rh = abs(cy - tiy); @@ -651,6 +696,9 @@ *y = cy; } +/* fprintf(stderr,"gevas_group_selector_get_wh() cx:%d cy:%d tix:%d tiy:%d x:%d y:%d rw:%d rh%d\n", */ +/* cx, cy, tix, tiy, *x, *y, *rw, *rh ); */ + if( moveit ) gevasobj_move ( ev->rect , *x, *y ); @@ -672,8 +720,10 @@ GEVASEV_HANDLER_RET_NEXT); ev = GTK_GEVASEVH_GROUP_SELECTOR(object); - if( ev->rect && ev->tracking ) + if( ev->rect && ev->tracking ) { +/* fprintf(stderr,"gevasev_group_selector_mouse_move() rect:%p tracking:%d\n", */ +/* ev->rect , ev->tracking ); */ Evas_Coord d1=0, d2=0, d3=0, d4=0; gevas_group_selector_get_wh( ev, _x, _y, &d1, &d2, &d3, &d4 ); } @@ -757,6 +807,7 @@ ev->rect = 0; ev->selected_objs = 0; ev->col = 0; + ev->m_rubber_band_starters = 0; } GtkObject *gevasevh_group_selector_new(void) @@ -828,3 +879,10 @@ return ev->col; } + +void +gevasevh_group_selector_add_rubber_band_starter( GtkgEvasEvHGroupSelector *ev, GtkObject* obj ) +{ + ev->m_rubber_band_starters = g_slist_append( ev->m_rubber_band_starters, obj ); +} + =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas2/src/gevasevh_group_selector.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- gevasevh_group_selector.h 15 Nov 2004 16:41:22 -0000 1.2 +++ gevasevh_group_selector.h 4 Aug 2005 04:12:16 -0000 1.3 @@ -94,7 +94,8 @@ GtkgEvas* gevas; - + // objects which start a rubber band selection + GSList *m_rubber_band_starters; }; struct _GtkgEvasEvHGroupSelectorClass { @@ -131,6 +132,9 @@ void gevasevh_group_selector_dragging( GtkgEvasEvHGroupSelector *ev, gboolean d ); GtkgEvasObjCollection* gevasevh_group_selector_get_collection( GtkgEvasEvHGroupSelector *ev ); + + + void gevasevh_group_selector_add_rubber_band_starter( GtkgEvasEvHGroupSelector *ev, GtkObject* obj ); #ifdef __cplusplus =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas2/src/gevasevh_popup.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- gevasevh_popup.c 27 Apr 2005 13:22:22 -0000 1.3 +++ gevasevh_popup.c 4 Aug 2005 04:12:16 -0000 1.4 @@ -114,6 +114,7 @@ return_val = FALSE; if (_b == 3) { + time_t tt = time( 0 ); gtk_signal_emit(GTK_OBJECT(object), _gevasevh_popup_signals[M_DOWN], @@ -121,8 +122,8 @@ (gint) _b, (gint) _x, (gint) _y, &return_val); /** To keep evas happy about the mouse state **/ - evas_event_feed_mouse_move( gevasobj_get_evas(gevasobj), _x, _y, 0 ); - evas_event_feed_mouse_up( gevasobj_get_evas(gevasobj), _b, EVAS_BUTTON_NONE, 0 ); + evas_event_feed_mouse_move( gevasobj_get_evas(gevasobj), _x, _y, tt, 0 ); + evas_event_feed_mouse_up( gevasobj_get_evas(gevasobj), _b, EVAS_BUTTON_NONE, tt, 0 ); if (ev->user_gtk_menu) { GdkEvent *gev = =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas2/src/gevasevh_selectable.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- gevasevh_selectable.c 20 Nov 2004 06:14:52 -0000 1.5 +++ gevasevh_selectable.c 4 Aug 2005 04:12:16 -0000 1.6 @@ -161,7 +161,7 @@ if( *x+objw > vx+vw ) *x = vx+vw-objw; if( *y+objh > vy+vh ) *y = vy+vh-objh; - /* printf("gevas_selectable_move() vx:%d vy:%d vw:%d vh:%d\n",vx,vy,vw,vh); */ +/* printf("gevas_selectable_move() vx:%d vy:%d vw:%d vh:%d\n",vx,vy,vw,vh); */ } return GEVASOBJ_SIG_OK; @@ -295,7 +295,7 @@ gint32 by = ev->border_y; int lay=0; -/* printf("showing for selectable\n"); */ +// printf("gevas_selectable_select() x:%d y:%d bx:%d by:%d\n",x,y,bx,by); gevasobj_get_geometry( ev->normal, &x, &y, &w, &h ); gevasobj_move( ev->selected, x - bx, y - by); gevasobj_resize( ev->selected, w + 2*bx, h + 2*by); @@ -418,6 +418,8 @@ ev->tracking_x = _x; ev->tracking_y = _y; +// fprintf(stderr,"gevasev_selectable_mouse_down() _x:%d _y:%d\n", _x, _y ); + gdkev = gevas_get_current_event( ev->normal->gevas ); // printf("gevasev_selectable_mouse_down() got gdkev:%p\n", gdkev ); if( gdkev ) /*&& gdkev->type == GDK_BUTTON_PRESS )*/ @@ -501,7 +503,18 @@ ev = GTK_GEVASEVH_SELECTABLE(object); evh_sel = GTK_GEVASEVH_GROUP_SELECTOR(ev->evh_selector); -// printf("gevasev_selectable_mouse_move() this:%p tracking:%d\n", object, ev->tracking ); + + +/* printf("gevasev_selectable_mouse_move() this:%p tracking:%d tx:%d ty:%d _x:%d _y:%d\n", */ +/* object, ev->tracking, ev->tracking_x, ev->tracking_y, _x, _y ); */ +/* if( object ) */ +/* { */ +/* Evas_Coord x=0,y=0; */ +/* gevasobj_get_location( GTK_GEVASOBJ(gevasobj), &x, &y ); */ +/* printf("gevasev_selectable_mouse_move() size:%d getloc.x:%d getlox.y:%d\n", */ +/* sizeof(Evas_Coord), x, y ); */ +/* } */ + if( ev->tracking ) { @@ -509,7 +522,8 @@ dx = _x - ev->tracking_x; dy = _y - ev->tracking_y; -/* printf("selectable_mouse_move() ev:%p dx:%d dy:%d\n",ev, dx,dy); */ +/* printf("selectable_mouse_move() ev:%p dx:%d dy:%d tx:%d ty:%d\n",ev, dx,dy, */ +/* ev->tracking_x, ev->tracking_y ); */ gevasevh_group_selector_movesel( evh_sel, dx, dy ); ev->tracking_x = _x; =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas2/src/gevasimage.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- gevasimage.h 15 Nov 2004 16:41:22 -0000 1.5 +++ gevasimage.h 4 Aug 2005 04:12:16 -0000 1.6 @@ -111,6 +111,9 @@ void gevasimage_set_image_size( GtkgEvasObj * object, int w, int h); void gevasimage_get_image_border(GtkgEvasObj * object, int *l, int *r, int *t, int *b); + void gevasimage_set_smooth_scale( GtkgEvasObj* object, int v ); + int gevasimage_get_smooth_scale( GtkgEvasObj* object ); + /** * Scale the image so that both its width and height are smaller than =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas2/src/gevasobj.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -3 -r1.9 -r1.10 --- gevasobj.c 27 Apr 2005 14:34:16 -0000 1.9 +++ gevasobj.c 4 Aug 2005 04:12:16 -0000 1.10 @@ -41,6 +41,7 @@ #include "project.h" #include "gevas_sprite.h" +#include "gevasevh_group_selector.h" /* Always disable NLS, since we have no config.h; * a real app would not do this of course. @@ -293,7 +294,7 @@ } void _gevasobj_move(GtkgEvasObj * object, double x, double y) { - evas_object_move( EVASO(object), x, y); + evas_object_move( EVASO(object), (Evas_Coord)x, (Evas_Coord)y); gevasobj_queue_redraw(object); } void _gevasobj_resize(GtkgEvasObj * object, double w, double h) @@ -387,7 +388,13 @@ } } - + + if( GTK_IS_GEVASEVH_GROUP_SELECTOR(h) ) + { + gevasevh_group_selector_add_rubber_band_starter( GTK_GEVASEVH_GROUP_SELECTOR(h), + GTK_OBJECT( object )); + + } } void _gevasobj_remove_evhandler(GtkgEvasObj * object, GtkObject * h) @@ -399,7 +406,7 @@ ev->ev_handlers = g_slist_remove(ev->ev_handlers, h); } -GSList *gevasobj_get_evhandlers(GtkgEvasObj * object) +GSList *gevasobj_get_evhandlers(GtkgEvasObj * object ) { GtkgEvasObj *ev; @@ -733,6 +740,7 @@ gint32 x, y; gevasobj_get_location( object, &lx, &ly ); + lx += dx; ly += dy; =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas2/src/gevasobj.h,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- gevasobj.h 15 Nov 2004 16:41:22 -0000 1.6 +++ gevasobj.h 4 Aug 2005 04:12:16 -0000 1.7 @@ -178,7 +178,7 @@ void _gevas_set_obj(GtkObject * object, Evas_Object* eobj); Evas_Object* _gevas_get_obj(GtkObject * object); void _gevasobj_ensure_obj_free(GtkObject * object); - GSList *gevasobj_get_evhandlers(GtkgEvasObj * object); + GSList *gevasobj_get_evhandlers(GtkgEvasObj * object ); GtkgEvasObj* gevasobj_from_evasobj( Evas_Object* eo ); =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas2/src/gevastwin.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -3 -r1.8 -r1.9 --- gevastwin.c 20 Nov 2004 06:14:52 -0000 1.8 +++ gevastwin.c 4 Aug 2005 04:12:16 -0000 1.9 @@ -172,11 +172,31 @@ { GtkgEvasTwin *ev; +// fprintf(stderr,"gevastwin_destroy()\n"); + g_return_if_fail(object != NULL); g_return_if_fail(GTK_IS_GEVASTWIN(object)); ev = GTK_GEVASTWIN(object); + if( ev->extra_objects ) + { + Evas_List* li = gevas_obj_collection_to_evas_list( ev->extra_objects ); + for( ; li; li = li->next) + { + if(li->data) + { + GtkgEvasObj* gobj = (GtkgEvasObj*)li->data; + evas_object_del( gobj->eobj ); + } + } + } + +/* if( ev->mainobj ) */ +/* gevastwin_destroy( ev->mainobj ); */ +/* if( ev->auxobj ) */ +/* gevastwin_destroy( ev->auxobj ); */ + /* Chain up */ if (GTK_OBJECT_CLASS(parent_class)->destroy) (*GTK_OBJECT_CLASS(parent_class)->destroy) (object); @@ -238,10 +258,14 @@ /* ev->mainobj, ev->auxobj, object ); */ if (ev->mainobj == object) { + printf("gevastwin_move_xxx(MO) extra object. main:%lp aux:%lp obj:%lp\n", + ev->mainobj, ev->auxobj, object ); ev->main_obj_move(object, x, y); _gevastwin_sync_obj(ev, ev->auxobj); } else if (ev->auxobj == object) { + printf("gevastwin_move_xxx(AO) extra object. main:%lp aux:%lp obj:%lp\n", + ev->mainobj, ev->auxobj, object ); ev->aux_obj_move(object, x, y); _gevastwin_sync_obj(ev, ev->mainobj); } @@ -372,26 +396,36 @@ setup_object_movements( GTK_OBJECT(ev), o ); } -void gevastwin_add_extra_objects( GtkgEvasTwin* ev, GtkgEvasObjCollection* v ) +void gevastwin_add_extra_object( GtkgEvasTwin* ev, GtkgEvasObj* gobj ) { - ev->extra_objects = v; + if( !ev->extra_objects ) + { + ev->extra_objects = gevas_obj_collection_new( GTK_GEVAS(gobj->gevas) ); + } + + gevas_obj_collection_add( ev->extra_objects, gobj ); + + gtk_object_set_data(GTK_OBJECT(gobj), + GEVASTWIN_EXTRA_OBJ_MOVE_FUNC_KEY, + (void*)gobj->move ); + + gobj->move = _gevastwin_move_xxx; + gtk_object_set_data(GTK_OBJECT(gobj), GEVASTWIN_BACKWARD_LOOKUP_KEY, ev); +/* gtk_signal_connect( GTK_OBJECT(gobj), "resize", */ +/* GTK_SIGNAL_FUNC(twin_object_resized), ev ); */ +} + - Evas_List* li = gevas_obj_collection_to_evas_list( ev->extra_objects ); +void gevastwin_add_extra_objects( GtkgEvasTwin* ev, GtkgEvasObjCollection* v ) +{ + Evas_List* li = gevas_obj_collection_to_evas_list( v ); for( ; li; li = li->next) + { if(li->data) { - GtkgEvasObj* gobj = (GtkgEvasObj*)li->data; - - gtk_object_set_data(GTK_OBJECT(gobj), - GEVASTWIN_EXTRA_OBJ_MOVE_FUNC_KEY, - (void*)gobj->move ); - - gobj->move = _gevastwin_move_xxx; - gtk_object_set_data(GTK_OBJECT(gobj), GEVASTWIN_BACKWARD_LOOKUP_KEY, ev); -/* gtk_signal_connect( GTK_OBJECT(gobj), "resize", */ -/* GTK_SIGNAL_FUNC(twin_object_resized), ev ); */ - + gevastwin_add_extra_object( ev, li->data ); } + } } =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas2/src/gevastwin.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- gevastwin.h 20 Nov 2004 06:14:52 -0000 1.5 +++ gevastwin.h 4 Aug 2005 04:12:16 -0000 1.6 @@ -85,6 +85,7 @@ void gevastwin_sync_obj( GtkgEvasTwin* ev, GtkgEvasObj* object ); void gevastwin_add_extra_objects( GtkgEvasTwin* ev, GtkgEvasObjCollection* v ); + void gevastwin_add_extra_object( GtkgEvasTwin* ev, GtkgEvasObj* obj ); #define GEVASTWIN_BACKWARD_LOOKUP_KEY "___gevastwin_backward_key" =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas2/src/project.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- project.c 15 Aug 2002 02:38:06 -0000 1.1 +++ project.c 4 Aug 2005 04:12:16 -0000 1.2 @@ -31,6 +31,7 @@ #include "project.h" #include <gtk/gtkmarshal.h> #include <gtk/gtksignal.h> +#include <stdio.h> /* I was using this from gtk+1.2.x and then they took it from me. */ /* Thus I have replicated this code here. This might be changed to */ @@ -74,6 +75,7 @@ g_value_get_pointer (param_values + 2), data2); +// fprintf(stderr,"gtk_marshal_BOOL__PTR_PTR()\n"); g_value_set_int (return_value, v_return); } @@ -118,7 +120,7 @@ register GMarshalFunc_BOOL__POINTER_INT_INT_INT callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; - gint v_return; + gint v_return = 0; g_return_if_fail (return_value != NULL); g_return_if_fail (n_param_values == 5); @@ -142,7 +144,9 @@ g_value_get_int (param_values + 4), data2); - g_value_set_int (return_value, v_return); +// fprintf(stderr,"gtk_marshal_BOOL__PTR_3INTS()\n"); + g_value_set_boolean (return_value, v_return); +// g_value_set_int (return_value, v_return); } @@ -188,5 +192,6 @@ g_value_get_int (param_values + 3), data2); +//fprintf(stderr,"gtk_marshal_BOOL__INT_INT_INT()\n"); g_value_set_int (return_value, v_return); } ------------------------------------------------------- SF.Net email is Sponsored by the Better Software Conference & EXPO September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs