windows.factor KUSUMOTO Norio plan 2
bug fix for issue #1 Review of the structure of words NUMPAD&OEM-keydown-codes plugable keyboard info keyboard auto detect conflict ToUnicode version resolve conflicts ui.backend.windows: fix whitespaceclean-macosx-x86-32
							parent
							
								
									968fea56d0
								
							
						
					
					
						commit
						08aa27a112
					
				| 
						 | 
				
			
			@ -9,7 +9,7 @@ threads ui ui.backend ui.clipboards ui.event-loop ui.gadgets
 | 
			
		|||
ui.gadgets.private ui.gadgets.worlds ui.gestures ui.pixel-formats
 | 
			
		||||
ui.private windows.dwmapi windows.errors windows.gdi32
 | 
			
		||||
windows.kernel32 windows.messages windows.offscreen windows.opengl32
 | 
			
		||||
windows.types windows.user32 assocs.extras ;
 | 
			
		||||
windows.types windows.user32 assocs.extras byte-arrays ;
 | 
			
		||||
SPECIALIZED-ARRAY: POINT
 | 
			
		||||
QUALIFIED-WITH: alien.c-types c
 | 
			
		||||
IN: ui.backend.windows
 | 
			
		||||
| 
						 | 
				
			
			@ -321,40 +321,41 @@ CONSTANT: exclude-keys-wm-char
 | 
			
		|||
: send-key-up ( sym action? hWnd -- )
 | 
			
		||||
    [ [ <key-up> ] ] dip send-key-gesture ;
 | 
			
		||||
 | 
			
		||||
: key-sym ( wParam -- string/f action? )
 | 
			
		||||
    {
 | 
			
		||||
        {
 | 
			
		||||
            [ dup LETTER? ]
 | 
			
		||||
            [ shift? caps-lock? xor [ CHAR: a + CHAR: A - ] unless 1string f ]
 | 
			
		||||
        }
 | 
			
		||||
        { [ dup digit? ] [ 1string f ] }
 | 
			
		||||
        [ wm-keydown-codes at t ]
 | 
			
		||||
    } cond ;
 | 
			
		||||
: key-sym ( wParam -- string/f )
 | 
			
		||||
    wm-keydown-codes at ; inline
 | 
			
		||||
 | 
			
		||||
:: handle-wm-keydown ( hWnd uMsg wParam lParam -- )
 | 
			
		||||
:: (handle-wm-keydown/up) ( hWnd uMsg wParam lParam send-key-down/up -- )
 | 
			
		||||
    wParam exclude-key-wm-keydown? [
 | 
			
		||||
        wParam key-sym over [
 | 
			
		||||
            dup ctrl? alt? xor or [
 | 
			
		||||
                hWnd send-key-down
 | 
			
		||||
            ] [ 2drop ] if
 | 
			
		||||
        ] [ 2drop ] if
 | 
			
		||||
    ] unless ;
 | 
			
		||||
        wParam key-sym [
 | 
			
		||||
            t hWnd send-key-down/up execute( sym action? hWnd -- )
 | 
			
		||||
        ] [
 | 
			
		||||
            256 <byte-array> :> keyboard-state
 | 
			
		||||
            4 <byte-array> :> chars
 | 
			
		||||
            lParam -16 shift 0xff bitand :> scan-code
 | 
			
		||||
            keyboard-state GetKeyboardState win32-error<>0
 | 
			
		||||
            VK_CONTROL VK_CAPITAL [ 0 swap keyboard-state set-nth ] bi@
 | 
			
		||||
            wParam scan-code keyboard-state chars 2 0 ToUnicode dup win32-error=0/f
 | 
			
		||||
            1 <=  [
 | 
			
		||||
                1 chars nth 8 shift 0 chars nth bitor
 | 
			
		||||
            ] [
 | 
			
		||||
                3 chars nth 8 shift 2 chars nth bitor ! dead-key
 | 
			
		||||
            ] if
 | 
			
		||||
            1string f hWnd send-key-down/up execute( sym action? hWnd -- )
 | 
			
		||||
        ] if*
 | 
			
		||||
    ] unless ; inline
 | 
			
		||||
 | 
			
		||||
: handle-wm-keydown ( hWnd uMsg wParam lParam -- )
 | 
			
		||||
    \ send-key-down (handle-wm-keydown/up) ;
 | 
			
		||||
 | 
			
		||||
:: handle-wm-char ( hWnd uMsg wParam lParam -- )
 | 
			
		||||
    wParam exclude-key-wm-char? [
 | 
			
		||||
        ctrl? alt? xor [
 | 
			
		||||
            wParam 1string
 | 
			
		||||
            [ f hWnd send-key-down ]
 | 
			
		||||
            [ hWnd window user-input ] bi
 | 
			
		||||
       ctrl? alt? xor [ ! enable AltGr combination inputs
 | 
			
		||||
           wParam 1string hWnd window user-input
 | 
			
		||||
       ] unless
 | 
			
		||||
    ] unless ;
 | 
			
		||||
 | 
			
		||||
:: handle-wm-keyup ( hWnd uMsg wParam lParam -- )
 | 
			
		||||
    wParam exclude-key-wm-keydown? [
 | 
			
		||||
        wParam key-sym over [
 | 
			
		||||
            hWnd send-key-up
 | 
			
		||||
        ] [ 2drop ] if
 | 
			
		||||
    ] unless ;
 | 
			
		||||
: handle-wm-keyup ( hWnd uMsg wParam lParam -- )
 | 
			
		||||
    \ send-key-up (handle-wm-keydown/up) ;
 | 
			
		||||
 | 
			
		||||
:: set-window-active ( hwnd uMsg wParam lParam ? -- n )
 | 
			
		||||
    ? hwnd window active?<<
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1643,7 +1643,7 @@ FUNCTION: HKL GetKeyboardLayout ( DWORD idThread )
 | 
			
		|||
! FUNCTION: GetKeyboardLayoutList
 | 
			
		||||
! FUNCTION: GetKeyboardLayoutNameA
 | 
			
		||||
! FUNCTION: GetKeyboardLayoutNameW
 | 
			
		||||
! FUNCTION: GetKeyboardState
 | 
			
		||||
FUNCTION: BOOL GetKeyboardState ( BYTE *lpKeyState )
 | 
			
		||||
FUNCTION: int GetKeyboardType ( int nTypeFlag )
 | 
			
		||||
! FUNCTION: GetKeyNameTextA
 | 
			
		||||
! FUNCTION: GetKeyNameTextW
 | 
			
		||||
| 
						 | 
				
			
			@ -2129,7 +2129,7 @@ ALIAS: SystemParametersInfo SystemParametersInfoW
 | 
			
		|||
! FUNCTION: TileWindows
 | 
			
		||||
! FUNCTION: ToAscii
 | 
			
		||||
! FUNCTION: ToAsciiEx
 | 
			
		||||
! FUNCTION: ToUnicode
 | 
			
		||||
FUNCTION: int ToUnicode ( UINT wVirtKey, UINT wScanCode, BYTE *lpKeyState, LPWSTR pwszBuff, int cchBuff, UINT wFlags )
 | 
			
		||||
! FUNCTION: ToUnicodeEx
 | 
			
		||||
FUNCTION: BOOL TrackMouseEvent ( LPTRACKMOUSEEVENT lpEventTrack )
 | 
			
		||||
! FUNCTION: TrackPopupMenu
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue