
    ^j*                         d dl Z d dlZd dlmZmZ d dl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DeviceOpenException)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      X/home/agentuser/manim-venv/lib/python3.11/site-packages/pyglet/input/linux/x11_xinput.pyptr_addr      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_press       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_release   r!   r   c                     d S r   r   r   s     r   _motionzDeviceResponder._motion"   r!   r   c                     d S r   r   r   s     r   _proximity_inzDeviceResponder._proximity_in%   r!   r   c                     d S r   r   r   s     r   _proximity_outzDeviceResponder._proximity_out(   r!   r   N)
__name__
__module____qualname__r    r#   r%   r'   r)   r+   r-   r   r   r   r   r      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           	      6   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                            t3          d|z                       -n|t           j        k    r~t          j        |t          j        t           j                            }|j        j        }t          |dz             D ],}| j                            t3          d|z                       -n0|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    r7| j	                            tG          d|z  |j$        |j%                             Q|
t           j&        k    r*| j	                            tO          d|z                       |j        }tQ          ||j)                  }| j        | j        z   | j	        z   | _*        | j	        r5t3          d          | _+        | j*                            | j+                   d S d | _+        d S )Nclasszkey%d   zbutton%dzaxis%d	proximity),super__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_classrK   rO   rR   rS   r?   axiscls	__class__s                 r   r8   zXInputDevice.__init__-   s   %(8"9"9:::%. 		({.//  	+  	+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lDNTXTb)c)cdddd,,	((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   )rZ   )r   s    r   get_controlszXInputDevice.get_controlse   s
    }r   NFc                    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)r7   open_is_openr   r\   _displayrE   XOpenDevicer;   r<   _install_events)r   window	exclusiverc   s      r   rg   zXInputDevice.openh   s     	VY'''>!DM%&GHHH>"dl&;;;!DM%&IJJJ 	M!DM%&KLLL~dl&;T_MM| 	<!DM%&:;;;V$$$$$r   c                     t                                                       | j        sd S t          j        | j        j        | j                   d S r   )r7   closer<   rE   XCloseDevicer\   ri   )r   rc   s    r   ro   zXInputDevice.close   sD    | 	F 	-t|<<<<<r   c                 |    t                               |          }|                    | j        | j        |            d S r   )XInputWindowEventDispatcherget_dispatcheropen_devicer;   r<   )r   rl   
dispatchers      r   rk   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r>   keycoderJ   valuer   s     r   r    zXInputDevice._key_press   s!    8<	!)d../555r   c                 D    d| j         |j        | j        z
           _        d S NFrx   r   s     r   r#   zXInputDevice._key_release   s!    8=	!)d../555r   c                 4    d| j         |j                 _        d S rw   r=   buttonrz   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   )rA   
axes_count	axis_datar?   rz   )r   r   r^   s      r   r)   zXInputDevice._motion   s<    q|$$ 	0 	0A!"QDIaL	0 	0r   c                 0    | j         rd| j         _        d S d S rw   r[   rz   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|   )r.   r/   r0   r8   re   rg   ro   rk   r    r#   r%   r'   r)   r+   r-   __classcell__)rc   s   @r   r2   r2   ,   s        6* 6* 6* 6* 6*p  % % % % % %0= = = = =D D D= = => > >, , ,- - -0 0 00 0 01 1 1 1 1 1 1r   r2   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 )rr   c                 "    || _         i | _        d S r   )rl   _responders)r   rl   s     r   r8   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AttributeErrorrr   )rl   ru   s     r   rs   z*XInputWindowEventDispatcher.get_dispatcher   sS    	g@JJ 	g 	g 	gC^_eCfCffJ@@@	g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_baserL   rl   _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   rB   rA   classesinput_classrE   rH   _deviceKeyPress_event_xinput_key_press_deviceKeyRelease_event_xinput_key_releaserM   _deviceButtonPress_event_xinput_button_press_deviceButtonRelease_event_xinput_button_releaserP   _deviceMotionNotify_event_xinput_motionProximityClass_proximityIn_event_xinput_proximity_in_proximityOut_event_xinput_proximity_outFeedbackClass
FocusClass
OtherClassXEventClasslenXSelectExtensionEventrl   
_x_display_window)	r   r   devicer   r   r^   r   arrayr   s	   ``      @r   rt   z'XInputWindowEventDispatcher.open_device   s
   9i000! 	F 	9 	9 	9 	9 	9 	9 	9 v)** 	 	A*J%44J 2D4PQQQJ 4d6TUUUU'2>99J 5t7VWWWJ 79Z[[[['2+;;;J 68QRRRR'2+<<<J1PQQQJ 0$2RSSSS'2+;;;'2=88'2=88#f++-7
 !79LeUXY^U_U_`````r   r   c                    t          j        t          j        |          t          j        t          j                            j        }| j                            |j	                  }||
                    |           d S d S r   )r   rC   byrefrD   rE   XDeviceKeyEventr   r   getdeviceidr    r   evr   r   s       r   r   z3XInputWindowEventDispatcher._event_xinput_key_press   sm    KR((&.9K*L*LMMV!%%aj11a      r   c                    t          j        t          j        |          t          j        t          j                            j        }| j                            |j	                  }||
                    |           d S d S r   )r   rC   r   rD   rE   r   r   r   r   r   r#   r   s       r   r   z5XInputWindowEventDispatcher._event_xinput_key_release   sm    KR((&.9K*L*LMMV!%%aj11""""" r   c                    t          j        t          j        |          t          j        t          j                            j        }| j                            |j	                  }||
                    |           d S d S r   )r   rC   r   rD   rE   XDeviceButtonEventr   r   r   r   r%   r   s       r   r   z6XInputWindowEventDispatcher._event_xinput_button_press   sm    KR((&.9N*O*OPPY!%%aj11  ##### r   c                    t          j        t          j        |          t          j        t          j                            j        }| j                            |j	                  }||
                    |           d S d S r   )r   rC   r   rD   rE   r   r   r   r   r   r'   r   s       r   r   z8XInputWindowEventDispatcher._event_xinput_button_release  sm    KR((&.9N*O*OPPY!%%aj11""1%%%%% r   c                    t          j        t          j        |          t          j        t          j                            j        }| j                            |j	                  }||
                    |           d S d S r   )r   rC   r   rD   rE   XDeviceMotionEventr   r   r   r   r)   r   s       r   r   z0XInputWindowEventDispatcher._event_xinput_motion  sk    KR((&.9N*O*OPPY!%%aj11NN1 r   c                    t          j        t          j        |          t          j        t          j                            j        }| j                            |j	                  }||
                    |           d S d S r   )r   rC   r   rD   rE   XProximityNotifyEventr   r   r   r   r+   r   s       r   r   z6XInputWindowEventDispatcher._event_xinput_proximity_in  sm    KR((&.9Q*R*RSS\!%%aj11  ##### r   c                    t          j        t          j        |          t          j        t          j                            j        }| j                            |j	                  }||
                    |           d S d S r   )r   rC   r   rD   rE   r   r   r   r   r   r-   r   s       r   r   z7XInputWindowEventDispatcher._event_xinput_proximity_out  sm    KR((&.9Q*R*RSS\!%%aj11!!!$$$$$ r   N)r.   r/   r0   r8   staticmethodrs   r   r   rt   pygletrl   r   XlibEventHandlerr   r   r   r   r   r   r   r   r   r   rr   rr      s            \0 0 0( ( (2a 2a 2ah ]((++! ! ,+! ]((++# # ,+# ]((++$ $ ,+$ ]((++& & ,+& ]((++  ,+ ]((++$ $ ,+$ ]((,,% % -,% % %r   rr   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   XQueryExtensionri   r   boolrz   )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   r\   get_display_have_xinputr   r   r   rE   XListInputDevicesri   rA   rz   rL   r2   XFreeDeviceList)r\   devicescountdevice_listr^   r]   s         r   get_devicesr   4  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   pyglet.libs.x11r   pyglet.utilr	   r
   rE   r   r   r   r2   rr   r   r   r   r   r   <module>r      sn     9 9 9 9 9 9 9 9 @ @ @ @ @ @ @ @ @ @                  ,,,,,,LLLLLD D D
       .y1 y1 y1 y1 y1?F y1 y1 y1x}% }% }% }% }% }% }% }%@	$ 	$ 	$     s   1 7