
    *fg
                         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__     Z/var/www/html/flask-app/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)zCrop 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     
ww%ZZ	5"''7	+B  R(D<<>Dwwt}r   c                   "    e Zd Zd ZddZddZy)SmartDisplayc                 .    t        || j                        S )zCrop 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     DMM**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     
II(3z?:;JJz"OA))U)+C}}S)H"s#$J3K7{@A7K)#.. II78) * 
 
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   