
    ^j^8                     z   d dl Z d dlmZ d dlZd dlmZ d dlmZmZ d dlm	Z
 d dlmZ  ed          Ze
j        Zd Zd	 Zd
 Zd Zd Zd Zd Z G d de          Z G d de          Ze                    d           e                    d            G d d          Zd Zd Zd Zd Zd Zd Zda ddZ!dS )    N)defaultdict)DeviceOpenException)TabletTabletCanvas)	libwintab)debug_printdebug_inputc                     t                               | |d           }|t          j        |          k    sJ t                               | |t          j        |                     |S N)libWTInfoWctypessizeofbyref)categoryindexbuffersizes       T/home/agentuser/manim-venv/lib/python3.11/site-packages/pyglet/input/win32/wintab.pywtinfor      sW    ;;x--D6=((((((KK%f!5!5666M    c                     t                               | |d           }t          j        |          }t                               | ||           |j        S r   )r   r   r   create_unicode_buffervalue)r   r   r   r   s       r   wtinfo_stringr      sE    ;;x--D)$//FKK%(((<r   c                     t          j                    }t                              | |t	          j        |                     |j        S r   )wintabUINTr   r   r   r   r   r   r   r   s      r   wtinfo_uintr       5    []]FKK%f!5!5666<r   c                     t          j                    }t                              | |t	          j        |                     |j        S r   )r   WORDr   r   r   r   r   r   s      r   wtinfo_wordr$   "   r!   r   c                     t          j                    }t                              | |t	          j        |                     |j        S r   )r   DWORDr   r   r   r   r   r   s      r   wtinfo_dwordr'   (   5    \^^FKK%f!5!5666<r   c                     t          j                    }t                              | |t	          j        |                     |j        S r   )r   WTPKTr   r   r   r   r   r   s      r   wtinfo_wtpktr+   .   r(   r   c                     t          j                    }t                              | |t	          j        |                     t          |j                  S r   )r   BOOLr   r   r   r   boolr   r   s      r   wtinfo_boolr/   4   s=    []]FKK%f!5!5666r   c                       e Zd Zd Zd ZdS )WintabTabletc                    t           j        |z   | _        t          | j        t           j                                                  | _        t          | j        t           j                  | _        t          | j        t           j
                  }t          | j        t           j                  }t          | j        t           j                  }t          | j        t           j        t          j                              | _        g | _        i | _        t'          |          D ]C}t)          | ||z             }|j        s'| j                            |           || j        ||z   <   Dd S r   )r   WTI_DEVICES_devicer   DVC_NAMEstripname	DVC_PNPIDidr    DVC_HARDWAREDVC_NCSRTYPESDVC_FIRSTCSRr   DVC_NPRESSUREAXISpressure_axiscursors_cursor_maprangeWintabTabletCursorbogusappend)selfr   hardware	n_cursorsfirst_cursoricursors          r   __init__zWintabTablet.__init__;   s   )E1!$,@@FFHH	f.>??t|V-@AA  f.BCC	"4<1DEE#DL&2FVVy!! 	< 	<A'a,.>??F< <##F+++5; \!12		< 	<r   c                 "    t          | |          S r   )WintabTabletCanvas)rF   windows     r   openzWintabTablet.openQ   s    !$///r   N)__name__
__module____qualname__rL   rP    r   r   r1   r1   :   s2        < < <,0 0 0 0 0r   r1   c                   f    e Zd ZdZej        f fd	Zej        f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dedefdZdedefdZ xZS )rN   Fc                 x   t                                          |           || _        || _        t          st                      at          j                    x| _        }t          t          j
        d|           ||_        |xj        t          j        z  c_        t          j        t          j        z  t          j        z  t          j        z  t          j        z  t          j        z  t          j        z  t          j        z  t          j        z  t          z  |_        d|_        t2                              |j        t9          j        |          d          | _        | j        st?          d          | j         |j!        |t          j"        z   <   | j#        |j!        |t          j$        z   <   t          r| j%        |j!        |t          j&        z   <   d | _'        |j(        )                                | _*        |j(        +                                | _,        t[          d           | _.        d| _/        g | _0        g | _1        te          tg                                D ]}| 4                    t          j5        |ddt          j6                  }|| _/        to          d|           sJ | j8        du rte          |          D ]}| 4                    t          j5        ||dt          j9                  }te          |          D ]B}	| :                    t          j5        |||	t          j;        t          j<        d                     Cd S )Nr   TzCouldn't open tablet contextc                  *    t          t                    S r   )r   r.   rT   r   r   <lambda>z-WintabTabletCanvas.__init__.<locals>.<lambda>   s    D0A0A r   zControls Found: )=superrL   devicemsg_base_extension_masksget_extension_masksr   
LOGCONTEXTcontext_infor   WTI_DEFSYSCTX	lcMsgBase	lcOptionsCXO_MESSAGES
PK_CHANGED	PK_CURSOR
PK_BUTTONSPK_XPK_YPK_ZPK_NORMAL_PRESSUREPK_TANGENT_PRESSUREPK_ORIENTATION	lcPktData	lcPktModer   WTOpenW_hwndr   r   _contextr   _event_wt_packet_event_handlers	WT_PACKET_event_wt_proximityWT_PROXIMITY_event_wt_packetextWT_PACKETEXT_current_cursorr?   	get_scale_pressure_scaleget_bias_pressure_biasr   express_keysexpress_key_ct
touchringstouchstripsrB   get_tablet_countextension_getWTX_EXPKEYS2TABLET_PROPERTY_CONTROLCOUNT_debugoverride_keysTABLET_PROPERTY_FUNCCOUNTextension_setTABLET_PROPERTY_OVERRIDEr-   )rF   rZ   rO   r[   r_   	tablet_idcontrol_count
control_idfunction_countfunction_id	__class__s             r   rL   zWintabTabletCanvas.__init__X   s!          	5244
 ,2+<+>+>>Lv#Q555!)&"55 *0):V=M)MPVPa)a)/*57={*CEK[*Q)/)B*CEKE_*` *0)>*? CS	"S
 "#FL&,|2L2LdSS} 	F%&DEEE>B>Sx&*::;AEAYx&*==> 	^EIE]F"8f.A#AB#%3==??$2;;=='(A(ABB /1122 	_ 	_I ..v/BIqRS/5/RT TM"/D<]<<=====!T))"'"6"6 _ _J%)%7%78KYXbde8>8X&Z &ZN',^'<'< _ _**6+>	:Wb+1+JFKX\L]L]_ _ _ __	_ 	_r   c                    t          j                    }d|_        ||_        ||_        ||_        ||_        d|_        t          j	        |          |_
        t                              | j        |t          j        |                    }|r6t          j        |j        t          j        |                    j        j        S dS )Nr   )r   EXTPROPERTYversiontabletIndexcontrolIndexfunctionIndex
propertyIDreservedr   r   dataSizer   WTExtGetrq   r   castdataPOINTERcontentsr   )	rF   	extensionr   r   r   property_id
value_typepropsuccesss	            r   r   z WintabTabletCanvas.extension_get   s    !##$&(%j11,,t}id9K9KLL 	U;ty&.*D*DEENTTqr   c                 >   t          j                    }d|_        ||_        ||_        ||_        ||_        d|_        t          j	        |          |_
        |j        |j        d<   t                              | j        |t          j        |                    }|rdS dS )Nr   TF)r   r   r   r   r   r   r   r   r   r   r   r   r   r   WTExtSetrq   r   )	rF   r   r   r   r   r   r   r   r   s	            r   r   z WintabTabletCanvas.extension_set   s    !##$&(%e,,{	!,,t}id9K9KLL 	4ur   c                    t                               | j                   d | _        | j        j        | j        t          j        z   = | j        j        | j        t          j        z   = t          r!| j        j        | j        t          j
        z   = d S d S r   )r   WTCloserq   rO   rs   r[   r   rt   rv   r\   rx   rF   s    r   closezWintabTabletCanvas.close   s}    DM"""K'8H(HIK'8K(KL 	Q+DMF<O,OPPP	Q 	Qr   c                     | j         r|                     d| j                    | j        j                            |d           | _         | j         r|                     d| j                    d S d S )Non_leaveon_enter)ry   dispatch_eventrZ   rA   get)rF   cursor_types     r   _set_current_cursorz&WintabTabletCanvas._set_current_cursor   s{     	B
D,@AAA#{6::;MM 	B
D,@AAAAA	B 	Br   r   c           
      (   || j         k    rd S t          j                    }t                              | j         |t          j        |                    dk    rd S |j        sd S | j        	                                \  }}| j        j
        j        |z
  | j        j        z
  }|j        |z
  }|j        |z
  }|j        | j        z   | j        z  }	| j        |                     |j                   |                     d| j        |||	dd|j                   d S )Nr   	on_motiong        )rq   r   PACKETr   WTPacketr   r   	pkChangedrO   get_locationscreenheightpkXpkYpkNormalPressurer}   r{   ry   r   pkCursorr   	pkButtons)
rF   msgwParamlParampacketwindow_xwindow_yxypressures
             r   rr   z#WintabTabletCanvas._event_wt_packet   s   T]""F<<vv|F/C/CDDIIF 	F![5577(;%,x7$+:LLJ!J!+d.AATEYY'$$V_555K)=q!XrSUW]Wghhhhhr   c                 *   t          j                    }t                              ||t	          j        |                    dk    rd S |j        j        | j        k    r|j	        j
        | j        k     r| j        |j	        j
                 |j	        j                 }t          |j	        j                  }||k    r[|rdnd}|| j        |j	        j
                 |j	        j        <   |                     ||j	        j
        |j	        j                   d S d S d S d S )Nr   on_express_key_presson_express_key_release)r   	PACKETEXTr   r   r   r   pkBasenContextrq   	pkExpKeysnControlr   r~   	nLocationr.   nStater   )rF   r   r   r   r   current_state	new_state
event_types           r   rw   z&WintabTabletCanvas._event_wt_packetext   s   !##<<V(<(<==BBF =!T]22(4+>>> $ 1&2B2K LVM]Mg h !1!899	 I--;D!b!7!7JbJ_hD%f&6&?@AQA[\''
F4D4MvO_Oijjjjj 32>> .-r   c                 |    || j         k    rd S |dz  sd S |dz  s|                     d| j                   d | _        d S )Nl      i  r   )rq   r   ry   )rF   r   r   r   s       r   ru   z&WintabTabletCanvas._event_wt_proximity   s\    T]""F
" 	F 	B
D,@AAA  $r   r   location_idc                     dS )aD  An event called when an ExpressKey is pressed down.

        Args:
            control_id:
                Zero-based index number given to the assigned key by the driver.
                The same control_id may exist in multiple locations, which the location_id is used to differentiate.
            location_id:
                Zero-based index indicating side of tablet where control id was found.
                Some tablets may have clusters of ExpressKey's on various areas of the tablet.
                (0 = left, 1 = right, 2 = top, 3 = bottom, 4 = transducer).
        NrT   rF   r   r   s      r   r   z'WintabTabletCanvas.on_express_key_press        r   c                     dS )a@  An event called when an ExpressKey is released.

        Args:
            control_id:
                Zero-based index number given to the assigned key by the driver.
                The same control_id may exist in multiple locations, which the location_id is used to differentiate.
            location_id:
                Zero-based index indicating side of tablet where control id was found.
                Some tablets may have clusters of ExpressKey's on various areas of the tablet.
                (0 = left, 1 = right, 2 = top, 3 = bottom, 4 = transducer).
        NrT   r   s      r   r   z)WintabTabletCanvas.on_express_key_release  r   r   )rQ   rR   rS   r   r   
WT_DEFBASErL   r   r   r   r   r   pygletrO   win32Win32EventHandlerrr   rw   ru   intr   r   __classcell__)r   s   @r   rN   rN   U   sw       M060A :_ :_ :_ :_ :_ :_x djcn    "  "Q Q QB B B ]**1--i i .-i, ]**1--k k .-k" ]**1--$ $ .-$$s      3        r   rN   r   r   c                       e Zd Zd Zd ZdS )rC   c                    || _         t          j        |z   | _        t	          | j        t          j                                                  | _        t          | j        t          j	                  | _
        t          | j        t          j                  }|t          j        z  o|t          j        z   | _        | j        rd S t!          | j        t          j                  dz  t!          | j        t          j                  z  | _        d S )N    )rZ   r   WTI_CURSORS_cursorr   CSR_NAMEr6   r7   r/   
CSR_ACTIVEactiver+   CSR_PKTDATArg   rh   rD   r'   CSR_TYPE
CSR_PHYSIDr9   )rF   rZ   r   pktdatas       r   rL   zWintabTabletCursor.__init__%  s    )E1!$,@@FFHH	!$,0ABBt|V-?@@
 "FK/IGfk4IJ
: 	Ffo>>"Dt|V->??@r   c                     d| j         z  S )NzWintabCursor(%r))r7   r   s    r   __repr__zWintabTabletCursor.__repr__7  s    !DI--r   N)rQ   rR   rS   rL   r   rT   r   r   rC   rC   $  s5        @ @ @$. . . . .r   rC   c                  N    t          t          j        t          j                  } | S r   )r$   r   WTI_INTERFACEIFC_SPECVERSION)spec_versions    r   get_spec_versionr   ;      v3V5KLLLr   c                  N    t          t          j        t          j                  } | S r   )r   r   r   IFC_WINTABID)interface_names    r   get_interface_namer   @  s    "6#79LMMNr   c                  N    t          t          j        t          j                  } | S r   )r$   r   r   IFC_IMPLVERSION)impl_versions    r   get_implementation_versionr   E  r   r   c                     d}d}d}|rmt          j                    }t                              t           j        |z   t           j        t          j        |                    }|j        | k    r|}n|dz  }|m|dk    r|S dS )z9Check if a particular extension exists within the driver.Tr   l       N)	r   r   r   r   WTI_EXTENSIONSEXT_TAGr   r   r   )extexistsrJ   r   tags        r   extension_indexr  J  s    F	AE
 kmmV2Q6UXHYHYZZ9E	Q   
4r   c                  z   d} t          t          j                  }|<t          d          sJ | t	          t          j        |z   t          j                  z  } nt          d          sJ t          t          j                  }|<t          d          sJ | t	          t          j        |z   t          j                  z  } nt          d          sJ t          t          j                  }|<t          d          sJ | t	          t          j        |z   t          j                  z  } nt          d          sJ | S )	zDDetermine which extension support is available by getting the masks.r   NzTouchring support foundzTouchring extension not found.zTouchstrip support found.zTouchstrip extension not found.zExpressKey support found.zExpressKey extension not found.)	r  r   WTX_TOUCHRINGr   r    r   EXT_MASKWTX_TOUCHSTRIPr   )maskstr_idxts_idxexpkeys_idxs       r   r]   r]   _  s,   EV122F/00000V2V;V_MMM677777V233F122222V2V;V_MMM788888!&"566K122222V2[@&/RRR788888Lr   c                      t                      } t          d|            sJ | dk     rdS t          t          j        t          j                  }|S )z*Return just the number of current devices.zWintab Version: i  r   )r   r   r    r   r   IFC_NDEVICES)r   	n_devicess     r   r   r   z  sU    #%%L3\3344444eqF0&2EFFIr   c                 \    t                      }|sg S d t          |          D             }|S )Nc                 ,    g | ]}t          |          S rT   )r1   ).0rJ   s     r   
<listcomp>zget_tablets.<locals>.<listcomp>  s    9991|A999r   )r   rB   )displayr  devicess      r   get_tabletsr    s:     ""I 	99i(8(8999GNr   r   )"r   collectionsr   r   pyglet.input.baser   r   r   pyglet.libs.win32r   r   pyglet.utilr   r   r   r   r   r    r$   r'   r+   r/   r1   rN   register_event_typerC   r   r   r   r  r]   r   r\   r  rT   r   r   <module>r     s'    # # # # # #  1 1 1 1 1 1 2 2 2 2 2 2 2 2 1 1 1 1 1 1 # # # # # #	]	#	#j              0 0 0 0 06 0 0 06H H H H H H H HV  & &'= > > >  & &'? @ @ @. . . . . . . ..  
  
  
  *  6         r   