U
    Pe                     @   s  d Z dZddlZddlZddlZddlZddlmZ ddlm	Z	 ddl
mZ ddlmZ dejkrVejZejZejZd	ZeeZejZege_ee_ejZeege_eje_ejZg e_ee_G d
d dejZG dd dejZG dd dejZe eZ!e"ej#ej#e!ej#ej$ej#Z%ejZ&ej'Z'e&e%ge'_de'_ej(Z(e&ej#ge(_de(_ndd Z%G dd deZ)da*G dd deZ+e	,de+ dS )z
Native support of MultitouchSupport framework for MacBook (MaxOSX platform)
===========================================================================
)MacMotionEventProvider    N)MotionEventProvider)MotionEventFactory)MotionEvent)	ShapeRectZKIVY_DOCzO/System/Library/PrivateFrameworks/MultitouchSupport.framework/MultitouchSupportc                   @   s    e Zd ZdejfdejfgZdS )MTPointxyN)__name__
__module____qualname__ctypesc_float_fields_ r   r   A/tmp/pip-unpacked-wheel-xzebddm3/kivy/input/providers/mactouch.pyr   &   s   r   c                   @   s   e Zd ZdefdefgZdS )MTVectorpositionZvelocityN)r
   r   r   r   r   r   r   r   r   r   *   s   r   c                   @   s   e Zd Zdejfdejfdejfdejfdejfdejfdefdejfd	ejfd
ejfdejfdejfdefdejfdejfdejfgZdS )MTDataframe	timestamp
identifierstateZunknown1Zunknown2
normalizedsizeZunknown3ZangleZ
major_axisZ
minor_axisZunknown4Z
unknown5_1Z
unknown5_2Zunknown6N)	r
   r   r   r   c_intc_doubler   r   r   r   r   r   r   r   .   s"   r   c                 C   s   d S Nr   )r   r   r   r   <lambda>X       r   c                       s4   e Zd ZdZ fddZ fddZdd Z  ZS )MacMotionEventzcMotionEvent representing a contact point on the touchpad. Supports pos
    and shape profiles.
    c                    s0   | dd | dd t j|| d| _d S )NZis_touchTZtype_idtouch)posshape)
setdefaultsuper__init__Zprofile)selfargskwargs	__class__r   r   r&   `   s    zMacMotionEvent.__init__c                    sF   t  | _|d |d  | _| _|d | j_|d | j_t | d S )Nr         )r   r#   sxsywidthheightr%   depack)r'   r(   r*   r   r   r2   f   s
    zMacMotionEvent.depackc                 C   s   d| j | j| j| jf S )Nz-<MacMotionEvent id=%d pos=(%f, %f) device=%s>)idr.   r/   devicer'   r   r   r   __str__m   s    zMacMotionEvent.__str__)r
   r   r   __doc__r&   r2   r6   __classcell__r   r   r*   r   r    [   s   r    c                       s@   e Zd Z fddZdd Zdd Zdd Zed	d
 Z  Z	S )r   c                    s*   t d k	rtd| a tt| j|| d S )Nz,Only one MacMotionEvent provider is allowed.)	_instance	Exceptionr%   r   r&   )r'   largsr)   r*   r   r   r&   w   s    zMacMotionEventProvider.__init__c                 C   st   d| _ i | _t | _t | _t	 }t
|}t|D ]6}t||}t|}i | j|< t|| j t|d q8d S )Nr   )uidtouches	threadingLocklockcollectionsdequequeueMultitouchSupportMTDeviceCreateListCFArrayGetCountrangeCFArrayGetValueAtIndexstrMTRegisterContactFrameCallback_mts_callbackMTDeviceStart)r'   ZdevicesZnum_devicesir4   data_idr   r   r   start~   s    



zMacMotionEventProvider.startc                 C   s0   z| j  \}}||| qW n   Y nX d S r   )rC   popleft)r'   Zdispatch_fnZ
event_typer!   r   r   r   update   s
    zMacMotionEventProvider.updatec                 C   s   d S r   r   r5   r   r   r   stop   s    zMacMotionEventProvider.stopc                 C   sR  t | }|tjkri tj|< tj| }g }t|D ]}|| }	||	j |	j}
|	jj}|j|j	|	j
f}|
|krtj  t jd7  _ttjtj|}tj  tjd|f |||
< q2||
 }|	jjj|jkr|	jjj	|jkrq2|| tjd|f q2t| d d  D ]6}||kr|| }|  tjd|f ||= qdS )Nr,   beginrQ   endr   )rI   r9   r=   rG   appendr   r   r   r   r	   r   r@   acquirer<   r    r4   releaserC   r.   r/   movelistkeysZupdate_time_end)r4   Zdata_ptrZ	n_fingersr   r   Zdevidr=   ZactivesrM   datarN   Znorm_posr(   r!   tidr   r   r   rK      s@    








z$MacMotionEventProvider._mts_callback)
r
   r   r   r&   rO   rQ   rR   MTContactCallbackFunctionrK   r8   r   r   r*   r   r   u   s   	r   Zmactouch)-r7   __all__r   r>   rA   osZkivy.input.providerr   Zkivy.input.factoryr   Zkivy.input.motioneventr   Zkivy.input.shaper   environc_void_pZ
CFArrayRefZCFMutableArrayRefc_longZCFIndexdllCDLLrD   rF   argtypesrestyperH   rE   	Structurer   r   r   POINTERZ	MTDataRef	CFUNCTYPEr   r   r]   ZMTDeviceRefrJ   rL   r    r9   r   registerr   r   r   r   <module>   s`   


  g