Changeset 3163 for trunk/src


Ignore:
Timestamp:
Mar 19, 2000, 10:16:58 AM (25 years ago)
Author:
mike
Message:

Fixed Dinput

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/dinput/dinput.cpp

    r2499 r3163  
    1 /* $Id: dinput.cpp,v 1.4 2000-01-22 10:31:06 sandervl Exp $ */
     1/* $Id: dinput.cpp,v 1.5 2000-03-19 09:16:58 mike Exp $ */
    22/*              DirectInput
    33 *
     
    218218        ICOM_VTBL(This) = &ddiavt;
    219219        *ppDI=(IDirectInputA*)This;
     220        OSLibInit();
    220221        return 0;
    221222}
     
    523524)
    524525{
     526        ICOM_THIS(SysKeyboardAImpl,iface);
     527//        TRACE("DINPUT-SKAI: GetDeviceData (this=%p,%ld,%p)\n",
     528//              This, len, ptr);
     529
    525530#ifdef __WIN32OS2__
    526         return OSLibGetDIState(len, ptr) ? DI_OK : E_FAIL;
     531//        return OSLibGetDIState(len, ptr) ? DI_OK : E_FAIL;
     532        if (ptr == NULL || len > 256)
     533           return E_FAIL;
     534
     535        memcpy(ptr, This->keystate, len);
     536        return DI_OK;
    527537#else
    528538        return KEYBOARD_Driver->pGetDIState(len, ptr)?DI_OK:E_FAIL;
    529539#endif
     540}
     541
     542static ULONG WINAPI SysKeyboardAImpl_Release(LPDIRECTINPUTDEVICE2A iface)
     543{
     544        ICOM_THIS(SysKeyboardAImpl,iface);
     545        TRACE("DINPUT-SKAI: Release (this=%p)\n", This);
     546
     547        This->ref--;
     548        if (This->ref)
     549                return This->ref;
     550
     551        /* Free the data queue */
     552        if (This->data_queue != NULL)
     553          HeapFree(GetProcessHeap(),0,This->data_queue);
     554
     555        /* Remeove the previous event handler (in case of releasing an acquired
     556           keyboard device) */
     557        KEYBOARD_Enable(NULL);
     558
     559        HeapFree(GetProcessHeap(),0,This);
     560        return 0;
    530561}
    531562
     
    594625
    595626   SysKeyboardAImpl* This = (SysKeyboardAImpl*) current_keylock;
     627   BYTE  scan = (lParam >> 16) & 0xFF;
    596628
    597629   // fake a key up transition for typematic repeat
     
    599631      if (lParam & 0x40000000) {              // key was down before
    600632         dprintf(("Repeat\n"));
    601          GEN_KEYEVENT((lParam >> 16) & 0xFF,  // scancode
     633         GEN_KEYEVENT(scan,                   // scancode
    602634                      0,                      // key up
    603635                      time(NULL), evsequence++);
    604636      }
    605    GEN_KEYEVENT((lParam >> 16) & 0xFF,  // scancode
     637
     638   GEN_KEYEVENT(scan,  // scancode
    606639                (lParam & 0x80000000) ? 0 : 0x80,
    607640                time(NULL), evsequence++);
     641
     642   if (msg == WM_KEYDOWN)
     643         This->keystate[scan] = 0x80;
     644   else
     645         This->keystate[scan] = 0x00;
     646
    608647   return TRUE;
    609648}
     
    632671        /* unregister the callback */
    633672        KEYBOARD_Enable(NULL);
    634 
    635         /* Free the data queue */
    636         if (This->data_queue != NULL)
    637           HeapFree(GetProcessHeap(),0,This->data_queue);
    638673
    639674        /* No more locks */
     
    9871022  }
    9881023
    989   TRACE(" %ld %ld ", posX, posY);
     1024  TRACE("DINPUT-SMAI: event %ld, %ld", posX, posY);
    9901025
    9911026  if ( dwFlags & MOUSEEVENTF_MOVE ) {
     
    16101645        IDirectInputDevice2AImpl_QueryInterface,
    16111646        IDirectInputDevice2AImpl_AddRef,
    1612         IDirectInputDevice2AImpl_Release,
     1647        SysKeyboardAImpl_Release,
    16131648        IDirectInputDevice2AImpl_GetCapabilities,
    16141649        IDirectInputDevice2AImpl_EnumObjects,
Note: See TracChangeset for help on using the changeset viewer.