Exemplo n.º 1
0
/* translates a Win32 event to a SPW_InputEvent. */
int SPW_TranslateEventWin32(MSG * msg, SPW_InputEvent * sbEvent)
{
  SiSpwEvent spwEvent;
  SiGetEventData eventdata;

  if (Spw_DeviceHandle != SI_NO_HANDLE) {

    SiGetEventWinInit (&eventdata, msg->message, msg->wParam, msg->lParam);
    if (SiGetEvent (Spw_DeviceHandle, 0, &eventdata, &spwEvent) == SI_IS_EVENT) {

      int i;
      switch(spwEvent.type) {
        case SI_MOTION_EVENT:
          sbEvent->type = SPW_InputMotionEvent;      
          for(i=0; i<6; i++) {
            sbEvent->sData[i] = (short)spwEvent.u.spwData.mData[i];
          }  
          break;
        case SI_BUTTON_EVENT:
          sbEvent->type = SPW_InputButtonPressEvent;
          sbEvent->buttonState.pressed = (SiButtonPressed(&spwEvent) != SI_NO_BUTTON);
          sbEvent->buttonState.released = (SiButtonReleased(&spwEvent) != SI_NO_BUTTON);
          break;
      }
      return TRUE;
    }
  }
  return FALSE;
}
Exemplo n.º 2
0
// SpaceBallWindowProc():
LRESULT CALLBACK SpaceBallWindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) {
  SiGetEventWinInit (&eData, uMsg, wParam, lParam);
  if( SiGetEvent( hdl, 0, &eData, &siEvent ) == SI_IS_EVENT ) {
    if( enable_spaceball && is_safe ) {
      switch (siEvent.type) {
        case SI_MOTION_EVENT: {
          long *data = siEvent.u.spwData.mData;
          if( (data[SI_TX] != 0) || (data[SI_TY] != 0) || (data[SI_TZ] != 0) ) {
            if( move_rotate) {
              sprintf( command_buffer, "AddPosition %g %g %g", (double)data[ SI_TX ] / tscalar,
                                                               (double)data[ SI_TY ] / tscalar,
                                                               (double)data[ SI_TZ ] / tscalar );
            } else {
              sprintf( command_buffer, "AddScale %g %g %g", (double)data[ SI_TX ] / sscalar,
                                                            (double)data[ SI_TY ] / sscalar,
                                                            (double)data[ SI_TZ ] / sscalar );
            }

            command( command_buffer );
          }

          if( (data[SI_RX] != 0) || (data[SI_RY] != 0) || (data[SI_RZ] != 0) ) {
            sprintf( command_buffer, "AddRotation %g %g %g", (double)data[ SI_RY ] / -rscalar,
                                                             (double)data[ SI_RX ] / -rscalar,
                                                             (double)data[ SI_RZ ] / -rscalar );
            command( command_buffer );
          }
        } break;

        case SI_ZERO_EVENT:
        
          break;

        case SI_BUTTON_EVENT: {
          int index = SiButtonPressed( &siEvent );
          if( index == SI_NO_BUTTON )
            break;

//          if( index == SPW_ERROR )
//            break;

          if( (index < 1) && (index > 29) )
            break;

          index--;
          if( function_map[ index ] == NULL )
            break;

          command( function_map[ index ] );
//          command( "Generic_TM-P_SpaceBallToggle"DEBUG_PLUGIN_PLUGNAME );
        } break;

        default:
          break;
      }
    }
  }
    
  return CallWindowProc( orig_window_proc, hwnd, uMsg, wParam, lParam );
}
Exemplo n.º 3
0
/*--------------------------------------------------------------------------
 * Function: DispatchLoopNT()
 *
 * Description:
 *    This function contains the main message loop which constantly checks for
 *    SpaceBall Events and handles them apropriately.
 *
 * Args: None
 *
 *
 * Return Value:
 *    int  msg.wparam                  // event passed to window
 *
 *--------------------------------------------------------------------------*/
int
DispatchLoopNT()
{
    int            num;      /* number of button pressed */
    MSG            msg;      /* incoming message to be evaluated */
    BOOL           handled;  /* is message handled yet */
    SiSpwEvent     Event;    /* SpaceWare Event */
    SiGetEventData EData;    /* SpaceWare Event Data */

    handled = SPW_FALSE;     /* init handled */

    /* start message loop */
    while ( GetMessage( &msg, NULL, 0, 0 ) )
    {
        handled = SPW_FALSE;

        /* init Window platform specific data for a call to SiGetEvent */
        SiGetEventWinInit(&EData, msg.message, msg.wParam, msg.lParam);

        /* check whether msg was a Spaceball event and process it */
        if (SiGetEvent (devHdl, 0, &EData, &Event) == SI_IS_EVENT)
        {
            if (Event.type == SI_MOTION_EVENT)
            {
                SbMotionEvent(&Event);        /* process Spaceball motion event */
            }
            if (Event.type == SI_ZERO_EVENT)
            {
                SbZeroEvent();                /* process Spaceball zero event */
            }
            if (Event.type == SI_BUTTON_EVENT)
            {
                if ((num = SiButtonPressed (&Event)) != SI_NO_BUTTON)
                {
                    SbButtonPressEvent(num);        /* process Spaceball button event */
                }
                if ((num = SiButtonReleased (&Event)) != SI_NO_BUTTON)
                {
                    SbButtonReleaseEvent(num);        /* process Spaceball button event */
                }
            }

            handled = SPW_TRUE;              /* spaceball event handled */
        }

        /* not a Spaceball event, let windows handle it */
        if (handled == SPW_FALSE)
        {
            TranslateMessage( &msg );
            DispatchMessage( &msg );
        }
    }

    return( msg.wParam );
}
Exemplo n.º 4
0
int
SbButtonEvent(SiOpenData *pOData, SiGetEventData *pEData,
              SiSpwEvent *pEvent, void *pUData)
{

  int button;

  if ((button = SiButtonReleased (pEvent)) != SI_NO_BUTTON)
    SbButtonReleaseEvent(button, pUData);

  if ((button = SiButtonPressed (pEvent)) != SI_NO_BUTTON)
    SbButtonPressEvent(button, pUData);

  return (0);

}