107 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Factor
		
	
	
| ! Copyright (C) 2018 Doug Coleman.
 | |
| ! See http://factorcode.org/license.txt for BSD license.
 | |
| USING: accessors alien.c-types alien.data alien.syntax
 | |
| classes.struct kernel multiline namespaces ui windows.com
 | |
| windows.com.syntax windows.com.wrapper windows.ole32
 | |
| windows.types ;
 | |
| IN: windows.surface-dial
 | |
| 
 | |
| STRUCT: HSTRING__
 | |
|     { unused int } ;
 | |
| TYPEDEF: HSTRING__* HSTRING
 | |
| 
 | |
| ENUM: TrustLevel
 | |
|     { BaseTrust 0 }
 | |
|     { PartialTrust 1 }
 | |
|     { FullTrust 2 } ;
 | |
| 
 | |
| COM-INTERFACE: IInspectable IUnknown {AF86E2E0-B12D-4c6a-9C5A-D7AA65101E90}
 | |
|     HRESULT GetIids ( ULONG* iidCount, IID** iids )
 | |
|     HRESULT GetRuntimeClassName ( HSTRING* className )
 | |
|     HRESULT GetTrustLevel ( TrustLevel* trustLevel )
 | |
| ;
 | |
| 
 | |
| ! IInspectable
 | |
| COM-INTERFACE: IRadialControllerConfigurationInterop IInspectable {787cdaac-3186-476d-87e4-b9374a7b9970}
 | |
|     HRESULT GetForWindow ( HWND hwnd, REFIID riid, void** ppv )
 | |
| ;
 | |
| 
 | |
| COM-INTERFACE: IRadialControllerInterop IInspectable {1B0535C9-57AD-45C1-9D79-AD5C34360513}
 | |
|     HRESULT CreateForWindow ( HWND hwnd, REFIID riid, void** ppv )
 | |
| ;
 | |
| 
 | |
| <<
 | |
| SYMBOL: +radial-controller-configuration-wrapper+
 | |
| SYMBOL: +radial-controller-wrapper+
 | |
| >>
 | |
| 
 | |
| <<
 | |
| {
 | |
|     {
 | |
|         IRadialControllerConfigurationInterop
 | |
|         {
 | |
|             ! HRESULT GetIids ( this, ULONG* iidCount, IID** iids )
 | |
|             [ 3drop S_OK ]
 | |
| 
 | |
|             ! HRESULT GetRuntimeClassName ( this, HSTRING* className )
 | |
|             [ 2drop S_OK ]
 | |
| 
 | |
|             ! HRESULT GetTrustLevel ( this, TrustLevel* trustLevel )
 | |
|             [ 2drop S_OK ]
 | |
| 
 | |
|             ! HRESULT GetForWindow ( this, HWND hwnd, REFIID riid, void** ppv )
 | |
|             [
 | |
|                 4drop S_OK
 | |
|             ]
 | |
|         }
 | |
|     }
 | |
| } <com-wrapper> +radial-controller-configuration-wrapper+ set-global
 | |
| >>
 | |
| 
 | |
| <<
 | |
| {
 | |
|     {
 | |
|         IRadialControllerInterop
 | |
|         {
 | |
|             ! HRESULT GetIids ( this, ULONG* iidCount, IID** iids )
 | |
|             [ 3drop S_OK ]
 | |
| 
 | |
|             ! HRESULT GetRuntimeClassName ( this, HSTRING* className )
 | |
|             [ 2drop S_OK ]
 | |
| 
 | |
|             ! HRESULT GetTrustLevel ( this, TrustLevel* trustLevel )
 | |
|             [ 2drop S_OK ]
 | |
| 
 | |
|             ! HRESULT CreateForWindow ( this, HWND hwnd, REFIID riid, void** ppv )
 | |
|             [
 | |
|                 4drop S_OK
 | |
|             ]
 | |
|         }
 | |
|     }
 | |
| } <com-wrapper> +radial-controller-wrapper+ set-global
 | |
| >>
 | |
| 
 | |
| ! Does nothing yet
 | |
| TUPLE: surface-dial ;
 | |
| C: <surface-dial> surface-dial
 | |
| 
 | |
| : make-radial-controller-configuration ( -- obj )
 | |
|     <surface-dial> +radial-controller-configuration-wrapper+ get com-wrap
 | |
|     IRadialControllerConfigurationInterop-iid com-query-interface [
 | |
|         topmost-window handle>> hWnd>>
 | |
|         IRadialControllerConfigurationInterop-iid
 | |
|         { void* } [
 | |
|             IRadialControllerConfigurationInterop::GetForWindow check-ole32-error
 | |
|         ] with-out-parameters
 | |
|     ] with-com-interface ;
 | |
| 
 | |
| : make-radial-controller ( -- obj )
 | |
|     <surface-dial> +radial-controller-wrapper+ get com-wrap
 | |
|     IRadialControllerInterop-iid com-query-interface [
 | |
|         topmost-window handle>> hWnd>>
 | |
|         IRadialControllerInterop-iid
 | |
|         { void* } [
 | |
|             IRadialControllerInterop::CreateForWindow check-ole32-error
 | |
|         ] with-out-parameters
 | |
|     ] with-com-interface ;
 |