merge from trunk up to rev [10858]
authorJean-Luc Peurière <jlp@nerim.net>
Sat, 2 Jun 2007 21:42:54 +0000 (21:42 +0000)
committerJean-Luc Peurière <jlp@nerim.net>
Sat, 2 Jun 2007 21:42:54 +0000 (21:42 +0000)
WIP in the NDOF part, dont work yet

1  2 
intern/ghost/GHOST_Types.h
intern/ghost/intern/GHOST_NDOFManager.cpp
source/blender/src/ghostwinlay.c
source/blender/src/space.c

index c0f7245eff195db4ccaa8bb687a6e24db4437ece,d55753543708e99b52ac9c1f4fea127e72950ff7..f8f9a8d4735d3cedd0f41872153213dc8d20786a
@@@ -338,18 -336,6 +338,19 @@@ typedef struct 
        GHOST_TInt32 z; 
  } GHOST_TEventWheelData;
  
 +typedef int     (*GHOST_NDOFLibraryInit_fp)();
 +typedef void    (*GHOST_NDOFLibraryShutdown_fp)(void* deviceHandle);
 +typedef void*   (*GHOST_NDOFDeviceOpen_fp)(void* platformData);
 +typedef int     (*GHOST_NDOFEventHandler_fp)(float* result7, void* deviceHandle, unsigned int message, unsigned int* wParam, unsigned long* lParam);
 +
++/* original patch used floats, but the driver return ints and uns. We will calibrate in view, no sense on doing conversions twice */
 +typedef struct {
 +   /** N-degree of freedom device data */
 +   float tx, ty, tz;   /** -x left, +y up, +z forward */
 +   float rx, ry, rz;
 +   float dt;
 +} GHOST_TEventNDOFData;
 +
  typedef struct {
        /** The key code. */
        GHOST_TKey              key;
index 86a9b56c7cc33f1a06c8922f317ed8b6d95a9ad6,0000000000000000000000000000000000000000..3ac3d483d18b8e1bb7f20c7b20fe98af231edd6e
mode 100644,000000..100644
--- /dev/null
@@@ -1,107 -1,0 +1,110 @@@
-     if (ndofLibraryInit)
 +
 +// Insert Blender compatible license here :-)
 +
 +// note: an implementation is currently only provided for Windows, but designed to be easy to move to Linux, etc.
 +
 +/**
 +
 +    To use this implemenation, you must specify the #define WITH_SPACEBALL for the ghost library.
 +    Only this cpp file is affected by the macro, the header file and everything else are independent
 +    of the spaceball libraries.
 +
 +    The 3dXWare SDK is available from the tab on the left side of -
 +    http://www.3dconnexion.com/support/4a.php
 +
 +    The SDK is necessary to build this file with WITH_SPACEBALL defined.
 +
 +    For this stuff to work, siappdll.dll and spwini.dll must be in the executable path of blender
 +
 + */
 +
 +
 +#include "GHOST_NDOFManager.h"
 +//#include "GHOST_WindowWin32.h"
 +
 +
 +
 +
 +
 +namespace
 +{
 +    GHOST_NDOFLibraryInit_fp ndofLibraryInit = 0;
 +    GHOST_NDOFLibraryShutdown_fp ndofLibraryShutdown = 0;
 +    GHOST_NDOFDeviceOpen_fp ndofDeviceOpen = 0;
 +    GHOST_NDOFEventHandler_fp ndofEventHandler = 0;
 +}
 +
 +
 +//typedef enum SpwRetVal (WINAPI *PFNSI_INIT) (void);
 +
 +GHOST_NDOFManager::GHOST_NDOFManager()
 +{
 +    m_DeviceHandle = 0;
 +
 +    // discover the API from the plugin
 +    ndofLibraryInit = 0;
 +    ndofLibraryShutdown = 0;
 +    ndofDeviceOpen = 0;
 +    ndofEventHandler = 0;
++   // available = 0;
 +}
 +
 +GHOST_NDOFManager::~GHOST_NDOFManager()
 +{
 +    if (ndofLibraryShutdown)
 +        ndofLibraryShutdown(m_DeviceHandle);
 +
 +    m_DeviceHandle = 0;
 +}
 +
 +
 +void
 +GHOST_NDOFManager::deviceOpen(GHOST_IWindow* window,
 +        GHOST_NDOFLibraryInit_fp setNdofLibraryInit, 
 +        GHOST_NDOFLibraryShutdown_fp setNdofLibraryShutdown,
 +        GHOST_NDOFDeviceOpen_fp setNdofDeviceOpen,
 +        GHOST_NDOFEventHandler_fp setNdofEventHandler)
 +{
 +    ndofLibraryInit = setNdofLibraryInit;
 +    ndofLibraryShutdown = setNdofLibraryShutdown;
 +    ndofDeviceOpen = setNdofDeviceOpen;
 +    ndofEventHandler = setNdofEventHandler;
 +
-         ndofLibraryInit();
++    if (ndofLibraryInit  && ndofDeviceOpen)
 +    {
++       printf("%i client \n", ndofLibraryInit());
 +    }
 +/*
 +    if (ndofDeviceOpen)
 +    {
 +        GHOST_WindowWin32* win32 = (GHOST_WindowWin32*) window; // GHOST_IWindow doesn't have RTTI...
 +        if (win32 != 0)
 +        {
 +            m_DeviceHandle = ndofDeviceOpen(win32->getHWND());
 +        }
 +    }
 +    */
 +}
 +
 +
 +
 +GHOST_TEventNDOFData*
 +GHOST_NDOFManager::handle(unsigned int message, unsigned int* wParam, unsigned long* lParam)
 +{
 +    static GHOST_TEventNDOFData sbdata;
 +    int handled = 0;
 +    if (ndofEventHandler && m_DeviceHandle != 0)
 +    {
 +        handled = ndofEventHandler(&sbdata.tx, m_DeviceHandle, message, wParam, lParam);
 +    }
++    printf("handled %i\n", handled);
 +    return handled ? &sbdata : 0;
 +}
 +
 +
 +bool 
 +GHOST_NDOFManager::available() 
 +{ 
 +    return m_DeviceHandle != 0; 
 +}
++
index 9df293a0fda861dbd52703d1572c71e2fcd33c0e,4a76d2d292ffcb2fcc97d77fa0a974076f4ae8cb..19e858a9f59640b5d02248ead7dd3c217a851ff3
@@@ -878,21 -831,3 +878,19 @@@ void winlay_get_screensize(int *width_r
  Window *winlay_get_active_window(void) {
        return active_gl_window;
  }
-     PILdynlib* ndofLib = PIL_dynlib_open("NDOFPlugin.plug");
-     printf("passing here \n");
 +
 +void window_open_ndof(Window* win)
 +{
-           printf("and here \n");
++    PILdynlib* ndofLib = PIL_dynlib_open("spaceplug.plug");
 +    if (ndofLib) {
 +
 +        GHOST_OpenNDOF(g_system, win->ghostwin, 
 +            PIL_dynlib_find_symbol(ndofLib, "ndofInit"),
 +            PIL_dynlib_find_symbol(ndofLib, "ndofShutdown"),
 +            PIL_dynlib_find_symbol(ndofLib, "ndofOpen"),
 +            PIL_dynlib_find_symbol(ndofLib, "ndofEventHandler"));
 +    }
 +    else {
 +        GHOST_OpenNDOF(g_system, win->ghostwin, 0, 0, 0, 0);
 +    }
 + }
Simple merge