[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28622] trunk/blender/source/blender: Make drop images work from external desktop into Blender image window.

William Reynish william at reynish.com
Thu May 6 19:45:02 CEST 2010


Revision: 28622
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28622
Author:   billrey
Date:     2010-05-06 19:45:02 +0200 (Thu, 06 May 2010)

Log Message:
-----------
Make drop images work from external desktop into Blender image window.
Still has work todo, like detecting filetype on drop event itself. Ton will continue...

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_image/space_image.c
    trunk/blender/source/blender/windowmanager/intern/wm_window.c

Modified: trunk/blender/source/blender/editors/space_image/space_image.c
===================================================================
--- trunk/blender/source/blender/editors/space_image/space_image.c	2010-05-06 17:12:44 UTC (rev 28621)
+++ trunk/blender/source/blender/editors/space_image/space_image.c	2010-05-06 17:45:02 UTC (rev 28622)
@@ -537,7 +537,7 @@
 static int image_drop_poll(bContext *C, wmDrag *drag, wmEvent *event)
 {
 	if(drag->type==WM_DRAG_PATH)
-		if(ELEM(drag->icon, ICON_FILE_IMAGE, ICON_FILE_BLANK))	/* rule might not work? */
+		if(ELEM3(drag->icon, 0, ICON_FILE_IMAGE, ICON_FILE_BLANK))	/* rule might not work? */
 			return 1;
 	return 0;
 }

Modified: trunk/blender/source/blender/windowmanager/intern/wm_window.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_window.c	2010-05-06 17:12:44 UTC (rev 28621)
+++ trunk/blender/source/blender/windowmanager/intern/wm_window.c	2010-05-06 17:45:02 UTC (rev 28622)
@@ -739,16 +739,48 @@
 			}
 			case GHOST_kEventDraggingDropDone:
 			{
-				wmEvent event= *(win->eventstate);	/* copy last state, like mouse coords */
+				wmEvent event;
 				GHOST_TEventDragnDropData *ddd= GHOST_GetEventData(evt);
+				int cx, cy, wx, wy;
+
 				
+				/* entering window, update mouse pos */
+				GHOST_GetCursorPosition(g_system, &wx, &wy);
+				
+				GHOST_ScreenToClient(win->ghostwin, wx, wy, &cx, &cy);
+				win->eventstate->x= cx;
+				
+#if defined(__APPLE__) && defined(GHOST_COCOA)
+				//Cocoa already uses coordinates with y=0 at bottom
+				win->eventstate->y= cy;
+#else
+				win->eventstate->y= (win->sizey-1) - cy;
+#endif
+				
+				event= *(win->eventstate);	/* copy last state, like mouse coords */
+				
+				// activate region
+				event.type= MOUSEMOVE;
+				event.prevx= event.x;
+				event.prevy= event.y;
+				
+				wm->winactive= win; /* no context change! c->wm->windrawable is drawable, or for area queues */
+				win->active= 1;
+				
+				wm_event_add(win, &event);
+				
+				
 				/* make blender drop event with custom data pointing to wm drags */
 				event.type= EVT_DROP;
+				event.val= KM_RELEASE;
 				event.custom= EVT_DATA_LISTBASE;
 				event.customdata= &wm->drags;
+				event.customdatafree= 1;
 				
-				printf("Drop detected\n");
+				wm_event_add(win, &event);
 				
+				/* printf("Drop detected\n"); */
+				
 				/* add drag data to wm for paths: */
 				/* need icon type, some dropboxes check for that... see filesel code for this */
 				
@@ -760,11 +792,12 @@
 						printf("drop file %s\n", stra->strings[a]);
 						WM_event_start_drag(C, 0, WM_DRAG_PATH, stra->strings[a], 0.0);
 						/* void poin should point to string, it makes a copy */
+						break; // only one drop element supported now 
 					}
 				}
 				
-				wm_event_add(win, &event);
 				
+				
 				break;
 			}
 			





More information about the Bf-blender-cvs mailing list