[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24567] trunk/blender/intern/ghost/intern: MAC/Cocoa:
Damien Plisson
damien.plisson at yahoo.fr
Sun Nov 15 09:34:32 CET 2009
Revision: 24567
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24567
Author: damien78
Date: 2009-11-15 09:34:31 +0100 (Sun, 15 Nov 2009)
Log Message:
-----------
MAC/Cocoa:
- Drag'n'Drop events are now correctly signaled to the main loop for dispatch (these events were directly handled in cocoa callbacks without notifying the process loop)
- Fix timestamping of events & add debug print of drag'n'drop events.
Modified Paths:
--------------
trunk/blender/intern/ghost/intern/GHOST_DisplayManagerCocoa.mm
trunk/blender/intern/ghost/intern/GHOST_EventPrinter.cpp
trunk/blender/intern/ghost/intern/GHOST_SystemCocoa.h
trunk/blender/intern/ghost/intern/GHOST_SystemCocoa.mm
trunk/blender/intern/ghost/intern/GHOST_WindowCocoa.mm
Modified: trunk/blender/intern/ghost/intern/GHOST_DisplayManagerCocoa.mm
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_DisplayManagerCocoa.mm 2009-11-14 23:24:15 UTC (rev 24566)
+++ trunk/blender/intern/ghost/intern/GHOST_DisplayManagerCocoa.mm 2009-11-15 08:34:31 UTC (rev 24567)
@@ -155,11 +155,11 @@
NULL);*/
#ifdef GHOST_DEBUG
- printf("GHOST_DisplayManagerCocoa::setCurrentDisplaySetting(): switching to:\n");
+/* printf("GHOST_DisplayManagerCocoa::setCurrentDisplaySetting(): switching to:\n");
printf(" setting.xPixels=%d\n", getValue(displayModeValues, kCGDisplayWidth));
printf(" setting.yPixels=%d\n", getValue(displayModeValues, kCGDisplayHeight));
printf(" setting.bpp=%d\n", getValue(displayModeValues, kCGDisplayBitsPerPixel));
- printf(" setting.frequency=%d\n", getValue(displayModeValues, kCGDisplayRefreshRate));
+ printf(" setting.frequency=%d\n", getValue(displayModeValues, kCGDisplayRefreshRate)); */
#endif // GHOST_DEBUG
//CGDisplayErr err = ::CGDisplaySwitchToMode(m_displayIDs[display], displayModeValues);
Modified: trunk/blender/intern/ghost/intern/GHOST_EventPrinter.cpp
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_EventPrinter.cpp 2009-11-14 23:24:15 UTC (rev 24566)
+++ trunk/blender/intern/ghost/intern/GHOST_EventPrinter.cpp 2009-11-15 08:34:31 UTC (rev 24567)
@@ -33,6 +33,7 @@
#include "GHOST_EventPrinter.h"
#include <iostream>
#include "GHOST_EventKey.h"
+#include "GHOST_EventDragnDrop.h"
#include "GHOST_Debug.h"
#ifdef HAVE_CONFIG_H
@@ -97,7 +98,77 @@
std::cout << "GHOST_kEventKeyDown, key: " << str.Ptr();
}
break;
+
+ case GHOST_kEventDraggingEntered:
+ {
+ GHOST_TEventDragnDropData* dragnDropData = (GHOST_TEventDragnDropData*)((GHOST_IEvent*)event)->getData();
+ std::cout << "GHOST_kEventDraggingEntered, dragged object type : " << dragnDropData->dataType;
+ std::cout << " mouse at x=" << dragnDropData->x << " y=" << dragnDropData->y;
+ }
+ break;
+
+ case GHOST_kEventDraggingUpdated:
+ {
+ GHOST_TEventDragnDropData* dragnDropData = (GHOST_TEventDragnDropData*)((GHOST_IEvent*)event)->getData();
+ std::cout << "GHOST_kEventDraggingUpdated, dragged object type : " << dragnDropData->dataType;
+ std::cout << " mouse at x=" << dragnDropData->x << " y=" << dragnDropData->y;
+ }
+ break;
+ case GHOST_kEventDraggingExited:
+ {
+ GHOST_TEventDragnDropData* dragnDropData = (GHOST_TEventDragnDropData*)((GHOST_IEvent*)event)->getData();
+ std::cout << "GHOST_kEventDraggingExited, dragged object type : " << dragnDropData->dataType;
+ }
+ break;
+
+ case GHOST_kEventDraggingDropDone:
+ {
+ GHOST_TEventDragnDropData* dragnDropData = (GHOST_TEventDragnDropData*)((GHOST_IEvent*)event)->getData();
+ std::cout << "GHOST_kEventDraggingDropDone, dragged object type : " << dragnDropData->dataType;
+ std::cout << " mouse at x=" << dragnDropData->x << " y=" << dragnDropData->y;
+ switch (dragnDropData->dataType) {
+ case GHOST_kDragnDropTypeString:
+ std::cout << " string received = " << (char*)dragnDropData->data;
+ break;
+ case GHOST_kDragnDropTypeFilenames:
+ {
+ GHOST_TStringArray *strArray = (GHOST_TStringArray*)dragnDropData->data;
+ int i;
+ std::cout << "\nReceived " << strArray->count << " filenames";
+ for (i=0;i<strArray->count;i++)
+ std::cout << " Filename #" << i << ": " << strArray->strings[i];
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+
+ case GHOST_kEventDraggingDropOnIcon:
+ {
+ GHOST_TEventDragnDropData* dragnDropData = (GHOST_TEventDragnDropData*)((GHOST_IEvent*)event)->getData();
+ std::cout << "GHOST_kEventDraggingDropOnIcon, dragged object type : " << dragnDropData->dataType;
+ switch (dragnDropData->dataType) {
+ case GHOST_kDragnDropTypeString:
+ std::cout << " string received = " << (char*)dragnDropData->data;
+ break;
+ case GHOST_kDragnDropTypeFilenames:
+ {
+ GHOST_TStringArray *strArray = (GHOST_TStringArray*)dragnDropData->data;
+ int i;
+ std::cout << "\nReceived " << strArray->count << " filenames";
+ for (i=0;i<strArray->count;i++)
+ std::cout << " Filename #" << i << ": " << strArray->strings[i];
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+
case GHOST_kEventQuit:
std::cout << "GHOST_kEventQuit";
break;
Modified: trunk/blender/intern/ghost/intern/GHOST_SystemCocoa.h
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_SystemCocoa.h 2009-11-14 23:24:15 UTC (rev 24566)
+++ trunk/blender/intern/ghost/intern/GHOST_SystemCocoa.h 2009-11-15 08:34:31 UTC (rev 24567)
@@ -246,6 +246,9 @@
/** Start time at initialization. */
GHOST_TUns64 m_start_time;
+ /** Event has been processed directly by Cocoa and has sent a ghost event to be dispatched */
+ bool m_outsideLoopEventProcessed;
+
/** Mouse buttons state */
GHOST_TUns32 m_pressedMouseButtons;
Modified: trunk/blender/intern/ghost/intern/GHOST_SystemCocoa.mm
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_SystemCocoa.mm 2009-11-14 23:24:15 UTC (rev 24566)
+++ trunk/blender/intern/ghost/intern/GHOST_SystemCocoa.mm 2009-11-15 08:34:31 UTC (rev 24567)
@@ -449,12 +449,12 @@
m_pressedMouseButtons =0;
m_cursorDelta_x=0;
m_cursorDelta_y=0;
+ m_outsideLoopEventProcessed = false;
m_displayManager = new GHOST_DisplayManagerCocoa ();
GHOST_ASSERT(m_displayManager, "GHOST_SystemCocoa::GHOST_SystemCocoa(): m_displayManager==0\n");
m_displayManager->initialize();
//NSEvent timeStamp is given in system uptime, state start date is boot time
- //FIXME : replace by Cocoa equivalent
int mib[2];
struct timeval boottime;
size_t len;
@@ -560,17 +560,13 @@
GHOST_TUns64 GHOST_SystemCocoa::getMilliSeconds() const
{
//Cocoa equivalent exists in 10.6 ([[NSProcessInfo processInfo] systemUptime])
- int mib[2];
- struct timeval boottime;
- size_t len;
+ struct timeval currentTime;
- mib[0] = CTL_KERN;
- mib[1] = KERN_BOOTTIME;
- len = sizeof(struct timeval);
+ gettimeofday(¤tTime, NULL);
- sysctl(mib, 2, &boottime, &len, NULL, 0);
-
- return ((boottime.tv_sec*1000)+(boottime.tv_usec/1000));
+ //Return timestamp of system uptime
+
+ return ((currentTime.tv_sec*1000)+(currentTime.tv_usec/1000)-m_start_time);
}
@@ -744,6 +740,8 @@
bool anyProcessed = false;
NSEvent *event;
+ m_outsideLoopEventProcessed = false;
+
// SetMouseCoalescingEnabled(false, NULL);
//TODO : implement timer ??
@@ -842,7 +840,7 @@
- return anyProcessed;
+ return anyProcessed || m_outsideLoopEventProcessed;
}
//Note: called from NSWindow delegate
@@ -879,6 +877,8 @@
return GHOST_kFailure;
break;
}
+
+ m_outsideLoopEventProcessed = true;
return GHOST_kSuccess;
}
@@ -895,7 +895,7 @@
setAcceptDragOperation(FALSE); //Drag operation needs to be accepted explicitely by the event manager
case GHOST_kEventDraggingUpdated:
case GHOST_kEventDraggingExited:
- pushEvent(new GHOST_EventDragnDrop(getMilliSeconds(),GHOST_kEventDraggingEntered,draggedObjectType,window,mouseX,mouseY,NULL));
+ pushEvent(new GHOST_EventDragnDrop(getMilliSeconds(),eventType,draggedObjectType,window,mouseX,mouseY,NULL));
break;
case GHOST_kEventDraggingDropDone:
@@ -969,12 +969,13 @@
return GHOST_kFailure;
break;
}
- pushEvent(new GHOST_EventDragnDrop(getMilliSeconds(),GHOST_kEventDraggingEntered,draggedObjectType,window,mouseX,mouseY,eventData));
+ pushEvent(new GHOST_EventDragnDrop(getMilliSeconds(),eventType,draggedObjectType,window,mouseX,mouseY,eventData));
}
break;
default:
return GHOST_kFailure;
}
+ m_outsideLoopEventProcessed = true;
return GHOST_kSuccess;
}
@@ -1007,6 +1008,7 @@
}
else {
pushEvent( new GHOST_Event(getMilliSeconds(), GHOST_kEventQuit, NULL) );
+ m_outsideLoopEventProcessed = true;
return GHOST_kExitNow;
}
@@ -1079,7 +1081,7 @@
case NSLeftMouseDown:
case NSRightMouseDown:
case NSOtherMouseDown:
- pushEvent(new GHOST_EventButton([event timestamp], GHOST_kEventButtonDown, window, convertButton([event buttonNumber])));
+ pushEvent(new GHOST_EventButton([event timestamp]*1000, GHOST_kEventButtonDown, window, convertButton([event buttonNumber])));
//Handle tablet events combined with mouse events
switch ([event subtype]) {
case NX_SUBTYPE_TABLET_POINT:
@@ -1097,7 +1099,7 @@
case NSLeftMouseUp:
case NSRightMouseUp:
case NSOtherMouseUp:
- pushEvent(new GHOST_EventButton([event timestamp], GHOST_kEventButtonUp, window, convertButton([event buttonNumber])));
+ pushEvent(new GHOST_EventButton([event timestamp]*1000, GHOST_kEventButtonUp, window, convertButton([event buttonNumber])));
//Handle tablet events combined with mouse events
switch ([event subtype]) {
case NX_SUBTYPE_TABLET_POINT:
@@ -1141,7 +1143,7 @@
y_accum += -[event deltaY]; //Strange Apple implementation (inverted coordinates for the deltaY) ...
window->setCursorGrabAccum(x_accum, y_accum);
- pushEvent(new GHOST_EventCursor([event timestamp], GHOST_kEventCursorMove, window, x_warp+x_accum, y_warp+y_accum));
+ pushEvent(new GHOST_EventCursor([event timestamp]*1000, GHOST_kEventCursorMove, window, x_warp+x_accum, y_warp+y_accum));
}
break;
case GHOST_kGrabWrap: //Wrap cursor at area/window boundaries
@@ -1185,14 +1187,14 @@
//Post event
window->getCursorGrabInitPos(x_cur, y_cur);
- pushEvent(new GHOST_EventCursor([event timestamp], GHOST_kEventCursorMove, window, x_cur + x_accum, y_cur + y_accum));
+ pushEvent(new GHOST_EventCursor([event timestamp]*1000, GHOST_kEventCursorMove, window, x_cur + x_accum, y_cur + y_accum));
}
break;
default:
{
//Normal cursor operation: send mouse position in window
NSPoint mousePos = [event locationInWindow];
- pushEvent(new GHOST_EventCursor([event timestamp], GHOST_kEventCursorMove, window, mousePos.x, mousePos.y));
+ pushEvent(new GHOST_EventCursor([event timestamp]*1000, GHOST_kEventCursorMove, window, mousePos.x, mousePos.y));
m_cursorDelta_x=0;
m_cursorDelta_y=0; //Mouse motion occured between two cursor warps, so we can reset the delta counter
}
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list