a
    i=ic  ã                   @   sX   d dl mZ G dd„ dƒZG dd„ dƒZG dd„ dƒZG dd	„ d	ƒZG d
d„ deƒZdS )é   )ÚImagec                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚHDCz¤
    Wraps an HDC integer. The resulting object can be passed to the
    :py:meth:`~PIL.ImageWin.Dib.draw` and :py:meth:`~PIL.ImageWin.Dib.expose`
    methods.
    c                 C   s
   || _ d S ©N©Údc)Úselfr   © r   ú]/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/PIL/ImageWin.pyÚ__init__   s    zHDC.__init__c                 C   s   | j S r   r   ©r   r   r   r	   Ú__int__!   s    zHDC.__int__N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   r   r   r   r   r	   r      s   r   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚHWNDz¶
    Wraps an HWND integer. The resulting object can be passed to the
    :py:meth:`~PIL.ImageWin.Dib.draw` and :py:meth:`~PIL.ImageWin.Dib.expose`
    methods, instead of a DC.
    c                 C   s
   || _ d S r   ©Úwnd)r   r   r   r   r	   r
   ,   s    zHWND.__init__c                 C   s   | j S r   r   r   r   r   r	   r   /   s    zHWND.__int__Nr   r   r   r   r	   r   %   s   r   c                   @   sN   e Zd ZdZddd„Zdd„ Zddd„Zd	d
„ Zddd„Zdd„ Z	dd„ Z
dS )ÚDiba&  
    A Windows bitmap with the given mode and size.  The mode can be one of "1",
    "L", "P", or "RGB".

    If the display requires a palette, this constructor creates a suitable
    palette and associates it with the image. For an "L" image, 128 greylevels
    are allocated. For an "RGB" image, a 6x6x6 colour cube is used, together
    with 20 greylevels.

    To make sure that palettes work properly under Windows, you must call the
    ``palette`` method upon certain events from Windows.

    :param image: Either a PIL image, or a mode string. If a mode string is
                  used, a size must also be given.  The mode can be one of "1",
                  "L", "P", or "RGB".
    :param size: If the first argument is a mode string, this
                 defines the size of the image.
    Nc                 C   sj   t |dƒr"t |dƒr"|j}|j}n|}d }|dvr<t |¡}tj ||¡| _|| _|| _|rf|  |¡ d S )NÚmodeÚsize)Ú1ÚLÚPÚRGB)	Úhasattrr   r   r   ZgetmodebaseÚcoreÚdisplayÚimageÚpaste)r   r   r   r   r   r   r	   r
   G   s    
zDib.__init__c              
   C   sX   t |tƒrH| j |¡}z| j |¡}W | j ||¡ qT| j ||¡ 0 n| j |¡}|S )a   
        Copy the bitmap contents to a device context.

        :param handle: Device context (HDC), cast to a Python integer, or an
                       HDC or HWND instance.  In PythonWin, you can use
                       ``CDC.GetHandleAttrib()`` to get a suitable handle.
        )Ú
isinstancer   r   ÚgetdcÚexposeÚ	releasedc)r   Úhandler   Úresultr   r   r	   r#   V   s    
"z
Dib.exposec              
   C   sn   |sd| j  }t|tƒrZ| j |¡}z"| j |||¡}W | j ||¡ qj| j ||¡ 0 n| j |||¡}|S )am  
        Same as expose, but allows you to specify where to draw the image, and
        what part of it to draw.

        The destination and source areas are given as 4-tuple rectangles. If
        the source is omitted, the entire image is copied. If the source and
        the destination have different sizes, the image is resized as
        necessary.
        )é    r'   )r   r!   r   r   r"   Údrawr$   )r   r%   ÚdstÚsrcr   r&   r   r   r	   r(   h   s    


"zDib.drawc              
   C   sX   t |tƒrH| j |¡}z| j |¡}W | j ||¡ qT| j ||¡ 0 n| j |¡}|S )ae  
        Installs the palette associated with the image in the given device
        context.

        This method should be called upon **QUERYNEWPALETTE** and
        **PALETTECHANGED** events from Windows. If this method returns a
        non-zero value, one or more display palette entries were changed, and
        the image should be redrawn.

        :param handle: Device context (HDC), cast to a Python integer, or an
                       HDC or HWND instance.
        :return: A true value if one or more entries were changed (this
                 indicates that the image should be redrawn).
        )r!   r   r   r"   Úquery_paletter$   )r   r%   r&   r   r   r	   r+   ~   s    
"zDib.query_palettec                 C   sH   |  ¡  | j|jkr | | j¡}|r6| j |j|¡ n| j |j¡ dS )aõ  
        Paste a PIL image into the bitmap image.

        :param im: A PIL image.  The size must match the target region.
                   If the mode does not match, the image is converted to the
                   mode of the bitmap image.
        :param box: A 4-tuple defining the left, upper, right, and
                    lower pixel coordinate.  See :ref:`coordinate-system`. If
                    None is given instead of a tuple, all of the image is
                    assumed.
        N)Úloadr   Úconvertr   r    Úim)r   r.   Úboxr   r   r	   r    —   s    z	Dib.pastec                 C   s   | j  |¡S )zÐ
        Load display memory contents from byte data.

        :param buffer: A buffer containing display data (usually
                       data returned from :py:func:`~PIL.ImageWin.Dib.tobytes`)
        )r   Ú	frombytes)r   Úbufferr   r   r	   r0   «   s    zDib.frombytesc                 C   s
   | j  ¡ S )zy
        Copy display memory contents to bytes object.

        :return: A bytes object containing display data.
        )r   Útobytesr   r   r   r	   r2   ´   s    zDib.tobytes)N)N)N)r   r   r   r   r
   r#   r(   r+   r    r0   r2   r   r   r   r	   r   3   s   


	r   c                   @   sR   e Zd ZdZddd„Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚWindowz*Create a Window with the given title size.ÚPILNc                 C   s"   t j || j|pd|pd¡| _d S )Nr'   )r   r   ZcreatewindowÚ_Window__dispatcherZhwnd)r   ÚtitleÚwidthÚheightr   r   r	   r
   À   s    ÿzWindow.__init__c                 G   s   t | d| ƒ|Ž S )NZ
ui_handle_)Úgetattr)r   ÚactionÚargsr   r   r	   Z__dispatcherÅ   s    zWindow.__dispatcherc                 C   s   d S r   r   ©r   r   Úx0Úy0Úx1Úy1r   r   r	   Úui_handle_clearÈ   s    zWindow.ui_handle_clearc                 C   s   d S r   r   )r   r=   r>   r?   r@   r   r   r	   Úui_handle_damageË   s    zWindow.ui_handle_damagec                 C   s   d S r   r   r   r   r   r	   Úui_handle_destroyÎ   s    zWindow.ui_handle_destroyc                 C   s   d S r   r   r<   r   r   r	   Úui_handle_repairÑ   s    zWindow.ui_handle_repairc                 C   s   d S r   r   )r   r7   r8   r   r   r	   Úui_handle_resizeÔ   s    zWindow.ui_handle_resizec                 C   s   t j ¡  d S r   )r   r   Z	eventloopr   r   r   r	   Úmainloop×   s    zWindow.mainloop)r4   NN)r   r   r   r   r
   r5   rA   rB   rC   rD   rE   rF   r   r   r   r	   r3   ½   s   
r3   c                       s*   e Zd ZdZd‡ fdd„	Zdd„ Z‡  ZS )ÚImageWindowz6Create an image window which displays the given image.r4   c                    s8   t |tƒst|ƒ}|| _|j\}}tƒ j|||d d S )N)r7   r8   )r!   r   r   r   Úsuperr
   )r   r   r6   r7   r8   ©Ú	__class__r   r	   r
   Þ   s
    

zImageWindow.__init__c                 C   s   | j  |||||f¡ d S r   )r   r(   r<   r   r   r	   rD   å   s    zImageWindow.ui_handle_repair)r4   )r   r   r   r   r
   rD   Ú__classcell__r   r   rI   r	   rG   Û   s   rG   N)Ú r   r   r   r   r3   rG   r   r   r   r	   Ú<module>   s    