[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21887] branches/blender2.5/blender/source /blender: 2.5 / Drag & Drop

Elia Sarti vekoon at gmail.com
Sat Jul 25 17:26:06 CEST 2009


Revision: 21887
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21887
Author:   vekoon
Date:     2009-07-25 17:26:06 +0200 (Sat, 25 Jul 2009)

Log Message:
-----------
2.5 / Drag & Drop

Commit of basic architecture. Sorry, nothing fun to play with yet.
Added two events: MOUSEDRAG and MOUSEDROP. MOUSEDRAG is sent when left-mouse clicking and then moving the cursor and every time the cursor is moved until the user releases the mouse button, thus generating a MOUSEDROP.
Also added two dummy drag operators in view3d and outliner (place holders for now).

Brecht and Ton: feel free to check/edit especially the event system code. I'm not sure that's the right way to do it. Also, I'm getting some mem leaks which I suspect are caused by my code.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/space_outliner/outliner.c
    branches/blender2.5/blender/source/blender/editors/space_outliner/outliner_intern.h
    branches/blender2.5/blender/source/blender/editors/space_outliner/outliner_ops.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_select.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_windowmanager_types.h
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c
    branches/blender2.5/blender/source/blender/windowmanager/wm_event_types.h

Modified: branches/blender2.5/blender/source/blender/editors/space_outliner/outliner.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_outliner/outliner.c	2009-07-25 15:12:56 UTC (rev 21886)
+++ branches/blender2.5/blender/source/blender/editors/space_outliner/outliner.c	2009-07-25 15:26:06 UTC (rev 21887)
@@ -3452,6 +3452,57 @@
 }
 
 
+/* ****** Drag & Drop ****** */
+
+static int outliner_drag_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+	wmWindow *win= CTX_wm_window(C);
+	Object *ob= CTX_data_active_object(C);
+	PointerRNA ptr;
+
+	RNA_pointer_create(NULL, &RNA_Object, ob, &ptr);
+
+	return OPERATOR_RUNNING_MODAL;
+}
+
+static int outliner_drag_modal(bContext *C, wmOperator *op, wmEvent *event)
+{
+	switch(event->type) {
+		case MOUSEDRAG:
+
+			break;
+		case MOUSEDROP:
+			return OPERATOR_FINISHED;
+		case ESCKEY:
+			return OPERATOR_CANCELLED;
+	}
+
+	return OPERATOR_RUNNING_MODAL;
+}
+
+static int outliner_drag_exec(bContext *C, wmOperator *op)
+{
+	return OPERATOR_FINISHED;
+}
+
+void OUTLINER_OT_drag(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name= "Drag";
+	ot->idname= "OUTLINER_OT_drag";
+
+	/* api callbacks */
+	ot->invoke= outliner_drag_invoke;
+	ot->modal= outliner_drag_modal;
+	ot->exec= outliner_drag_exec;
+
+	ot->poll= ED_operator_outliner_active;
+
+	/* flags */
+	/* ot->flag= OPTYPE_UNDO; */
+}
+
+
 /* ******************** */
 
 

Modified: branches/blender2.5/blender/source/blender/editors/space_outliner/outliner_intern.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_outliner/outliner_intern.h	2009-07-25 15:12:56 UTC (rev 21886)
+++ branches/blender2.5/blender/source/blender/editors/space_outliner/outliner_intern.h	2009-07-25 15:26:06 UTC (rev 21887)
@@ -127,6 +127,8 @@
 void OUTLINER_OT_id_operation(struct wmOperatorType *ot);
 void OUTLINER_OT_data_operation(struct wmOperatorType *ot);
 
+void OUTLINER_OT_drag(struct wmOperatorType *ot);
+
 void OUTLINER_OT_show_one_level(struct wmOperatorType *ot);
 void OUTLINER_OT_show_active(struct wmOperatorType *ot);
 void OUTLINER_OT_show_hierarchy(struct wmOperatorType *ot);

Modified: branches/blender2.5/blender/source/blender/editors/space_outliner/outliner_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_outliner/outliner_ops.c	2009-07-25 15:12:56 UTC (rev 21886)
+++ branches/blender2.5/blender/source/blender/editors/space_outliner/outliner_ops.c	2009-07-25 15:26:06 UTC (rev 21887)
@@ -56,6 +56,8 @@
 	WM_operatortype_append(OUTLINER_OT_id_operation);
 	WM_operatortype_append(OUTLINER_OT_data_operation);
 
+	WM_operatortype_append(OUTLINER_OT_drag);
+
 	WM_operatortype_append(OUTLINER_OT_show_one_level);
 	WM_operatortype_append(OUTLINER_OT_show_active);
 	WM_operatortype_append(OUTLINER_OT_show_hierarchy);
@@ -87,6 +89,9 @@
 	WM_keymap_add_item(keymap, "OUTLINER_OT_item_rename", LEFTMOUSE, KM_PRESS, KM_CTRL, 0);
 	WM_keymap_add_item(keymap, "OUTLINER_OT_operation", RIGHTMOUSE, KM_PRESS, 0, 0);
 
+	/* drag & drop */
+	WM_keymap_add_item(keymap, "OUTLINER_OT_drag", MOUSEDRAG, KM_ANY, 0, 0);
+
 	WM_keymap_add_item(keymap, "OUTLINER_OT_show_hierarchy", HOMEKEY, KM_PRESS, 0, 0);
 	
 	WM_keymap_add_item(keymap, "OUTLINER_OT_show_active", PERIODKEY, KM_PRESS, 0, 0);

Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h	2009-07-25 15:12:56 UTC (rev 21886)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h	2009-07-25 15:26:06 UTC (rev 21887)
@@ -115,6 +115,7 @@
 void VIEW3D_OT_select_circle(struct wmOperatorType *ot);
 void VIEW3D_OT_select_border(struct wmOperatorType *ot);
 void VIEW3D_OT_select_lasso(struct wmOperatorType *ot);
+void VIEW3D_OT_drag(struct wmOperatorType *ot);
 
 /* view3d_view.c */
 void VIEW3D_OT_smoothview(struct wmOperatorType *ot);

Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c	2009-07-25 15:12:56 UTC (rev 21886)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c	2009-07-25 15:26:06 UTC (rev 21887)
@@ -73,6 +73,7 @@
 	WM_operatortype_append(VIEW3D_OT_view_center);
 	WM_operatortype_append(VIEW3D_OT_select);
 	WM_operatortype_append(VIEW3D_OT_select_border);
+	WM_operatortype_append(VIEW3D_OT_drag);
 	WM_operatortype_append(VIEW3D_OT_clip_border);
 	WM_operatortype_append(VIEW3D_OT_select_circle);
 	WM_operatortype_append(VIEW3D_OT_smoothview);
@@ -216,6 +217,9 @@
 	WM_keymap_add_item(keymap, "VIEW3D_OT_camera_to_view", PAD0, KM_PRESS, KM_ALT|KM_CTRL, 0);
 	
 	WM_keymap_add_item(keymap, "VIEW3D_OT_snap_menu", SKEY, KM_PRESS, KM_SHIFT, 0);
+
+	/* drag & drop */
+	WM_keymap_add_item(keymap, "VIEW3D_OT_drag", MOUSEDRAG, KM_ANY, 0, 0);
 	
 	/* radial control */
 	RNA_enum_set(WM_keymap_add_item(keymap, "SCULPT_OT_radial_control", FKEY, KM_PRESS, 0, 0)->ptr, "mode", WM_RADIALCONTROL_SIZE);

Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_select.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_select.c	2009-07-25 15:12:56 UTC (rev 21886)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_select.c	2009-07-25 15:26:06 UTC (rev 21887)
@@ -1598,6 +1598,56 @@
 }
 
 
+/* ****** Drag & Drop ****** */
+
+static int view3d_drag_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+	wmWindow *win= CTX_wm_window(C);
+	Object *ob= CTX_data_active_object(C);
+	PointerRNA ptr;
+
+	RNA_pointer_create(NULL, &RNA_Object, ob, &ptr);
+
+	return OPERATOR_RUNNING_MODAL;
+}
+
+static int view3d_drag_modal(bContext *C, wmOperator *op, wmEvent *event)
+{
+	switch(event->type) {
+		case MOUSEDRAG:
+
+			break;
+		case MOUSEDROP:
+			return OPERATOR_FINISHED;
+		case ESCKEY:
+			return OPERATOR_CANCELLED;
+	}
+
+	return OPERATOR_RUNNING_MODAL;
+}
+
+static int view3d_drag_exec(bContext *C, wmOperator *op)
+{
+	return OPERATOR_FINISHED;
+}
+
+void VIEW3D_OT_drag(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name= "Drag";
+	ot->idname= "VIEW3D_OT_drag";
+	
+	/* api callbacks */
+	ot->invoke= view3d_drag_invoke;
+	ot->modal= view3d_drag_modal;
+	ot->exec= view3d_drag_exec;
+	ot->poll= ED_operator_view3d_active;
+	
+	/* flags */
+	/* ot->flag= OPTYPE_UNDO; */
+}
+
+
 /* -------------------- circle select --------------------------------------------- */
 
 static void mesh_circle_doSelectVert(void *userData, EditVert *eve, int x, int y, int index)

Modified: branches/blender2.5/blender/source/blender/makesdna/DNA_windowmanager_types.h
===================================================================
--- branches/blender2.5/blender/source/blender/makesdna/DNA_windowmanager_types.h	2009-07-25 15:12:56 UTC (rev 21886)
+++ branches/blender2.5/blender/source/blender/makesdna/DNA_windowmanager_types.h	2009-07-25 15:26:06 UTC (rev 21887)
@@ -146,7 +146,9 @@
 	short cursor;		/* current mouse cursor type */
 	short lastcursor;	/* for temp waitcursor */
 	short addmousemove;	/* internal: tag this for extra mousemove event, makes cursors/buttons active on UI switching */
-	int pad3;
+	short downstate; /* used for drag & drop: remembers mouse button down state */
+	short downx, downy; /* mouse coords for button down event */
+	short pad3, pad4, pad5;
 	
 	struct wmEvent *eventstate;	/* storage for event system */
 	

Modified: branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c	2009-07-25 15:12:56 UTC (rev 21886)
+++ branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c	2009-07-25 15:26:06 UTC (rev 21887)
@@ -1435,6 +1435,19 @@
 				
 				update_tablet_data(win, &event);
 				wm_event_add(win, &event);
+
+				cx = abs((win->downx - event.x));
+				cy = abs((win->downy - event.y));
+
+				/* probably minimum drag size should be #defined instead of hardcoded 3 */
+				if (win->downstate == LEFTMOUSE && (cx > 3 || cy > 3)) {
+					wmEvent dragevt= *evt;
+					dragevt.type= MOUSEDRAG;
+					dragevt.customdata= NULL;
+					dragevt.customdatafree= 0;
+
+					wm_event_add(win, &dragevt);
+				}
 			}
 			break;
 		}
@@ -1458,6 +1471,23 @@
 			
 			update_tablet_data(win, &event);
 			wm_event_add(win, &event);
+
+			if (event.val) {
+				win->downstate= event.type;
+				win->downx= event.x;
+				win->downy= event.y;
+			}
+			else if (win->downstate) {
+				wmEvent dropevt= *evt;
+				dropevt.type= MOUSEDROP;
+				dropevt.customdata= NULL;
+				dropevt.customdatafree= 0;
+				win->downstate= 0;
+				win->downx= 0;
+				win->downy= 0;
+
+				wm_event_add(win, &dropevt);
+			}
 			
 			break;
 		}

Modified: branches/blender2.5/blender/source/blender/windowmanager/wm_event_types.h
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/wm_event_types.h	2009-07-25 15:12:56 UTC (rev 21886)
+++ branches/blender2.5/blender/source/blender/windowmanager/wm_event_types.h	2009-07-25 15:26:06 UTC (rev 21887)
@@ -56,6 +56,9 @@
 		/* only use if you want user option switch possible */
 #define ACTIONMOUSE		0x005
 #define SELECTMOUSE		0x006
+		/* drag & drop support */
+#define MOUSEDRAG		0x007
+#define MOUSEDROP		0x008
 		/* defaults from ghost */
 #define WHEELUPMOUSE	0x00a	
 #define WHEELDOWNMOUSE	0x00b





More information about the Bf-blender-cvs mailing list