From: <enl...@li...> - 2001-03-28 14:59:41
|
Enlightenment CVS committal Author : monkeyiq Project : misc Module : gevas Dir : misc/gevas/src Modified Files: gevas.c gevas.h gevasevh_drag.c gevasevh_drag.h gevasevh_selectable.c gevasevh_selectable.h gevasobj.c gevasobj.h Log Message: Pollished up on the D&D stuff a little. After this check in I will fold and run sed on stuff so that none of my C++ comments ever make in to the repository ever again. Will prolly commit a non // version too, so unless you seek d&d don't update for a few days. =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas/src/gevas.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -3 -r1.14 -r1.15 --- gevas.c 2001/03/27 03:43:14 1.14 +++ gevas.c 2001/03/28 14:59:39 1.15 @@ -1092,6 +1092,29 @@ } +void gevas_get_viewport_area( GtkgEvas* gevas, gint* x, gint* y, gint* w, gint* h ) +{ + GtkAdjustment* a = 0; + + if( gevas->scrolledwindow ) + { + if( a = gtk_scrolled_window_get_hadjustment( gevas->scrolledwindow )) + { + *x = a->value; + *w = a->page_size; + } + + if( a = gtk_scrolled_window_get_vadjustment( gevas->scrolledwindow )) + { + *y = a->value; + *h = a->page_size; + } + } + + +} + + gint gevas_view_redraw_cb(gpointer data) { GtkgEvas* gevas = (GtkgEvas *) data; =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas/src/gevas.h,v retrieving revision 1.12 retrieving revision 1.13 diff -u -3 -r1.12 -r1.13 --- gevas.h 2001/03/26 10:24:57 1.12 +++ gevas.h 2001/03/28 14:59:39 1.13 @@ -190,6 +190,8 @@ Evas gevas_get_evas(GtkgEvas * gevas); GdkEvent *gevas_get_current_event(GtkgEvas * gevas); + void gevas_get_viewport_area( GtkgEvas* gevas, gint* x, gint* y, gint* w, gint* h ); + #define GEVAS_CHECKED_BG_IMAGE_FILENAME PACKAGE_DATA_DIR"/checks.png" #define GEVAS_MAX_MIDDLEB_SCROLL_PIXELS 150 =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas/src/gevasevh_drag.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- gevasevh_drag.c 2001/02/09 13:29:22 1.4 +++ gevasevh_drag.c 2001/03/28 14:59:39 1.5 @@ -80,6 +80,7 @@ return GEVASEV_HANDLER_RET_NEXT; } + GEVASEV_HANDLER_RET gevasev_drag_mouse_down(GtkObject * object, GtkObject * gevasobj, int _b, int _x, int _y) @@ -95,7 +96,7 @@ ev->dragging = 1; ev->click_x_offset = _x - x; ev->click_y_offset = _y - y; - } + } return GEVASEV_HANDLER_RET_NEXT; } @@ -123,11 +124,20 @@ g_return_val_if_fail(GTK_IS_GEVASEVH_DRAG(object), GEVASEV_HANDLER_RET_NEXT); ev = GTK_GEVASEVH_DRAG(object); - if (ev->dragging && _b == 1) { + if (ev->dragging && _b == 1) + { + gint x = _x - ev->click_x_offset; + gint y = _y - ev->click_y_offset; + + printf("gevasev_drag_mouse_move() x:%d y:%d _x:%d _y:%d\n",x,y,_x,_y); + + + if( x < 0 ) x = 0; + if( y < 0 ) y = 0; + - gevasobj_move(GTK_GEVASOBJ(gevasobj), - _x - ev->click_x_offset, _y - ev->click_y_offset); - gevasobj_queue_redraw(GTK_GEVASOBJ(gevasobj)); + gevasobj_move(GTK_GEVASOBJ(gevasobj), x, y ); +// gevasobj_queue_redraw(GTK_GEVASOBJ(gevasobj)); } return GEVASEV_HANDLER_RET_NEXT; } =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas/src/gevasevh_drag.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- gevasevh_drag.h 2001/01/20 06:06:19 1.2 +++ gevasevh_drag.h 2001/03/28 14:59:39 1.3 @@ -51,6 +51,14 @@ gint dragging; gdouble click_x_offset; /* when the mouse down occurs store the offset into the Evas_Object */ gdouble click_y_offset; /* so that the move handler can set x/y properly */ + + /* When we are dragging we snapshot the visible area of the gevas so that + * the users drag operations do not allow objects off the viewable area (optional) */ + gint canvas_x; + gint canvas_y; + gint canvas_w; + gint canvas_h; + }; struct _GtkgEvasEvHDragClass { =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas/src/gevasevh_selectable.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- gevasevh_selectable.c 2001/03/27 03:43:14 1.6 +++ gevasevh_selectable.c 2001/03/28 14:59:39 1.7 @@ -156,6 +156,37 @@ } } +void gevasevh_selectable_set_confine( GtkgEvasEvHSelectable* evh, gboolean c ) +{ + evh->confine = c; +} + + +static void _gevas_selectable_confine( + GtkgEvasEvHSelectable * ev, + GtkgEvas* gevas, + double* x, double* y ) +{ + if( ev->confine ) + { + gint vx, vy, vw, vh; + double objw, objh; + + + + gevas_get_viewport_area( gevas, &vx, &vy, &vw, &vh ); + gevasobj_get_size( ev->normal, &objw, &objh ); + + if( *x < vx ) *x = vx; + if( *y < vy ) *y = vy; + if( *x+objw > vw ) *x = vw-objw; + if( *y+objh > vh ) *y = vh-objh; + + /* printf("gevas_selectable_move() vx:%d vy:%d vw:%d vh:%d\n",vx,vy,vw,vh); */ + } +} + + /**/ /* Callback for group_selector.*/ /**/ @@ -164,11 +195,14 @@ double x=0, y=0; gint32 bx = ev->border_x; gint32 by = ev->border_y; - - gevasobj_get_location( ev->normal, &x, &y ); + + gevasobj_get_location( ev->normal, &x, &y ); x+=dx; y+=dy; -/* printf("gevas_selectable_move() x:%f y:%f dx:%d dy:%d\n",x,y,dx,dy);*/ + + _gevas_selectable_confine( ev, ev->normal->gevas, &x, &y ); + +// printf("gevas_selectable_move() x:%f y:%f dx:%d dy:%d\n",x,y,dx,dy); gevasobj_move( ev->normal, x, y ); gevasobj_move( ev->selected, x-bx, y-by); } =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas/src/gevasevh_selectable.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- gevasevh_selectable.h 2001/03/25 23:12:29 1.3 +++ gevasevh_selectable.h 2001/03/28 14:59:39 1.4 @@ -69,6 +69,11 @@ gint32 border_x; gint32 border_y; + + /* Are we locking the x,y to not allow the user to drag objects off the viewport */ + /* Primarily used for d&d support, but is optional */ + gboolean confine; + }; #define gevasevh_selectable_gevasobj( a ) ((GTK_GEVASEVH_SELECTABLE(a))->normal) @@ -87,7 +92,8 @@ GtkgEvasEvHSelectable* ev, GtkgEvasObj* nor ); void gevasevh_selectable_set_selector( GtkgEvasEvHSelectable* evh, GtkObject* evh_selector ); - +void gevasevh_selectable_set_confine( GtkgEvasEvHSelectable* evh, gboolean c ); + =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas/src/gevasobj.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- gevasobj.c 2001/03/26 10:24:57 1.6 +++ gevasobj.c 2001/03/28 14:59:39 1.7 @@ -240,6 +240,11 @@ double w, h; evas_get_geometry(EVAS(object), EVASO(object), x, y, &w, &h); } +void gevasobj_get_size(GtkgEvasObj * object, double *w, double *h) +{ + double x, y; + evas_get_geometry(EVAS(object), EVASO(object), &x, &y, w, h); +} void _gevasobj_show(GtkgEvasObj * object) { =================================================================== RCS file: /cvsroot/enlightenment/misc/gevas/src/gevasobj.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- gevasobj.h 2001/02/09 16:55:05 1.4 +++ gevasobj.h 2001/03/28 14:59:39 1.5 @@ -142,7 +142,8 @@ void gevasobj_get_geometry(GtkgEvasObj * object, double *x, double *y, double *w, double *h); void gevasobj_get_location(GtkgEvasObj * object, double *x, double *y); - void gevasobj_show(GtkgEvasObj * object); + void gevasobj_get_size(GtkgEvasObj * object, double *w, double *h); + void gevasobj_show(GtkgEvasObj * object); void gevasobj_hide(GtkgEvasObj * object); void gevasobj_get_color(GtkgEvasObj * object, int *r, int *g, int *b, int *a); |