o
    “j.  ã                   @  sŒ   d Z ddlmZ ddlmZmZmZ ddlmZm	Z	m
Z
mZmZ ddlmZ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)ÚAnyÚAnyStrÚBinaryIOé   )ÚImageÚ
ImageColorÚ	ImageDrawÚ	ImageFontÚ	ImagePath)ÚCoordsÚ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   úXC:\Users\psant\Downloads\Anu Raj Backend\school\venv\Lib\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   4   s   zFont.__init__N)r%   )r   r   r&   r'   r(   r)   r   r   r   r   r   r   r   r$   1   s    ÿr$   c                   @  s¦   e Zd ZdZ		d=d>dd„Zd?dd„Z	d@dAdd„ZdBdd„ZdCd$d%„ZdCd&d'„Z	dDd(d)„Z
dDd*d+„ZdCd,d-„ZdDd.d/„ZdDd0d1„ZdEd6d7„ZdFd9d:„ZdGd;d<„ZdS )HÚ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   A   s   

zDraw.__init__úImage.Imagec                 C  s   | j S r   )r,   )r   r   r   r   ÚflushP   s   z
Draw.flushÚopr   Úxyr   ÚpenúPen | Brush | NoneÚbrushúBrush | Pen | NoneÚkwargsr   c           
      K  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v rI| d|¡ n| d|¡ | d|¡ |dkr_| d|¡ t	| j
|ƒ|fi |¤Ž d S )Nr   )ÚarcÚlineÚfillÚoutliner@   r   )r0   r   r   r   r#   r4   r   ÚPathÚ
setdefaultÚgetattrr3   )
r   r8   r9   r:   r<   r>   rB   rA   r   Úpathr   r   r   ÚrenderS   s.   	




zDraw.renderÚoffsetútuple[float, float]c                 C  s   |\}}dd|dd|f| _ dS )zSets a transformation offset.r   r   N)r4   )r   rH   ZxoffsetZyoffsetr   r   r   Úsettransformw   s   zDraw.settransformÚstartr)   ÚendÚoptionsc                 G  ó"   | j d||g|¢R ||dœŽ 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`
        r?   ©rK   rL   N©rG   ©r   r9   r:   rK   rL   rM   r   r   r   r?   |   ó   "zDraw.arcc                 G  rN   )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`
        ÚchordrO   NrP   rQ   r   r   r   rS   Œ   rR   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`
        ÚellipseNrP   ©r   r9   r:   rM   r   r   r   rU   œ   ó   zDraw.ellipsec                 G  rT   )zˆ
        Draws a line between the coordinates in the ``xy`` list.

        .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.line`
        r@   NrP   rV   r   r   r   r@   ¤   rW   z	Draw.linec                 G  rN   )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`
        ÚpieslicerO   NrP   rQ   r   r   r   rX   ¬   rR   zDraw.pieslicec                 G  rT   )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`
        ÚpolygonNrP   rV   r   r   r   rY   ¼   s   zDraw.polygonc                 G  rT   )zg
        Draws a rectangle.

        .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.rectangle`
        Ú	rectangleNrP   rV   r   r   r   rZ   É   rW   zDraw.rectangleÚtextr   r*   r$   c                 C  s<   | 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*   rA   N)r4   r   rC   r3   r[   r*   r   ©r   r9   r[   r*   rF   r   r   r   r[   Ñ   s
   
z	Draw.textú!tuple[float, float, float, float]c                 C  s4   | 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*   N)r4   r   rC   r3   Útextbboxr*   r\   r   r   r   r_   Ý   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`
        r^   N)r3   Ú
textlengthr*   )r   r[   r*   r   r   r   r`   í   s   zDraw.textlength)NN)r,   r-   r(   r.   r   r/   r   r   )r   r6   r   )r8   r   r9   r   r:   r;   r<   r=   r>   r   r   r   )rH   rI   r   r   )r9   r   r:   r;   rK   r)   rL   r)   rM   r   r   r   )r9   r   r:   r;   rM   r   r   r   )r9   rI   r[   r   r*   r$   r   r   )r9   rI   r[   r   r*   r$   r   r]   )r[   r   r*   r$   r   r)   )r   r   r    r!   r   r7   rG   rJ   r?   rS   rU   r@   rX   rY   rZ   r[   r_   r`   r   r   r   r   r+   <   s&    ü
û
$








r+   N)r!   Ú
__future__r   Útypingr   r   r   Ú r   r   r	   r
   r   Z_typingr   r   r   r#   r$   r+   r   r   r   r   Ú<module>   s   