a :jg;@sdZddlmZddlmZmZmZddlmZm Z m Z m Z m Z ddl mZmZGdddZGd d d ZGd d d ZGd ddZdS)z] (Experimental) WCK-style drawing interface operations .. seealso:: :py:mod:`PIL.ImageDraw` ) annotations)AnyAnyStrBinaryIO)Image ImageColor ImageDraw ImageFont ImagePath)CoordsStrOrBytesPathc@s&eZdZdZd ddddddd Zd S) Penz"Stores an outline color and width.rstrintNone)colorwidthopacityreturncCst||_||_dSN)rgetrgbrr)selfrrrr8/usr/local/lib/python3.9/site-packages/PIL/ImageDraw2.py__init__$s z Pen.__init__N)rr__name__ __module__ __qualname____doc__rrrrrr!src@s$eZdZdZd ddddddZd S) BrushzStores a fill colorrrrr)rrrcCst||_dSr)rrr)rrrrrrr,szBrush.__init__N)rrrrrrr")sr"c@s&eZdZdZd ddddddd Zd S) Fontz Stores a TrueType font and color rzStrOrBytesPath | BinaryIOfloatr)rfilesizercCst||_t|||_dSr)rrrr Ztruetypefont)rrr&r'rrrr3s z Font.__init__N)r$rrrrrr#0sr#c@s0eZdZdZd6ddddddd Zd d d d Zd7dddddddddZdddddZdddddddddZdddddddddZ ddddd d!d"Z ddddd d#d$Z dddddddd%d&Z ddddd d'd(Z ddddd d)d*Zdd+d,dd-d.d/Zdd+d,d0d-d1d2Zd+d,dd3d4d5ZdS)8Drawz4 (Experimental) WCK-style drawing interface NzImage.Image | strz"tuple[int, int] | list[int] | Nonez&float | tuple[float, ...] | str | Noner)imager'rrcCsHt|tr,|durd}t|t|||}t||_||_d|_ dS)Nz>If image argument is mode string, size must be a list or tuple) isinstancer ValueErrorrnewr r)drawr* transform)rr*r'rmsgrrrr@s  z Draw.__init__z Image.Image)rcCs|jSr)r*)rrrrflushOsz Draw.flushrr zPen | Brush | NonezBrush | Pen | Noner)opxypenbrushkwargsrc Ksd}}d}t|tr$|j}|j}nt|tr:|j}|j}t|trL|j}nt|tr\|j}|jr|t|} | |j| }|dvr|d|n|d||d||dkr|d|t |j ||fi|dS)Nr)arclinefilloutliner8r) r+rrrr"r/r Path setdefaultgetattrr.) rr2r3r4r5r6r:r9rpathrrrrenderRs.          z Draw.renderztuple[float, float])offsetrcCs|\}}dd|dd|f|_dS)zSets a transformation offset.rrN)r/)rr@ZxoffsetZyoffsetrrr settransformvszDraw.settransformr%)r3r4startendoptionsrcGs"|jd||g|R||ddS)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` r7rBrCNr?rr3r4rBrCrDrrrr7{szDraw.arccGs"|jd||g|R||ddS)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` chordrENrFrGrrrrHsz Draw.chord)r3r4rDrcGs|jd||g|RdS)z Draws an ellipse inside the given bounding box. .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.ellipse` ellipseNrFrr3r4rDrrrrIsz Draw.ellipsecGs|jd||g|RdS)z Draws a line between the coordinates in the ``xy`` list. .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.line` r8NrFrJrrrr8sz Draw.linecGs"|jd||g|R||ddS)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` pieslicerENrFrGrrrrKsz Draw.pieslicecGs|jd||g|RdS)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` polygonNrFrJrrrrLs z Draw.polygoncGs|jd||g|RdS)zg Draws a rectangle. .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.rectangle` rectangleNrFrJrrrrMszDraw.rectanglerr#)r3textr(rcCs<|jr t|}||j|}|jj|||j|jddS)zw Draws the string at the given position. .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.text` )r(r9N)r/r r;r.rNr(rrr3rNr(r>rrrrNs   z Draw.textz!tuple[float, float, float, float]cCs4|jr t|}||j|}|jj|||jdS)z Returns bounding box (in pixels) of given text. :return: ``(left, top, right, bottom)`` bounding box .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.textbbox` r()r/r r;r.textbboxr(rOrrrrQs   z Draw.textbbox)rNr(rcCs|jj||jdS)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` rP)r. textlengthr()rrNr(rrrrRszDraw.textlength)NN)N)rrr r!rr1r?rAr7rHrIr8rKrLrMrNrQrRrrrrr);s$$  r)N)r! __future__rtypingrrrrrr r r Z_typingr r rr"r#r)rrrrs