
    \
j3                         d dl Z d dlZd dlmZmZmZ d dlmZmZmZm	Z	 d dl
mZ d dlmZ 	 d dl
mZ dZn	#  dZY nxY wd	 Z G d
 d          Z G d dee          Z G d d          Zd ZddZdS )    N)DeviceDeviceExceptionDeviceOpenException)ControlButtonRelativeAxisAbsoluteAxis)xlib)asstr)xinputTFc                     t          j        | j                  |z   }t          j        t	          | j                                      |                    S N)ctypes	addressofcontentspointertypefrom_address)ptroffsetaddresss      Q/DATA/AppData/hermes/venv/lib/python3.11/site-packages/pyglet/input/x11_xinput.pyptr_addr   3   sA    s|,,v5G>$s|,,99'BBCCC    c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	DeviceResponderc                     d S r    selfes     r   
_key_presszDeviceResponder._key_press9       r   c                     d S r   r   r   s     r   _key_releasezDeviceResponder._key_release<   r#   r   c                     d S r   r   r   s     r   _button_presszDeviceResponder._button_press?   r#   r   c                     d S r   r   r   s     r   _button_releasezDeviceResponder._button_releaseB   r#   r   c                     d S r   r   r   s     r   _motionzDeviceResponder._motionE   r#   r   c                     d S r   r   r   s     r   _proximity_inzDeviceResponder._proximity_inH   r#   r   c                     d S r   r   r   s     r   _proximity_outzDeviceResponder._proximity_outK   r#   r   N)
__name__
__module____qualname__r"   r%   r'   r)   r+   r-   r/   r   r   r   r   r   8   s}                        r   r   c                   j     e Zd Z fdZd Zd fd	Z fdZd Zd Zd	 Z	d
 Z
d Zd Zd Zd Z xZS )XInputDevicec           	      F   t          t          |                               |t          |j                             |j        | _        d | _        g | _        g | _	        g | _
        |j        }t          |j                  D ]}t          j        |t          j        t"          j                            }t'          |j        d          }|t"          j        k    rt          j        |t          j        t"          j                            }|j        j        | _        |j        j        }t          |          D ],}| j	                            t5          d|z                       -n|t"          j        k    r~t          j        |t          j        t"          j                            }|j        j        }t          |dz             D ],}| j                            t5          d|z                       -n1|t"          j        k    r t          j        |t          j        t"          j                            }|j        j         }	|j        j!        }
t          j        |j        j
        t          j        t"          j"                            }t          |	          D ]}||         }|
t"          j#        k    r8| j
                            tI          d|z  |j%        |j&                             R|
t"          j'        k    r*| j
                            tQ          d|z                       |j        }tS          ||j*                  }| j        | j	        z   | j
        z   | _+        | j
        r5t5          d          | _,        | j+                            | j,                   d S d | _,        d S )Nclasszkey%d   zbutton%dzaxis%d)minmax	proximity)-superr4   __init__r   nameid
_device_id_devicebuttonskeysaxesinputclassinforangenum_classesr   castPOINTERxiXAnyClassInfogetattrr   KeyClassXKeyInfomin_keycodenum_keysappendr   ButtonClassXButtonInfonum_buttonsValuatorClassXValuatorInfonum_axesmode	XAxisInfoAbsoluter	   	min_value	max_valueRelativer   r   lengthcontrolsproximity_control)r    displaydevice_infor   icp	cls_classrO   rS   rV   rW   rC   axiscls	__class__s                 r   r<   zXInputDevice.__init__P   s/   lD!!**7E+:J4K4KLLL%. 		({.// "	+ "	+AS&.1A"B"BCCBW55IBK''[fnR[&A&ABB#%;#: ;/x : :AI$$VGaK%8%89999: bn,,[fnR^&D&DEE k5{Q// @ @AL''zA~(>(>????@ b...[fnR5E&F&FGG;/{'{2;#3#)>",#?#?A Ax E EA7Dr{**	((hl:>.:>.*J *J *J K K K K ,,	((hl)C)CDDD+C#sz**CCty049< 9 	*%+K%8%8D"M  !788888%)D"""r   c                     | j         S r   )r^   )r    s    r   get_controlszXInputDevice.get_controls   s
    }r   NFc                    t          t          |                               ||           |d| _        t	          d          |j        j        | j        j        k    rd| _        t	          d          |rd| _        t	          d          t          j        | j        j        | j	                  | _
        | j
        sd| _        t	          d          |                     |           d S )NFzXInput devices require a windowz!Window and device displays differz#Cannot open XInput device exclusivezCannot open device)r;   r4   openis_openr   r`   _displayrI   XOpenDevicer?   r@   _install_events)r    window	exclusiverg   s      r   rk   zXInputDevice.open   s     	lD!!&&vy999> DL%&GHHH>"dl&;;; DL%&IJJJ 	M DL%&KLLL~dl&;T_MM| 	< DL%&:;;;V$$$$$r   c                     t          t          |                                            | j        sd S t	          j        | j        j        | j                   d S r   )r;   r4   closer@   rI   XCloseDevicer`   rm   )r    rg   s    r   rs   zXInputDevice.close   sO    lD!!'')))| 	F 	-t|<<<<<r   c                 |    t                               |          }|                    | j        | j        |            d S r   )XInputWindowEventDispatcherget_dispatcheropen_devicer?   r@   )r    rp   
dispatchers      r   ro   zXInputDevice._install_events   s7    0??GG
tdCCCCCr   c                 D    d| j         |j        | j        z
           _        d S NTrB   keycoderN   valuer   s     r   r"   zXInputDevice._key_press   s!    8<	!)d../555r   c                 D    d| j         |j        | j        z
           _        d S NFr|   r   s     r   r%   zXInputDevice._key_release   s!    8=	!)d../555r   c                 4    d| j         |j                 _        d S r{   rA   buttonr~   r   s     r   r'   zXInputDevice._button_press   s    '+QX$$$r   c                 4    d| j         |j                 _        d S r   r   r   s     r   r)   zXInputDevice._button_release   s    ',QX$$$r   c                 n    t          |j                  D ]}|j        |         | j        |         _         d S r   )rE   
axes_count	axis_datarC   r~   )r    r!   rb   s      r   r+   zXInputDevice._motion   s<    q|$$ 	0 	0A!"QDIaL	0 	0r   c                 0    | j         rd| j         _        d S d S r{   r_   r~   r   s     r   r-   zXInputDevice._proximity_in   s(    ! 	0+/D"(((	0 	0r   c                 0    | j         rd| j         _        d S d S r   r   r   s     r   r/   zXInputDevice._proximity_out   s(    ! 	1+0D"(((	1 	1r   r   )r0   r1   r2   r<   ri   rk   rs   ro   r"   r%   r'   r)   r+   r-   r/   __classcell__)rg   s   @r   r4   r4   O   s        8* 8* 8* 8* 8*t  % % % % % %0= = = = =D D D= = => > >, , ,- - -0 0 00 0 01 1 1 1 1 1 1r   r4   c                   l   e Zd Zd Zed             Zd Zd Zd Ze	j
        j                            d          d             Ze	j
        j                            d          d             Ze	j
        j                            d          d	             Ze	j
        j                            d          d
             Ze	j
        j                            d          d             Ze	j
        j                            d          d             Ze	j
        j                            d          d             ZdS )rv   c                 "    || _         i | _        d S r   )rp   _responders)r    rp   s     r   r<   z$XInputWindowEventDispatcher.__init__   s    r   c                 d    	 | j         }n&# t          $ r t          |           x}| _         Y nw xY w|S r   )<_XInputWindowEventDispatcher__xinput_window_event_dispatcherAttributeErrorrv   )rp   ry   s     r   rw   z*XInputWindowEventDispatcher.get_dispatcher   sQ    	4@JJ 	4 	4 	4+F334J@@@	4 s   
  --c                     || j         |<   d S r   r   )r    	device_id	responders      r   set_responderz)XInputWindowEventDispatcher.set_responder   s    &/###r   c                     | j         |= d S r   r   )r    r   s     r   remove_responderz,XInputWindowEventDispatcher.remove_responder   s    Y'''r   c                 $                          |           |j        }|j        sd S g  fd}t          |j                  D ]q}|j        |         }|j        t          j        k    r9 ||t          j         j	                    ||t          j
         j                   ^|j        t          j        k    r9 ||t          j         j                    ||t          j         j                   |j        t          j        k    r ||t          j         j                   |j        t          j        k    r: ||t          j         j                    ||t          j         j                   -|j        t          j        k    rD|j        t          j        k    r[|j        t          j        k    r	 st          j        t;                    z   }t          j         j        j          j        j!        |t;          |                     d S )Nc                 t    | j         |z   }dz  |z  }                    |           |j        j        |<   d S )N   )event_type_baserP   rp   _event_handlers)
class_infoeventhandler_type_classr   eventsr    s        r   addz4XInputWindowEventDispatcher.open_device.<locals>.add   sE    .6E!^e+FMM&!!!18DK'...r   )"r   r   rF   rE   classesinput_classrI   rL   _deviceKeyPress_event_xinput_key_press_deviceKeyRelease_event_xinput_key_releaserQ   _deviceButtonPress_event_xinput_button_press_deviceButtonRelease_event_xinput_button_releaserT   _deviceMotionNotify_event_xinput_motionProximityClass_proximityIn_event_xinput_proximity_in_proximityOut_event_xinput_proximity_outFeedbackClass
FocusClass
OtherClassXEventClasslenXSelectExtensionEventrp   
_x_display_window)	r    r   devicer   r   rb   r   arrayr   s	   ``      @r   rx   z'XInputWindowEventDispatcher.open_device   sT   9i000! 	F 	9 	9 	9 	9 	9 	9 	9 v)** 	 	A*J%44J 202 2 2J 424 4 4 4 '2>99J 535 5 5J 757 7 7 7 '2+;;;J 6-/ / / / '2+<<<J35 5 5J 046 6 6 6 '2+;;;'2=88'2=88#f++-7
 !7!%!4!&!$U	- 	- 	- 	- 	-r   r   c                    t          j        t          j        |          t          j        t          j                            j        }| j                            |j	                  }||
                    |           d S d S r   )r   rG   byrefrH   rI   XDeviceKeyEventr   r   getdeviceidr"   r    evr!   r   s       r   r   z3XInputWindowEventDispatcher._event_xinput_key_press  sw    KR((r'9::< <<D 	
 !%%aj11a      r   c                    t          j        t          j        |          t          j        t          j                            j        }| j                            |j	                  }||
                    |           d S d S r   )r   rG   r   rH   rI   r   r   r   r   r   r%   r   s       r   r   z5XInputWindowEventDispatcher._event_xinput_key_release(  sw    KR((r'9::< <<D 	
 !%%aj11""""" r   c                    t          j        t          j        |          t          j        t          j                            j        }| j                            |j	                  }||
                    |           d S d S r   )r   rG   r   rH   rI   XDeviceButtonEventr   r   r   r   r'   r   s       r   r   z6XInputWindowEventDispatcher._event_xinput_button_press1  sw    KR((r'<==? ??G 	
 !%%aj11  ##### r   c                    t          j        t          j        |          t          j        t          j                            j        }| j                            |j	                  }||
                    |           d S d S r   )r   rG   r   rH   rI   r   r   r   r   r   r)   r   s       r   r   z8XInputWindowEventDispatcher._event_xinput_button_release:  sw    KR((r'<==? ??G 	
 !%%aj11""1%%%%% r   c                    t          j        t          j        |          t          j        t          j                            j        }| j                            |j	                  }||
                    |           d S d S r   )r   rG   r   rH   rI   XDeviceMotionEventr   r   r   r   r+   r   s       r   r   z0XInputWindowEventDispatcher._event_xinput_motionC  su    KR((r'<==? ??G 	
 !%%aj11NN1 r   c                    t          j        t          j        |          t          j        t          j                            j        }| j                            |j	                  }||
                    |           d S d S r   )r   rG   r   rH   rI   XProximityNotifyEventr   r   r   r   r-   r   s       r   r   z6XInputWindowEventDispatcher._event_xinput_proximity_inL  sy    KR((r'?@@B BBJ 	
 !%%aj11  ##### r   c                    t          j        t          j        |          t          j        t          j                            j        }| j                            |j	                  }||
                    |           d S d S r   )r   rG   r   rH   rI   r   r   r   r   r   r/   r   s       r   r   z7XInputWindowEventDispatcher._event_xinput_proximity_outU  sy    KR((r'?@@B BBJ 	
 !%%aj11!!!$$$$$ r   N)r0   r1   r2   r<   staticmethodrw   r   r   rx   pygletrp   r
   XlibEventHandlerr   r   r   r   r   r   r   r   r   r   rv   rv      s            \0 0 0( ( (<- <- <-| ]((++! ! ,+! ]((++# # ,+# ]((++$ $ ,+$ ]((++& & ,+& ]((++  ,+ ]((++$ $ ,+$ ]((,,% % -,% % %r   rv   c           	      B   t          j                    }t          j                    }t          j                    }t          j        | j        dt          j        |          t          j        |          t          j        |                     t          |j                  S )Ns   XInputExtension)r   c_intr
   XQueryExtensionrm   r   boolr~   )r`   major_opcodefirst_eventfirst_errors       r   _check_extensionr   _  sz    <>>L,..K,..K)+=l33k22k224 4 4 "###r   c                    | t           j                                        } t          rt	          |           sg S g }t          j        d          }t          j        | j	        |          }t          |j                  D ]-}||         }|                    t          | |                     .t          j        |           |S )Nr   )r   canvasget_display_have_xinputr   r   r   rI   XListInputDevicesrm   rE   r~   rP   r4   XFreeDeviceList)r`   devicescountdevice_listrb   ra   s         r   get_devicesr   j  s    -++-- /88 	GLOOE&w'7??K5; ; ;!!n|G[99::::{###Nr   r   )r   r   pyglet.input.baser   r   r   r   r   r   r	   pyglet.libs.x11r
   pyglet.utilr   r   rI   r   r   r   r4   rv   r   r   r   r   r   <module>r      s}  H   J J J J J J J J J J I I I I I I I I I I I I                  ,,,,,,LLLLLD D D
       .{1 {1 {1 {1 {1?F {1 {1 {1|O% O% O% O% O% O% O% O%d$ $ $     s   5 ;