o
    Zh                     @  s   d Z ddlmZ ddlmZ ddlmZmZmZm	Z	m
Z
 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dS )z]
(Experimental) WCK-style drawing interface operations

.. seealso:: :py:mod:`PIL.ImageDraw`
    )annotations)BinaryIO   )Image
ImageColor	ImageDraw	ImageFont	ImagePath)StrOrBytesPathc                   @  s   e Zd ZdZddddZdS )Penz"Stores an outline color and width.r      colorstrwidthintopacityreturnNonec                 C  s   t || _|| _d S N)r   getrgbr   r   )selfr   r   r    r   E/var/www/html/lang_env/lib/python3.10/site-packages/PIL/ImageDraw2.py__init__$   s   
zPen.__init__N)r   r   )r   r   r   r   r   r   r   r   __name__
__module____qualname____doc__r   r   r   r   r   r   !       r   c                   @  s   e Zd ZdZddd	d
ZdS )BrushzStores a fill colorr   r   r   r   r   r   r   c                 C  s   t || _d S r   )r   r   r   )r   r   r   r   r   r   r   ,   s   zBrush.__init__N)r   )r   r   r   r   r   r   r   r   r   r   r   r    )   r   r    c                   @  s   e Zd ZdZ	ddddZdS )Fontz Stores a TrueType font and color   r   r   fileStrOrBytesPath | BinaryIOsizefloatr   r   c                 C  s   t || _t||| _d S r   )r   r   r   r   Ztruetypefont)r   r   r#   r%   r   r   r   r   3   s   zFont.__init__N)r"   )r   r   r#   r$   r%   r&   r   r   r   r   r   r   r   r!   0   s    r!   c                   @  s   e Zd ZdZ		d(d)ddZd*d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 d! Zd"d# Zd$d% Zd&d' ZdS ),Drawz4
    (Experimental) WCK-style drawing interface
    NimageImage.Image | strr%   "tuple[int, int] | list[int] | Noner   &float | tuple[float, ...] | str | Noner   r   c                 C  sH   t |tr|d u rd}t|t|||}t|| _|| _d | _	d S )Nz>If image argument is mode string, size must be a list or tuple)

isinstancer   
ValueErrorr   newr   r(   drawr)   	transform)r   r)   r%   r   msgr   r   r   r   @   s   

zDraw.__init__Image.Imagec                 C  s   | j S r   )r)   )r   r   r   r   flushO   s   z
Draw.flushc                 C  s   d  }}d}t |tr|j}|j}nt |tr|j}|j}t |tr&|j}nt |tr.|j}| jr<t|}|| j |dkrK| jj	|||d d S t
| j||||d d S )Nr   line)fillr   )r6   outline)r-   r   r   r   r    r1   r	   Pathr0   r5   getattr)r   opxypenZbrushr7   r6   r   r   r   r   renderR   s$   




zDraw.renderc                 C  s   |\}}dd|dd|f| _ dS )zSets a transformation offset.r   r   N)r1   )r   offsetZxoffsetZyoffsetr   r   r   settransformj   s   zDraw.settransformc                 G     | j d|||g|R   dS )z
        Draws an arc (a portion of a circle outline) between the start and end
        angles, inside the given bounding box.

        .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.arc`
        arcNr=   r   r;   startendoptionsr   r   r   rA   o      zDraw.arcc                 G  r@   )z
        Same as :py:meth:`~PIL.ImageDraw2.Draw.arc`, but connects the end points
        with a straight line.

        .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.chord`
        chordNrB   rC   r   r   r   rH   x   rG   z
Draw.chordc                 G     | j d|g|R   dS )z
        Draws an ellipse inside the given bounding box.

        .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.ellipse`
        ellipseNrB   r   r;   rF   r   r   r   rJ         zDraw.ellipsec                 G  rI   )z
        Draws a line between the coordinates in the ``xy`` list.

        .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.line`
        r5   NrB   rK   r   r   r   r5      rL   z	Draw.linec                 G  r@   )z
        Same as arc, but also draws straight lines between the end points and the
        center of the bounding box.

        .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.pieslice`
        piesliceNrB   rC   r   r   r   rM      rG   zDraw.pieslicec                 G  rI   )a  
        Draws a polygon.

        The polygon outline consists of straight lines between the given
        coordinates, plus a straight line between the last and the first
        coordinate.


        .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.polygon`
        polygonNrB   rK   r   r   r   rN      s   zDraw.polygonc                 G  rI   )zg
        Draws a rectangle.

        .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.rectangle`
        	rectangleNrB   rK   r   r   r   rO      rL   zDraw.rectanglec                 C  s8   | j rt|}| | j  | jj|||j|jd dS )zw
        Draws the string at the given position.

        .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.text`
        )r'   r6   N)r1   r	   r8   r0   textr'   r   r   r;   rP   r'   r   r   r   rP      s   
z	Draw.textc                 C  s0   | j rt|}| | j  | jj|||jdS )z
        Returns bounding box (in pixels) of given text.

        :return: ``(left, top, right, bottom)`` bounding box

        .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.textbbox`
        r'   )r1   r	   r8   r0   textbboxr'   rQ   r   r   r   rS      s   
zDraw.textbboxc                 C  s   | j j||jdS )z
        Returns length (in pixels) of given text.
        This is the amount by which following text should be offset.

        .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.textlength`
        rR   )r0   
textlengthr'   )r   rP   r'   r   r   r   rT      s   zDraw.textlength)NN)r)   r*   r%   r+   r   r,   r   r   )r   r3   r   )r   r   r   r   r   r4   r=   r?   rA   rH   rJ   r5   rM   rN   rO   rP   rS   rT   r   r   r   r   r(   ;   s$    

			r(   N)r   
__future__r   typingr    r   r   r   r   r	   Z_typingr
   r   r    r!   r(   r   r   r   r   <module>   s   