
    ZhM                         d Z ddlmZ ddlmZmZmZ ddlmZm	Z	  G d dej                        Z G d dej                        Z G d	 d
e      Z G d de      Z G d dee      Z G d de      Z G d de      Zy)z#
The animation objects for iconify
    )Enum)OptionalSequenceTuple)QtCoreQtGuic                   X     e Zd ZdZ ej
                         ZdZ fdZe	d        Z
 xZS )
GlobalTickzT
    A singleton timer used to trigger all animation objects created by iconify
    Nc                 8   t         t        |           t        j                         | _        | j
                  j                  j                  | j                  j                         | j
                  j                  d       | j
                  j                          y )N   )superr
   __init__r   QTimer_ticktimeoutconnectemitsetIntervalstart)self	__class__s    [/mounts/lovelace/software/anaconda3/envs/py312/lib/python3.12/site-packages/iconify/anim.pyr   zGlobalTick.__init__   sc     	j$(*]]_


""4<<#4#45

r"

    c                 J    | j                    |        | _         | j                   S )zo
        Return the global instance of the ticker.

        Returns
        -------
        GlobalTick
        )	_instance)clss    r   instancezGlobalTick.instance   s!     == ECM}}r   )__name__
__module____qualname____doc__r   Signalr   r   r   classmethodr   __classcell__r   s   @r   r
   r
      s5     fmmoGI  r   r
   c                        e Zd ZdZ ej
                         ZdZdZd fd	Z	d Z
d Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Z xZS )BaseAnimationz@
    The base class that should be used for all animations.
    r   d   c                 ^    t         t        |   |       | j                  | _        d| _        y )NparentF)r   r'   r   	_minFrame_frame_activer   r+   r   s     r   r   zBaseAnimation.__init__7   s'    mT+6+:nnr   c                 v    t        |t              rt               }|j                  | |f       |S t	        d      )NzUnsupported operation!)
isinstancer'   _ConcatAnimsetAnimations
ValueError)r   other
concatAnims      r   __add__zBaseAnimation.__add__=   s7    e]+$J$$dE]3122r   c                 *    t        j                         S )a  
        Return a QtGui.QTransform for the current frame that will be used
        when drawing an image in the provided QRect.

        Parameters
        ----------
        rect : QtCore.QRect

        Returns
        -------
        QtGui.QTransform
        )r   
QTransform)r   rects     r   	transformzBaseAnimation.transformE   s     !!r   c                     t         j                         j                  j                  | j                         d| _        y)z&
        Start the animation.
        TN)r
   r   r   r   r   r.   r   s    r   r   zBaseAnimation.startU   s,    
 	%%--djj9r   c                 F    | j                          | j                  | _        y)zS
        Stop the animation and reset the current frame back to the start.
        N)pauser,   r-   r=   s    r   stopzBaseAnimation.stop]   s    
 	

nnr   c                     	 t         j                         j                  j                  | j                         d| _        y# t
        $ r
 Y d| _        yw xY w)zC
        Stop the animation and maintain the current frame
        FN)r
   r   r   
disconnectr   RuntimeErrorr.   r=   s    r   r?   zBaseAnimation.pausee   sL    
	!))44TZZ@   		s   7A 	AAc                 f    | j                         r| j                          y| j                          y)zJ
        Start or stop the animation based on it's current state.
        Nactiver?   r   r=   s    r   togglezBaseAnimation.togglep   s    
 ;;=JJLJJLr   c                     | j                   S )zo
        Indicate if the animation is currently playing.

        Returns
        -------
        bool
        )r.   r=   s    r   rF   zBaseAnimation.activez   s     ||r   c                     | j                   S )zi
        Return the current frame of the animation.

        Returns
        -------
        int
        )r-   r=   s    r   framezBaseAnimation.frame   s     {{r   c                 $    | j                          y)z7
        Manually increment the current frame.
        N)r   r=   s    r   	forceTickzBaseAnimation.forceTick   s    
 	

r   c                     | j                   | j                  k(  r| j                  | _         y| xj                   dz  c_         y)z
        Called when the animation is ticked allowing subclasses to provide
        custom frame step logic e.g. single shot animations.
           N)r-   	_maxFramer,   r=   s    r   incrementFramezBaseAnimation.incrementFrame   s-     ;;$..(..DKKK1Kr   c                 X    | j                          | j                  j                          y N)rP   tickr   r=   s    r   r   zBaseAnimation._tick   s    		r   rR   )r   r   r    r!   r   r"   rS   r,   rO   r   r7   r;   r   r@   r?   rG   rF   rJ   rL   rP   r   r$   r%   s   @r   r'   r'   ,   s]    
 6==?DII3" %				r   r'   c                       e Zd ZdZd Zy)SingleShotMixinzp
    A mixin that overrides the incrementFrame logic so the
    animation loops once and then stops itself.
    c                     | j                   | j                  k(  r"| j                  | _         | j                          y | xj                   dz  c_         y )NrN   )r-   rO   r,   r@   r=   s    r   rP   zSingleShotMixin.incrementFrame   s4    ;;$..(..DKIIKKK1Kr   N)r   r   r    r!   rP    r   r   rU   rU      s    
r   rU   c                   Z     e Zd ZdZdZ G d de      Zej                  f fd	Zd Z	 xZ
S )Spinz%
    A simple spinning animation
    ;   c                       e Zd ZdZdZy)Spin.Directionsr   rN   N)r   r   r    	CLOCKWISEANTI_CLOCKWISErW   r   r   
Directionsr\      s    	r   r_   c                 8    t         t        |           || _        y rR   )r   rY   r   
_direction)r   	directionr   s     r   r   zSpin.__init__   s    dD"$#r   c                    |dz  }| j                   t        j                  j                  k(  rdnd}t	        j
                         }|j                  |j                         |j                               }|j                  dd      }|j                  || j                  z        }|j                  |j                          |j                                }|S )N      ig?)ra   rY   r_   r]   r   r9   	translatewidthheightscalerotater-   )r   sizehalfSizerotationxfms        r   r;   zSpin.transform   s    !84??+D+DD1" mmHNN,hoo.?@iiS!jjDKK/0mmX^^--0A/AB
r   )r   r   r    r!   rO   r   r_   r]   r   r;   r$   r%   s   @r   rY   rY      s0     IT 
 ",!5!5 $
r   rY   c                       e Zd ZdZy)SingleShotSpinz*
    A single shot spinning animation
    N)r   r   r    r!   rW   r   r   rp   rp      s    r   rp   c                   &    e Zd ZdZed        Zd Zy)Breather(   c                 (    | | z  }|d|| z
  z  dz   z  S )Ng       @g      ?rW   )tsqts     r   _parametricEasezBreathe._parametricEase   s%     !ecS1Wo+,,r   c                     | j                   dz  }| j                  |kD  r5t        | j                  |z
        |z  }| j                  |      }dd|z  z
  }n1t        | j                        |z  }| j                  |      }dd|z  z   }|dz  }t	        j
                         }|j                  |j                         |j                               }|j                  ||      }|j                  |j                          |j                                }|S )Nrd   g?g?gffffff?)
rO   r-   floatrv   r   r9   rf   rg   rh   ri   )r   rk   halfWayrt   mri   rl   rn   s           r   r;   zBreathe.transform   s    ..1$;; dkkG+,w6A$$Q'A37OE dkk"W,A$$Q'A37OE!8 mmHNN,hoo.?@iiu%mmX__..1A0AB
r   N)r   r   r    rO   staticmethodrv   r;   rW   r   r   rr   rr      s    I- -
r   rr   c                   R     e Zd ZdZd
 fd	Zd Zd Zd Zd Zd Z	d Z
 fd	Z xZS )r2   i c                 <    t         t        |   |       d| _        y )Nr*   rW   )r   r2   r   _animsr/   s     r   r   z_ConcatAnim.__init__  s    k4))8r   c                 ~    t        |      | _        t        |D cg c]  }|j                   c}      | _        y c c}w rR   )tupler~   maxrO   )r   animsas      r   r3   z_ConcatAnim.setAnimations	  s+    El59aakk9:9s   :c                 x    t        j                         }| j                  D ]  }|j                  |      |z  } |S rR   )r   r9   r~   r;   )r   r:   rn   anims       r   r;   z_ConcatAnim.transform  s=     KK 	-D..&,C	- 
r   c                     | j                   D ]  }|j                           t        j                         j                  j                  | j                         d| _        y )NT)r~   r   r
   r   r   r   r   r.   r   r   s     r   r   z_ConcatAnim.start  sF    KK 	DJJL	%%--djj9r   c                     | j                   D ]  }|j                           | j                  | _        t        j                         j                  j                  | j                         d| _	        y NF)
r~   r@   r,   r-   r
   r   r   rB   r   r.   r   s     r   r@   z_ConcatAnim.stop  sQ    KK 	DIIK	nn%%00<r   c                     | j                   D ]  }|j                           t        j                         j                  j                  | j                         d| _        y r   )r~   r?   r
   r   r   rB   r   r.   r   s     r   r?   z_ConcatAnim.pause&  sF    KK 	DJJL	%%00<r   c                 f    | j                         r| j                          y | j                          y rR   rE   r=   s    r   rG   z_ConcatAnim.toggle-  s    ;;=JJLJJLr   c                 l    | j                   D ]  }|j                           t        t        |           y rR   )r~   rL   r   r2   )r   r   r   s     r   rL   z_ConcatAnim.forceTick4  s-    KK 	DNN	k4*,r   rR   )r   r   r    rO   r   r3   r;   r   r@   r?   rG   rL   r$   r%   s   @r   r2   r2      s5    I
;
- -r   r2   N)r!   enumr   typingr   r   r   
iconify.qtr   r   QObjectr
   r'   objectrU   rY   rp   rr   r2   rW   r   r   <module>r      s|     , , $ ByFNN yxf = @_d  m  F8-- 8-r   