Ë
    `Qbjg
  ã                   ó’   — d dl Z d dlZd dlmZmZ d dlmZ d dlmZ  e j                  e
«      Z G d„ de«      Zd„ Z G d„ d	e«      Zy)
é    N)ÚImageÚ
ImageChops)Úgrab)ÚDisplayc                   ó   — e Zd Zy)ÚDisplayTimeoutErrorN)Ú__name__Ú
__module__Ú__qualname__© ó    úP/var/www/html/venv/lib/python3.12/site-packages/pyvirtualdisplay/smartdisplay.pyr   r      s   „ Ør   r   c                 óø   — | j                   dk7  r| j                  d«      } t        j                  d| j                  |«      }t        j                  | |«      }|j                  «       }|r| j                  |«      S y)zÙCrop borders off an image.

    :param im: Source image.
    :param bgcolor: Background color, using either a color tuple.
    :return: An image without borders, or None if there's no actual content in the image.
    ÚRGBN)	ÚmodeÚconvertr   ÚnewÚsizer   Ú
differenceÚgetbboxÚcrop)ÚimÚbgcolorÚbgÚdiffÚbboxs        r   Úautocropr      se   € ð 
‡w�w�%ÒØ�Z‰Z˜ÓˆÜ	�‰�5˜"Ÿ'™' 7Ó	+€BÜ× Ñ   RÓ(€DØ�<‰<‹>€DÙØ�w‰w�t‹}ÐØr   c                   ó"   — e Zd Zd„ Zdd„Zdd„Zy)ÚSmartDisplayc                 ó.   — t        || j                  «      S )z£Crop borders off an image.

        :param im: Source image.
        :return: An image without borders, or None if there's no actual content in the image.
        )r   Ú_bgcolor)Úselfr   s     r   r   zSmartDisplay.autocrop"   s   € ô ˜˜DŸM™MÓ*Ð*r   c                 óX   — t        | j                  ¬«      }|r| j                  |«      }|S )N)Úxdisplay)r   Únew_display_varr   )r"   r   Úimgs      r   r   zSmartDisplay.grab*   s(   € ä˜D×0Ñ0Ô1ˆáØ—-‘- Ó$ˆCØˆ
r   Nc                 óh  — d}d}d}	 t         j                  dt        |«      z  «       t        j                  |«       ||z  }| j                  d¬«      }| j                  |«      }|r|}|r|sn? ||«      rn6|}|dz  }||kD  rd|›d|›d	�}	t        |	«      ‚t         j                  d
«       Œ¦|sJ ‚|S )až  start process and create screenshot.
        Repeat screenshot until it is not empty and
        cb_imgcheck callback function returns True
        for current screenshot.

        :param autocrop: True -> crop screenshot
        :param timeout: int
        :param cb_imgcheck: None or callback for testing img,
                            True = accept img,
                            False = reject img
        r   g333333Ó?g      à?zsleeping %s secsF)r   zTimeout! elapsed time:z	 timeout:ú zscreenshot is empty, next try..)ÚlogÚdebugÚstrÚtimeÚsleepr   r   r   )
r"   Útimeoutr   Úcb_imgcheckÚtÚ
sleep_timeÚrepeat_timer&   Úimg_cropÚmsgs
             r   ÚwaitgrabzSmartDisplay.waitgrab2   sÊ   € ð ˆØˆ
ØˆØÜ�I‰IÐ(¬3¨z«?Ñ:Ô;Ü�J‰J�zÔ"Ø�‰OˆAØ—)‘) U�)Ó+ˆCØ—}‘} SÓ)ˆHÙØ�ÙÙ"ØÙ˜sÔ#ØØ$ˆJØ˜3ÑˆKØ�7‹{Ú@AÂ7ÐK�Ü)¨#Ó.Ð.ô �I‰IÐ7Ô8ð) ñ* ˆ
ˆsð ˆ
r   )T)é<   TN)r	   r
   r   r   r   r5   r   r   r   r   r   !   s   „ ò+óô'r   r   )Úloggingr,   ÚPILr   r   ÚPIL.ImageGrabr   Úpyvirtualdisplayr   Ú	getLoggerr	   r)   Ú	Exceptionr   r   r   r   r   r   ú<module>r=      sC   ðÛ Û ç !Ý å $à€g×Ñ˜Ó!€ô	˜)ô 	òô"8�7õ 8r   