Enlightenment CVS committal
Author : monkeyiq
Project : misc
Module : gevas
Dir : misc/gevas/src
Modified Files:
gevasev_handler.c gevasev_handler.h gevasevh_drag.c
gevasevh_group_selector.c gevasevh_group_selector.h
gevasevh_selectable.c gevasevh_selectable.h gevasgrad.c
gevasgrad.h gevasobj.c
Log Message:
Ramped up selection... control+click and shift+click now work as
expected (by me :).
You can also drag out a selection with shift / control and have the
new selection added...
Maybe I should have drag out box + control unselect items, but the current
stuff is a great move in the right direction for witme selection... more
advanced selection stuff will come in time.
===================================================================
RCS file: /cvsroot/enlightenment/misc/gevas/src/gevasev_handler.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- gevasev_handler.c 2001/01/20 06:06:19 1.2
+++ gevasev_handler.c 2001/02/09 13:16:56 1.3
@@ -75,6 +75,11 @@
static void gevasevh_get_arg(GtkObject * object, GtkArg * arg, guint arg_id);
static void gevasevh_set_arg(GtkObject * object, GtkArg * arg, guint arg_id);
+static GEVASEV_HANDLER_PRIORITY gevasev_handler_get_priority( GtkgEvasEvH* evh )
+{
+ return GEVASEV_HANDLER_PRIORITY_NORMAL;
+}
+
GEVASEV_HANDLER_RET
gevasev_handler_mouse_in(GtkObject * object, GtkObject * gevasobj, int _b,
int _x, int _y)
@@ -157,9 +162,10 @@
klass->handler_mouse_down = gevasev_handler_mouse_down;
klass->handler_mouse_up = gevasev_handler_mouse_up;
klass->handler_mouse_move = gevasev_handler_mouse_move;
+ klass->get_priority = gevasev_handler_get_priority;
gtk_object_add_arg_type(GTK_GEVASEVH_GEVASOBJ,
- GTK_TYPE_POINTER, GTK_ARG_WRITABLE, ARG_GEVAS_OBJ);
+ GTK_TYPE_POINTER, GTK_ARG_WRITABLE, ARG_GEVAS_OBJ);
}
static void gevasevh_init(GtkgEvasEvH * ev)
@@ -236,3 +242,5 @@
break;
}
}
+
+
===================================================================
RCS file: /cvsroot/enlightenment/misc/gevas/src/gevasev_handler.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- gevasev_handler.h 2001/01/20 06:06:19 1.2
+++ gevasev_handler.h 2001/02/09 13:16:56 1.3
@@ -45,66 +45,84 @@
#define GTK_IS_GEVASEVH(obj) GTK_CHECK_TYPE (obj, gevasevh_get_type ())
#define GTK_GEVASEVH_GEVASOBJ "GtkgEvasEvH::gevas_object"
#define gevasimage_set_gevasobj( gevaso, val ) \
- gtk_object_set(GTK_OBJECT(gevaso), \
- GTK_GEVASEVH_GEVASOBJ, (gpointer) val, NULL);
- enum _GEVASEV_HANDLER_RET {
- GEVASEV_HANDLER_RET_NEXT,
- GEVASEV_HANDLER_RET_CHOMP // event is eaten.
- };
- typedef enum _GEVASEV_HANDLER_RET GEVASEV_HANDLER_RET;
-
-
- typedef struct _GtkgEvasEvH GtkgEvasEvH;
- typedef struct _GtkgEvasEvHClass GtkgEvasEvHClass;
-
-
- struct _GtkgEvasEvH {
- GtkObject gobj;
- GtkgEvasObj *eobj;
-
- };
-
- struct _GtkgEvasEvHClass {
- GtkObjectClass parent_class;
-
-
- GEVASEV_HANDLER_RET(*handler_mouse_in) (GtkObject * object,
- GtkObject * gevasobj,
- int _b, int _x, int _y);
- GEVASEV_HANDLER_RET(*handler_mouse_out) (GtkObject * object,
- GtkObject * gevasobj, int _b,
- int _x, int _y);
- GEVASEV_HANDLER_RET(*handler_mouse_down) (GtkObject * object,
- GtkObject * gevasobj, int _b,
- int _x, int _y);
- GEVASEV_HANDLER_RET(*handler_mouse_up) (GtkObject * object,
- GtkObject * gevasobj, int _b,
- int _x, int _y);
- GEVASEV_HANDLER_RET(*handler_mouse_move) (GtkObject * object,
- GtkObject * gevasobj, int _b,
- int _x, int _y);
- };
+ gtk_object_set(GTK_OBJECT(gevaso), \
+ GTK_GEVASEVH_GEVASOBJ, (gpointer) val, NULL);
+enum _GEVASEV_HANDLER_RET {
+ GEVASEV_HANDLER_RET_NEXT,
+ GEVASEV_HANDLER_RET_CHOMP // event is eaten.
+};
+typedef enum _GEVASEV_HANDLER_RET GEVASEV_HANDLER_RET;
+
+//
+// Higher values are called first.
+//
+// FIXME: only HI is done, any other value == lower than HI
+#define GEVASEV_HANDLER_PRIORITY_HIGHEST 10000
+#define GEVASEV_HANDLER_PRIORITY_HI 100
+#define GEVASEV_HANDLER_PRIORITY_NORMAL 0
+#define GEVASEV_HANDLER_PRIORITY_LOW -100
+#define GEVASEV_HANDLER_PRIORITY_LOWEST -10000
+typedef gint32 GEVASEV_HANDLER_PRIORITY;
+
+typedef struct _GtkgEvasEvH GtkgEvasEvH;
+typedef struct _GtkgEvasEvHClass GtkgEvasEvHClass;
+
+
+struct _GtkgEvasEvH
+{
+ GtkObject gobj;
+ GtkgEvasObj *eobj;
+};
+
+struct _GtkgEvasEvHClass {
+ GtkObjectClass parent_class;
+
+ GEVASEV_HANDLER_RET(*handler_mouse_in) (GtkObject * object,
+ GtkObject * gevasobj,
+ int _b, int _x, int _y);
+ GEVASEV_HANDLER_RET(*handler_mouse_out) (GtkObject * object,
+ GtkObject * gevasobj, int _b,
+ int _x, int _y);
+
+ GEVASEV_HANDLER_RET(*handler_mouse_down) (GtkObject * object,
+ GtkObject * gevasobj, int _b,
+ int _x, int _y);
+
+ GEVASEV_HANDLER_RET(*handler_mouse_up) (GtkObject * object,
+ GtkObject * gevasobj, int _b,
+ int _x, int _y);
+
+ GEVASEV_HANDLER_RET(*handler_mouse_move) (GtkObject * object,
+ GtkObject * gevasobj, int _b,
+ int _x, int _y);
+
+
+ // package //
+ GEVASEV_HANDLER_PRIORITY (*get_priority)( GtkgEvasEvH* evh );
+};
- guint gevasevh_get_type(void);
- GtkObject *gevasevh_new(void);
+guint gevasevh_get_type(void);
+GtkObject *gevasevh_new(void);
+
/** Protected access only **/
- GEVASEV_HANDLER_RET gevasev_handler_mouse_in(GtkObject * object,
- GtkObject * gevasobj, int _b,
- int _x, int _y);
- GEVASEV_HANDLER_RET gevasev_handler_mouse_out(GtkObject * object,
- GtkObject * gevasobj, int _b,
- int _x, int _y);
- GEVASEV_HANDLER_RET gevasev_handler_mouse_down(GtkObject * object,
- GtkObject * gevasobj, int _b,
- int _x, int _y);
- GEVASEV_HANDLER_RET gevasev_handler_mouse_up(GtkObject * object,
- GtkObject * gevasobj, int _b,
- int _x, int _y);
- GEVASEV_HANDLER_RET gevasev_handler_mouse_move(GtkObject * object,
- GtkObject * gevasobj, int _b,
- int _x, int _y);
+GEVASEV_HANDLER_RET gevasev_handler_mouse_in(GtkObject * object,
+ GtkObject * gevasobj, int _b,
+ int _x, int _y);
+GEVASEV_HANDLER_RET gevasev_handler_mouse_out(GtkObject * object,
+ GtkObject * gevasobj, int _b,
+ int _x, int _y);
+GEVASEV_HANDLER_RET gevasev_handler_mouse_down(GtkObject * object,
+ GtkObject * gevasobj, int _b,
+ int _x, int _y);
+GEVASEV_HANDLER_RET gevasev_handler_mouse_up(GtkObject * object,
+ GtkObject * gevasobj, int _b,
+ int _x, int _y);
+GEVASEV_HANDLER_RET gevasev_handler_mouse_move(GtkObject * object,
+ GtkObject * gevasobj, int _b,
+ int _x, int _y);
+
#ifdef __cplusplus
===================================================================
RCS file: /cvsroot/enlightenment/misc/gevas/src/gevasevh_drag.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- gevasevh_drag.c 2001/01/20 06:06:19 1.2
+++ gevasevh_drag.c 2001/02/09 13:16:56 1.3
@@ -124,6 +124,7 @@
GEVASEV_HANDLER_RET_NEXT);
ev = GTK_GEVASEVH_DRAG(object);
if (ev->dragging && _b == 1) {
+printf("gevas_evh_drag_move\n");
gevasobj_move(GTK_GEVASOBJ(gevasobj),
_x - ev->click_x_offset, _y - ev->click_y_offset);
gevasobj_queue_redraw(GTK_GEVASOBJ(gevasobj));
===================================================================
RCS file: /cvsroot/enlightenment/misc/gevas/src/gevasevh_group_selector.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- gevasevh_group_selector.c 2001/02/08 17:53:31 1.1
+++ gevasevh_group_selector.c 2001/02/09 13:16:56 1.2
@@ -75,7 +75,7 @@
enum {
ARG_0, /* Skip 0, an invalid argument ID */
- ARG_SELECTED_OBJ,
+ ARG_SELECTEDb_OBJ,
};
/*
@@ -96,20 +96,120 @@
}
ev->selected_objs = evas_list_free( ev->selected_objs );
ev->selected_objs = 0;
+ ev->selected_objs_lastadded = 0;
}
+void gevasevh_group_selector_movesel(GtkgEvasEvHGroupSelector* ev, gint32 dx, gint32 dy )
+{
+ Evas_List tl = ev->selected_objs;
+ for( ; tl ; tl = tl->next)
+ {
+ if( tl->data )
+ {
+ gevas_selectable_move( (GtkgEvasEvHSelectable*)tl->data, dx, dy );
+ }
+ }
+}
+
+gboolean gevasevh_group_selector_isinsel(
+ GtkgEvasEvHGroupSelector* ev,
+ GtkgEvasEvHSelectable* o )
+{
+ Evas_List tl = ev->selected_objs;
+
+ if( !o ) return 0;
+ for( ; tl ; tl = tl->next)
+ {
+ if( tl->data == o )
+ return 1;
+ }
+ return 0;
+}
+
+
void gevasevh_group_selector_addtosel(
GtkgEvasEvHGroupSelector* ev, GtkgEvasEvHSelectable* o )
{
ev->selected_objs = evas_list_append( ev->selected_objs, o);
gevas_selectable_select( o , 1 );
+ ev->selected_objs_lastadded = o;
+}
+
+void gevasevh_group_selector_floodselect(
+ GtkgEvasEvHGroupSelector* ev,
+ double x, double y, double w, double h)
+{
+ Evas_List list;
+ void* data;
+
+ list = evas_objects_in_rect(
+ gevas_get_evas( ev->rect->gevas ), x,y,w,h);
+
+ while( list )
+ {
+ data = evas_get_data(
+ gevas_get_evas( ev->rect->gevas ),
+ list->data,
+ GEVASEVH_SELECTABLE_KEY
+ );
+
+
+ if( data )
+ {
+ gevasevh_group_selector_addtosel( ev, (GtkgEvasEvHSelectable*)data );
+ }
+
+ list = list->next;
+ }
+}
+
+void gevasevh_group_selector_floodtosel(
+ GtkgEvasEvHGroupSelector* ev, GtkgEvasEvHSelectable* o )
+{
+ GtkgEvasEvHSelectable* la = ev->selected_objs_lastadded;
+ GtkgEvasEvHSelectable* tl = la; // top left
+ GtkgEvasEvHSelectable* br = o; // bottom right
+ double x=0,y=0,w=0,h=0,_x=0,_y=0,_w=0,_h=0;
+
+ printf("gevasevh_group_selector_floodtosel()\n");
+
+ if( !o || !la || o == la )
+ return;
+
+ printf("gevasevh_group_selector_floodtosel() la:%p o:%p\n",la,o);
+
+ gevasobj_hide( ev->rect );
+ ev->tracking = 0;
+
+ gevasobj_get_location( GTK_GEVASOBJ(gevasevh_selectable_gevasobj(tl)), &x, &y );
+ gevasobj_get_location( GTK_GEVASOBJ(gevasevh_selectable_gevasobj(br)), &_x, &_y );
+ if( x > _x && y > _y )
+ {
+ tl = br;
+ br = la;
+ }
+
+ gevasobj_get_location( GTK_GEVASOBJ(gevasevh_selectable_gevasobj(tl)), &x, &y );
+ gevasobj_get_geometry( GTK_GEVASOBJ(gevasevh_selectable_gevasobj(br)),
+ &_x, &_y, &_w, &_h );
+
+ w = _x + _w - x;
+ h = _y + _h - y;
+ printf(" x:%f y:%f w:%f h:%f\n",x,y,w,h);
+
+ gevasevh_group_selector_floodselect( ev, x, y, w, h );
+
+ ev->selected_objs_lastadded = o;
}
+
void gevasevh_group_selector_remfromsel(
GtkgEvasEvHGroupSelector* ev, GtkgEvasEvHSelectable* o )
{
gevas_selectable_select( o , 0 );
+ ev->selected_objs = evas_list_remove( ev->selected_objs, o );
+ ev->selected_objs_lastadded = 0;
}
@@ -125,10 +225,11 @@
GtkgEvasObj *ct;
ct = ev->rect = (GtkgEvasObj*)gevasgrad_new(gevasobj_get_gevas(
GTK_OBJECT(ev->mark)));
- gevasgrad_add_color(ct, 255, 255, 255, 255, 8);
- gevasgrad_add_color(ct, 255, 255, 0, 200, 8);
- gevasgrad_add_color(ct, 255, 0, 0, 150, 8);
- gevasgrad_add_color(ct, 0, 0, 0, 0, 8);
+ gevasgrad_add_color(ct, 255, 200, 200, 128, 8);
+// gevasgrad_add_color(ct, 255, 255, 0, 200, 8);
+// gevasgrad_add_color(ct, 255, 0, 0, 150, 8);
+ gevasgrad_add_color(ct, 200, 150, 150, 128, 8);
+ gevasgrad_set_angle(ct, 315);
gevasgrad_seal(ct);
gevasobj_set_layer(ct, 9999);
@@ -192,14 +293,36 @@
int _x, int _y)
{
GtkgEvasEvHGroupSelector *ev;
+ GdkEvent *gdkev;
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);
// gevasev_group_selector_show(ev, ev->hot_clicked[_b - 1]);
- gevasevh_group_selector_flushsel( ev );
+ gdkev = gevas_get_current_event( ev->rect->gevas );
+ printf("got gdkev:%p\n", gdkev );
+ if( gdkev ) //&& gdkev->type == GDK_BUTTON_PRESS )
+ {
+ GdkEventButton* gdkbev;
+ printf("got gdkev button\n");
+ gdkbev = (GdkEventButton*)gdkev;
+
+ if( gdkbev->state & GDK_SHIFT_MASK )
+ {
+ printf("gevasev_group_selector_mouse_down shift key\n");
+ }
+ else if( gdkbev->state & GDK_CONTROL_MASK )
+ {
+ printf("gevasev_group_selector_mouse_down control key\n");
+ }
+ else
+ {
+ gevasevh_group_selector_flushsel( ev );
+ }
+ }
+
ev->tl_top = _y;
ev->tl_left= _x;
@@ -209,6 +332,9 @@
gevasobj_show( ev->rect );
gevasobj_queue_redraw( ev->rect );
ev->tracking = 1;
+ ev->tracking_ix = _x;
+ ev->tracking_iy = _y;
+
printf("gevasev_group_selector_mouse_down() done\n");
return GEVASEV_HANDLER_RET_NEXT;
@@ -232,37 +358,66 @@
gevasobj_hide( ev->rect );
ev->tracking = 0;
+/*
x = ev->tl_left;
y = ev->tl_top;
w = _x - x;
h = _y - y;
+*/
+ gevas_group_selector_get_wh( ev, _x, _y, &x, &y, &w, &h );
- printf(" x:%f y:%f w:%f h:%f\n",x,y,w,h);
+ printf("gevasev_group_selector_mouse_up() x:%f y:%f w:%f h:%f\n",x,y,w,h);
+ gevasevh_group_selector_floodselect( ev, x, y, w, h );
+ ev->selected_objs_lastadded = 0;
- list = evas_objects_in_rect(
- gevas_get_evas( ev->rect->gevas ), x,y,w,h);
+ printf("gevasev_group_selector_mouse_up(return)\n");
+ return GEVASEV_HANDLER_RET_NEXT;
+}
- while( list )
- {
- data = evas_get_data(
- gevas_get_evas( ev->rect->gevas ),
- list->data,
- GEVASEVH_SELECTABLE_KEY
- );
+//
+// Get the w & h of the selection box. This also moves the box to obscure to cx,cy.
+//
+void gevas_group_selector_get_wh(
+ GtkgEvasEvHGroupSelector *ev,
+ gint cx, gint cy,
+ double* x, double* y,
+ double* rw, double* rh
+ )
+{
+ double w=0, h=0;
+ gboolean moveit = 0;
+ gint tix = ev->tracking_ix;
+ gint tiy = ev->tracking_iy;
+ gevasobj_get_location( ev->rect, x, y );
- if( data )
- {
- gevasevh_group_selector_addtosel( ev, (GtkgEvasEvHSelectable*)data );
- }
-
- list = list->next;
+ *rw = abs(cx - tix);
+ if( cx < tix )
+ {
+ moveit=1;
+ *x = cx;
}
- printf("gevasev_group_selector_mouse_up(return)\n");
+ *rh = abs(cy - tiy);
+ if( cy < tiy )
+ {
+ moveit=1;
+ *y = cy;
+ }
+// if( moveit )
+ {
+ w = *rw;
+ h = *rh;
- return GEVASEV_HANDLER_RET_NEXT;
+ if( w < 2 ) w=2;
+ if( h < 2 ) h=2;
+
+ gevasobj_move ( ev->rect , *x, *y );
+ gevasobj_resize ( ev->rect , w, h );
+
+ }
+
}
GEVASEV_HANDLER_RET
@@ -277,20 +432,44 @@
if( ev->rect && ev->tracking )
{
+ double d1=0, d2=0, d3=0, d4=0;
+ gevas_group_selector_get_wh( ev, _x, _y, &d1, &d2, &d3, &d4 );
+/*
double w=0, h=0, x=0, y=0;
+ gboolean moveit = 0;
+
+// gevasobj_get_location( ev->rect, &x, &y );
+ x = ev->tl_left;
+ y = ev->tl_top;
- gevasobj_get_location( ev->rect, &x, &y );
w = _x - x;
h = _y - y;
+ if( w < 0 )
+ {
+ x = x + w;
+ w *= -1;
+ moveit = 1;
+ }
+ if( h < 0 )
+ {
+ y = y + h;
+ h *= -1;
+ moveit = 1;
+ }
+
+ if( moveit )
+ gevasobj_move( ev->rect , x, y);
+
if( w < 2 ) w=2;
if( h < 2 ) h=2;
gevasobj_resize( ev->rect , w, h);
gevasobj_queue_redraw( ev->rect );
- printf(" w:%f _x:%f x:%f h:%f _y:%f y:%f\n",w,_x,x,h,_y,y);
+ printf(" w:%f _x:%d x:%f h:%f _y:%d y:%f\n",w,_x,x,h,_y,y);
+*/
}
return GEVASEV_HANDLER_RET_NEXT;
@@ -347,7 +526,7 @@
static void gevasevh_group_selector_init(GtkgEvasEvHGroupSelector * ev)
{
- ev->selected = 0;
+// ev->selected = 0;
ev->rect = 0;
ev->selected_objs =0;
}
@@ -359,7 +538,7 @@
ev = gtk_type_new(gevasevh_group_selector_get_type());
hev = (GtkgEvasEvH *) ev;
- ev->selected = 0;
+// ev->selected = 0;
ev->rect = 0;
ev->selected_objs =0;
===================================================================
RCS file: /cvsroot/enlightenment/misc/gevas/src/gevasevh_group_selector.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- gevasevh_group_selector.h 2001/02/08 17:53:31 1.1
+++ gevasevh_group_selector.h 2001/02/09 13:16:56 1.2
@@ -58,15 +58,19 @@
struct _GtkgEvasEvHGroupSelector
{
GtkgEvasEvH evh_obj;
- GtkgEvasObj *selected;
GtkgEvasObj *mark; // object that we are attaching to
gint tracking; // Are we tracking the mouse move.?
+ gint tracking_ix; // initial location of click that started tracking.
+ gint tracking_iy;
GtkgEvasObj* rect;
- gint tl_top, tl_left;
+ gint tl_top, tl_left; // deprecated... remove.
- Evas_List selected_objs;
+
+
+ Evas_List selected_objs; // the current selection
+ GtkgEvasEvHSelectable* selected_objs_lastadded; // Last object added to selected_objs;
};
struct _GtkgEvasEvHGroupSelectorClass {
@@ -84,9 +88,14 @@
//package
void gevasevh_group_selector_addtosel(
GtkgEvasEvHGroupSelector* ev, GtkgEvasEvHSelectable* o );
+void gevasevh_group_selector_floodtosel(
+ GtkgEvasEvHGroupSelector* ev, GtkgEvasEvHSelectable* o );
void gevasevh_group_selector_remfromsel(
GtkgEvasEvHGroupSelector* ev, GtkgEvasEvHSelectable* o );
void gevasevh_group_selector_flushsel(GtkgEvasEvHGroupSelector* ev );
+void gevasevh_group_selector_movesel(GtkgEvasEvHGroupSelector* ev, gint32 dx, gint32 dy );
+gboolean
+gevasevh_group_selector_isinsel(GtkgEvasEvHGroupSelector* ev, GtkgEvasEvHSelectable* o );
//void gevasevh_group_selector_add_evh( GtkgEvasEvHGroupSelector* ev, GtkgEvasEvHSelectable* o );
===================================================================
RCS file: /cvsroot/enlightenment/misc/gevas/src/gevasevh_selectable.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- gevasevh_selectable.c 2001/02/08 17:53:31 1.1
+++ gevasevh_selectable.c 2001/02/09 13:16:56 1.2
@@ -61,6 +61,7 @@
#include "gevasevh_selectable.h"
#include <gtk/gtkmarshal.h>
#include <gtk/gtksignal.h>
+#include <gdk/gdktypes.h>
static void gevasevh_selectable_class_init(GtkgEvasEvHSelectableClass * klass);
static void gevasevh_selectable_init(GtkgEvasEvHSelectable * ev);
@@ -77,6 +78,11 @@
ARG_SELECTED_OBJ,
};
+static GEVASEV_HANDLER_PRIORITY gevasev_selectable_get_priority( GtkgEvasEvH* evh )
+{
+ return GEVASEV_HANDLER_PRIORITY_HI;
+}
+
void gevasevh_selectable_set_normal_gevasobj(
GtkgEvasEvHSelectable* ev,
GtkgEvasObj* nor )
@@ -103,18 +109,20 @@
//
void gevas_selectable_select( GtkgEvasEvHSelectable * ev, gboolean s )
{
- ev->tracking = s;
+// ev->tracking = s;
if( s )
{
- double x=0, y=0;
+ double x=0, y=0, w=0, h=0;
+ gint32 bx = ev->border_x;
+ gint32 by = ev->border_y;
int lay=0;
printf("showing for selectable\n");
- gevasobj_get_location( ev->normal, &x, &y );
- gevasobj_move( ev->selected, x, y);
+ 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);
-
gevasobj_set_layer( ev->selected,
gevasobj_get_layer( ev->normal) - 1
);
@@ -127,6 +135,19 @@
}
}
+void gevas_selectable_move( GtkgEvasEvHSelectable * ev, gint32 dx, gint32 dy )
+{
+ double x=0, y=0;
+ gint32 bx = ev->border_x;
+ gint32 by = ev->border_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);
+ gevasobj_move( ev->normal, x, y );
+ gevasobj_move( ev->selected, x-bx, y-by);
+}
GEVASEV_HANDLER_RET
gevasev_selectable_mouse_in(GtkObject * object, GtkObject * gevasobj, int _b,
@@ -161,16 +182,53 @@
int _x, int _y)
{
GtkgEvasEvHSelectable *ev;
+ GdkEvent *gdkev;
+
g_return_val_if_fail(object != NULL, GEVASEV_HANDLER_RET_NEXT);
g_return_val_if_fail(GTK_IS_GEVASEVH_SELECTABLE(object),
GEVASEV_HANDLER_RET_NEXT);
ev = GTK_GEVASEVH_SELECTABLE(object);
+ ev->tracking = 1;
+ ev->tracking_x = _x;
+ ev->tracking_y = _y;
+
+ gdkev = gevas_get_current_event( ev->normal->gevas );
+ printf("got gdkev:%p\n", gdkev );
+ if( gdkev ) //&& gdkev->type == GDK_BUTTON_PRESS )
+ {
+ GdkEventButton* gdkbev;
+
+ printf("got gdkev button\n");
+
+ gdkbev = (GdkEventButton*)gdkev;
+
+ if( gdkbev->state & GDK_SHIFT_MASK )
+ {
+ printf("gevasev_selectable_mouse_down() shift key\n");
+ gevasevh_group_selector_floodtosel( ev->evh_selector, ev );
+// return GEVASEV_HANDLER_RET_NEXT;
+ }
+ if( gdkbev->state & GDK_CONTROL_MASK )
+ {
+ printf("gevasev_selectable_mouse_down() control key\n");
+ if( gevasevh_group_selector_isinsel( ev->evh_selector, ev ))
+ gevasevh_group_selector_remfromsel( ev->evh_selector, ev );
+ else
+ gevasevh_group_selector_addtosel( ev->evh_selector, ev );
+ return GEVASEV_HANDLER_RET_NEXT;
+ }
+
+ }
+
printf("selectable down\n");
-// gevas_selectable_select( ev , 1 );
- gevasevh_group_selector_flushsel( ev->evh_selector );
- gevasevh_group_selector_addtosel( ev->evh_selector, ev );
+
+ if( !gevasevh_group_selector_isinsel( ev->evh_selector, ev ))
+ {
+ gevasevh_group_selector_flushsel( ev->evh_selector );
+ gevasevh_group_selector_addtosel( ev->evh_selector, ev );
+ }
printf("selectable down(ret)\n");
@@ -190,6 +248,7 @@
// gevas_selectable_select( ev , 0 );
// gevasevh_group_selector_remfromsel( ev->evh_selector, ev );
+ printf("gevasev_selectable_mouse_up()\n");
ev->tracking = 0;
return GEVASEV_HANDLER_RET_NEXT;
@@ -207,11 +266,24 @@
if( ev->tracking )
{
- double x=0, y=0;
- gevasobj_get_location( ev->normal, &x, &y );
- gevasobj_move( ev->selected, x, y);
+ gint32 dx=0, dy=0;
+
+ dx = _x - ev->tracking_x;
+ dy = _y - ev->tracking_y;
+printf("selectable_mouse_move() ev:%p dx:%d dy:%d\n",ev, dx,dy);
+ gevasevh_group_selector_movesel( ev->evh_selector, dx, dy );
+ ev->tracking_x = _x;
+ ev->tracking_y = _y;
+
+ return GEVASEV_HANDLER_RET_CHOMP;
}
+ if( gevasevh_group_selector_isinsel( ev->evh_selector, ev ))
+ {
+ printf("gevasev_selectable_mouse_move() is in sel...\n");
+ return GEVASEV_HANDLER_RET_CHOMP;
+ }
+
return GEVASEV_HANDLER_RET_NEXT;
}
@@ -258,6 +330,7 @@
evh_klass->handler_mouse_down = gevasev_selectable_mouse_down;
evh_klass->handler_mouse_up = gevasev_selectable_mouse_up;
evh_klass->handler_mouse_move = gevasev_selectable_mouse_move;
+ evh_klass->get_priority = gevasev_selectable_get_priority;
gtk_object_add_arg_type(GTK_GEVASEVH_SELECTABLE_SELECTED_OBJ,
GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_SELECTED_OBJ);
@@ -277,6 +350,8 @@
ev = gtk_type_new(gevasevh_selectable_get_type());
hev = (GtkgEvasEvH *) ev;
ev->selected = 0;
+ ev->border_x = 5;
+ ev->border_y = 5;
return GTK_OBJECT(ev);
}
===================================================================
RCS file: /cvsroot/enlightenment/misc/gevas/src/gevasevh_selectable.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- gevasevh_selectable.h 2001/02/08 17:53:31 1.1
+++ gevasevh_selectable.h 2001/02/09 13:16:56 1.2
@@ -61,10 +61,18 @@
GtkgEvasObj *normal;
GtkgEvasObj *selected;
- gboolean tracking;
+ gboolean tracking; // Are we tracking the mouse movement
+ gint32 tracking_x; // The x,y of the mouse on mouse down
+ gint32 tracking_y;
+
GtkObject* evh_selector;
+
+ gint32 border_x;
+ gint32 border_y;
};
+#define gevasevh_selectable_gevasobj( a ) ((GTK_GEVASEVH_SELECTABLE(a))->normal)
+
struct _GtkgEvasEvHSelectableClass {
GtkgEvasEvHClass parent_class;
};
@@ -85,6 +93,7 @@
// package:
void gevas_selectable_select( GtkgEvasEvHSelectable * ev, gboolean s );
+void gevas_selectable_move( GtkgEvasEvHSelectable * ev, gint32 dx, gint32 dy );
#define GEVASEVH_SELECTABLE_KEY "GEVASEVH_SELECTABLE_KEY"
===================================================================
RCS file: /cvsroot/enlightenment/misc/gevas/src/gevasgrad.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- gevasgrad.c 2001/01/20 06:06:19 1.2
+++ gevasgrad.c 2001/02/09 13:16:56 1.3
@@ -105,6 +105,17 @@
evas_set_gradient(EVAS(ev), EVASO(ev), ev->gradient);
}
+void gevasgrad_set_angle( GtkgEvasObj* object, double angle)
+{
+ GtkgEvasGrad *ev;
+ g_return_if_fail(object != NULL);
+ g_return_if_fail(GTK_IS_GEVASGRAD(object));
+ ev = GTK_GEVASGRAD(object);
+
+ evas_set_angle( EVAS(ev), EVASO(ev), angle);
+}
+
+
void gevasgrad_clear_gradient(GtkgEvasObj * object)
{
GtkgEvasGrad *ev;
===================================================================
RCS file: /cvsroot/enlightenment/misc/gevas/src/gevasgrad.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- gevasgrad.h 2001/01/20 06:06:19 1.2
+++ gevasgrad.h 2001/02/09 13:16:56 1.3
@@ -69,6 +69,7 @@
void gevasgrad_add_color(GtkgEvasObj * object, int r, int g, int b, int a,
int dist);
void gevasgrad_seal(GtkgEvasObj * object);
+ void gevasgrad_set_angle( GtkgEvasObj* object, double angle);
===================================================================
RCS file: /cvsroot/enlightenment/misc/gevas/src/gevasobj.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- gevasobj.c 2001/02/08 17:47:32 1.3
+++ gevasobj.c 2001/02/09 13:16:56 1.4
@@ -223,10 +223,12 @@
void _gevasobj_move(GtkgEvasObj * object, double x, double y)
{
evas_move(EVAS(object), EVASO(object), x, y);
+ gevasobj_queue_redraw(object);
}
void _gevasobj_resize(GtkgEvasObj * object, double w, double h)
{
evas_resize(EVAS(object), EVASO(object), w, h);
+ gevasobj_queue_redraw(object);
}
void _gevasobj_get_geometry(GtkgEvasObj * object, double *x, double *y,
double *w, double *h)
@@ -274,14 +276,23 @@
/*** public members vtable versions ***/
-
+#include "gevasev_handler.h"
void _gevasobj_add_evhandler(GtkgEvasObj * object, GtkObject * h)
{
GtkgEvasObj *ev;
g_return_if_fail(object != NULL);
g_return_if_fail(GTK_IS_GEVASOBJ(object));
ev = GTK_GEVASOBJ(object);
- ev->ev_handlers = g_slist_append(ev->ev_handlers, h);
+
+ if( GEVASEV_HANDLER_PRIORITY_HI ==
+ ((GtkgEvasEvHClass*)(((GtkObject*)h)->klass))
+ ->get_priority(h)
+ )
+ {
+ ev->ev_handlers = g_slist_prepend(ev->ev_handlers, h);
+ }
+ else
+ ev->ev_handlers = g_slist_append(ev->ev_handlers, h);
}
void _gevasobj_remove_evhandler(GtkgEvasObj * object, GtkObject * h)
|