Enlightenment CVS committal Author : monkeyiq Project : misc Module : gevas2
Dir : misc/gevas2/src Modified Files: gevas.c gevas.h gevasedje.c gevasedje.h gevasevh_drag.c gevasevh_to_gtk_signals.c Log Message: better edje support. some cleanups for gtk warnings. =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas2/src/gevas.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -3 -r1.11 -r1.12 --- gevas.c 27 Apr 2005 14:34:16 -0000 1.11 +++ gevas.c 29 Apr 2005 05:19:15 -0000 1.12 @@ -60,7 +60,10 @@ #include "Evas_Engine_Software_X11.h" -#define EVAS_FREE_HAS_BUGS +#include <Ecore_X.h> +#include <Ecore_Evas.h> + +//#define EVAS_FREE_HAS_BUGS /* Always disable NLS, since we have no config.h; @@ -234,7 +237,7 @@ } /* FIXME: find a better iterator for glist. */ -#define __HANDLE_EVENT_DISPATCH( func_to_call ) { \ +#define __HANDLE_EVENT_DISPATCH( func_to_call ) if( _data ) { \ GSList* hans; \ int i=0,size=0; \ hans = gevasobj_get_evhandlers( GTK_GEVASOBJ(_data) ); \ @@ -282,7 +285,36 @@ int _x = ev->output.x; int _y = ev->output.y; - printf("__gevas_mouse_down() _b:%d\n",_b); + // _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); + +/* { */ +/* 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) } @@ -294,6 +326,10 @@ int _x = ev->output.x; int _y = ev->output.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_up) } void @@ -304,7 +340,10 @@ 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\n",_b); */ + // _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) } @@ -522,6 +561,7 @@ GTK_WIDGET_SET_FLAGS(GTK_WIDGET(ev), GTK_CAN_FOCUS); /* printf("gevas_init() 1\n"); */ + ev->ecore_timer_id = 0; ev->scrolledwindow = 0; ev->evas = evas_new(); ev->show_checked_bg = 0; @@ -570,6 +610,9 @@ // printf("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); @@ -876,6 +919,37 @@ GTK_WIDGET_SET_FLAGS(widget, GTK_REALIZED); #if 0 + /* We can't go this way because it's not easy to + convert a Window into a gdk_window + */ + Ecore_X_Window parent_ewin = GDK_WINDOW_XID(gtk_widget_get_parent_window(widget)); + Ecore_Evas* ee = ecore_evas_software_x11_new( + 0, parent_ewin, + widget->allocation.x, widget->allocation.y, + widget->allocation.width, widget->allocation.height ); +// ecore_evas_show(ee); + evas = ecore_evas_get( ee ); + ev->evas = evas; + + Ecore_X_Window ewin = ecore_evas_software_x11_window_get( ee ); + GdkWindow* gwin = gdk_window_foreign_new( ewin ); + printf("ecore_evas:%lx evas:%lx ewin:%lx gwin:%lx\n",ee,evas,ewin,gwin); + widget->window = gwin; + gdk_window_set_user_data(widget->window, widget); + evas = ev->evas; + + widget->style = gtk_style_attach(widget->style, widget->window); + gtk_style_set_background(widget->style, widget->window, GTK_STATE_NORMAL); + +/* gdk_window_set_back_pixmap(widget->window, NULL, FALSE); */ + +/* // FIXME: Maybe we can do something better than single buffering? */ +/* gtk_widget_set_double_buffered( widget, 0); */ + return; +#endif + + +#if 0 Visual *vis; Colormap cmap; GdkVisual *gdk_vis; @@ -920,11 +994,12 @@ attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; - widget->window = gdk_window_new(gtk_widget_get_parent_window(widget), + widget->window = gdk_window_new(gtk_widget_get_parent_window(widget), &attributes, attributes_mask); gdk_window_set_user_data(widget->window, widget); evas = ev->evas; + /** ** **/ /* Style */ @@ -956,7 +1031,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); @@ -1292,7 +1367,7 @@ // fprintf(stderr,"gevas_view_redraw_cb! gevas:%p\n", gevas); - evas_obscured_clear(ev->evas); +// evas_obscured_clear(ev->evas); evas_render(ev->evas); @@ -1324,7 +1399,33 @@ return FALSE; } +gint gevas_edje_animate_timer_cb( gpointer data ) +{ + if (!GTK_WIDGET_MAPPED(GTK_WIDGET(data))) + return 1; + + ecore_main_loop_iterate(); + gevas_queue_redraw( GTK_GEVAS(data) ); + return 1; // call again +} + +void gevas_setup_ecore(GtkgEvas * gevas) +{ + GtkgEvas * ev = gevas; + + if( ev->ecore_timer_id ) + g_source_remove( ev->ecore_timer_id ); + int fps = 15; + if( ecore_animator_frametime_get() ) + { + fps = 1.0/ecore_animator_frametime_get(); + } + + ev->ecore_timer_id = g_timeout_add( 1000.0 / fps, + gevas_edje_animate_timer_cb, + gevas ); +} void gevas_queue_redraw(GtkgEvas * gevas) { @@ -1337,10 +1438,13 @@ /* This call seems to be much slower to use.*/ /*gtk_widget_queue_draw( gevas );*/ - if (gevas->current_idle) - gtk_idle_remove(gevas->current_idle); + if (!gevas->current_idle) + gevas->current_idle = gtk_idle_add(gevas_view_redraw_cb, gevas); + +/* if (gevas->current_idle) */ +/* gtk_idle_remove(gevas->current_idle); */ - gevas->current_idle = gtk_idle_add(gevas_view_redraw_cb, gevas); +/* gevas->current_idle = gtk_idle_add(gevas_view_redraw_cb, gevas); */ } =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas2/src/gevas.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- gevas.h 15 Aug 2002 02:38:06 -0000 1.1 +++ gevas.h 29 Apr 2005 05:19:15 -0000 1.2 @@ -33,6 +33,8 @@ #include <gtk/gtkwidget.h> #include <Evas.h> +#include <Ecore.h> +#include <Ecore_X.h> @@ -147,7 +149,9 @@ // Place to find images GList* image_prefix_list; - + + // for using edjies + guint ecore_timer_id; }; struct _GtkgEvasClass { @@ -193,6 +197,7 @@ guint gevas_get_type(void); GtkWidget *gevas_new(void); + void gevas_setup_ecore(GtkgEvas * gevas); void gevas_queue_redraw(GtkgEvas * gevas); GdkEvent *gevas_get_current_event(GtkgEvas * gevas); =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas2/src/gevasedje.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- gevasedje.c 19 Nov 2004 15:14:15 -0000 1.1 +++ gevasedje.c 29 Apr 2005 05:19:15 -0000 1.2 @@ -139,15 +139,39 @@ ev->m_edje = 0; } -GtkgEvasEdje *gevasedje_new(void) +GtkgEvasEdje * +gevasedje_new(void) { GtkgEvasEdje *ev; ev = gtk_type_new(gevasedje_get_type()); + ev->m_edje = 0; return GTK_GEVASEDJE(ev); } +GtkgEvasEdje * +gevasedje_new_with_canvas( gpointer gevas ) +{ + GtkgEvasEdje *ev; + + ev = gtk_type_new(gevasedje_get_type()); + gevasobj_set_gevas( ev, gevas ); + Evas* evas = gevas_get_evas(GTK_GEVAS(gevas)); + Evas_Object* edje = edje_object_add( evas ); + ev->m_edje = edje; + _gevas_set_obj( GTK_OBJECT(ev), ev->m_edje ); + + return GTK_GEVASEDJE(ev); +} + +void gevasedje_set_file( GtkgEvasEdje* gedje, const char* filename, const char* part ) +{ + edje_object_file_set(gedje->m_edje, filename, part ); +} + + + /* GtkObject functions */ =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas2/src/gevasedje.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- gevasedje.h 19 Nov 2004 15:14:15 -0000 1.1 +++ gevasedje.h 29 Apr 2005 05:19:15 -0000 1.2 @@ -33,8 +33,9 @@ #define INC_GTK_GEVASEDJE_H #include <gtk/gtkobject.h> -#include "gevasobj.h" -#include "gevas.h" +#include <gevasobj.h> +#include <gevas.h> +#include <Edje.h> #ifdef __cplusplus extern "C" { @@ -72,6 +73,9 @@ guint gevasedje_get_type(void); GtkgEvasEdje *gevasedje_new(void); + GtkgEvasEdje *gevasedje_new_with_canvas( gpointer gevas ); + void gevasedje_set_file( GtkgEvasEdje* gedje, const char* filename, const char* part ); + void gevasedje_set_edje( GtkgEvasEdje* ev, Evas_Object* e ); Evas_Object* gevasedje_get_edje( GtkgEvasEdje* ev ); =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas2/src/gevasevh_drag.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- gevasevh_drag.c 27 Apr 2005 13:22:22 -0000 1.3 +++ gevasevh_drag.c 29 Apr 2005 05:19:15 -0000 1.4 @@ -92,14 +92,14 @@ GEVASEV_HANDLER_RET_NEXT); ev = GTK_GEVASEVH_DRAG(object); - printf("gevasev_drag_mouse_down() b:%d\n", _b ); - - if (_b == 1) { + printf("gevasev_drag_mouse_down()\n"); + if (_b == 1) { Evas_Coord x = 0, y = 0, w = 0, h = 0; gevasobj_get_geometry(GTK_GEVASOBJ(gevasobj), &x, &y, &w, &h); ev->dragging = 1; ev->click_x_offset = _x - x; ev->click_y_offset = _y - y; + printf("Starting to drag\n"); } return GEVASEV_HANDLER_RET_NEXT; } =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas2/src/gevasevh_to_gtk_signals.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- gevasevh_to_gtk_signals.c 15 Aug 2002 02:38:06 -0000 1.1 +++ gevasevh_to_gtk_signals.c 29 Apr 2005 05:19:15 -0000 1.2 @@ -109,6 +109,8 @@ gevasev_to_gtk_signal_mouse_down(GtkObject * object, GtkObject * gevasobj, int _b, int _x, int _y) { + printf("gevasev_to_gtk_signal_mouse_down()\n"); + gboolean return_val; return_val = FALSE; gtk_signal_emit(GTK_OBJECT(object), ------------------------------------------------------- SF.Net email is sponsored by: Tell us your software development plans! Take this survey and enter to win a one-year sub to SourceForge.net Plus IDC's 2005 look-ahead and a copy of this survey Click here to start! http://www.idcswdc.com/cgi-bin/survey?id=105hix _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs