o
    ځd                     @   sl   d Z ddlZzddlZW n ey   ddlZY nw ddlmZ ddlmZ ddl	m
Z G dd deZdS ))GState    N)toColor)mmult)Imagec                   @   s  e Zd ZdZdEddZedd Zed	d
 Zedd Z	e	j
dd Z	edd Zej
dd Zedd Zej
dd Zedd Zej
dd Zedd Zej
dd Zedd Zej
dd Zedd Zej
dd Zed d! Zej
d"d! Zd#d$ Zd%d& Zd'd( Zd)d* ZdFd,d-Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= ZedGd@dAZ 	BdHdCdDZ!d+S )Ir   )   r   r   whiteRGB24c                    s  |_ t|||_|_|_tj _ |dkr) fdd_	n|dkr5 fdd_	nt
d|  tj dddd	d|f __d
_|_ dd||     d  __fdd}|_t j j j jd_d_d S )Nr   c                        j |   S N)Zset_source_rgbZrgbcctx 0lib/python3.10/site-packages/rlPyCairo/gstate.py<lambda>       z!GState.__init__.<locals>.<lambda>ZARGB32c                    r	   r
   )Zset_source_rgbaZrgbar   r   r   r   r      r   zBad fmt=%r for rlPyCairo.GStater   r   )r   r   r   r   r   r   c                    s   zddl mm} |  W n@ tyM   zddlm} W n# ty?   zddlm} W n ty< } ztd|d }~ww Y nw ddl m |dd Y nw  fdd}|_|| ||S )	Nr   )text2PathDescription
FTTextPath)gstatezJfreetype-py is not installed and no libart based _renderPM can be imported)r   r   c              	      s   | ||j jd dS )NF)xyfontNamefontSizetruncategsr   r   )textr   r   )r   selfr   r   r   _text2PathDescription3   s
   zMGState.__init__.<locals>._text2PathDescription.<locals>._text2PathDescription)Zreportlab.graphics.utilsr   r   ImportErrorZ_rl_renderPMr   Zreportlab.graphics._renderPMr    )r   r   r   r   r   Z_er    r   )r   r   r   r    %   s*   


z.GState.__init__.<locals>._text2PathDescription)moveTolineTocurveToZ	closePath)_fmtcairoImageSurface_GState__str2formatsurfacewidthheightZContextr   __set_source_color__
ValueErrorset_antialiasZANTIALIAS_BEST_in_transform_out_transformctm	fillColorZ	rectanglepathFill	pathBegin_GState__fillColor_GState__strokeColorr    dictmove_toline_tocurve_to
close_path__pathOpMap__textRenderMode)r   r+   r,   bgfmtr    r   )r   r   r   __init__   s6   
zGState.__init__c                 C   s   t td|  S )NZFORMAT_)getattrr'   )r@   r   r   r   Z__str2formatD      zGState.__str2formatc                 C   st   | j  }| jdkr6t|}tjdkr0tdt|dD ]}tt|||d  |||d < q|dd d= t	|S )Nr   littler      )
r*   get_datar&   	bytearraysys	byteorderrangelenreversedbytes)r   Zbair   r   r   pixBufH   s   


&zGState.pixBufc                 C   s   t | jt| j S r
   )r   r1   tupler   Z
get_matrixr"   r   r   r   r2   U      z
GState.ctmc                 C   s"   t | j|}| jtj|  d S r
   )r   r0   r   Z
set_matrixr'   ZMatrix)r   ZmxZnctmr   r   r   r2   Y   s   c                 C      | j S r
   )r6   r"   r   r   r   r3   ^      zGState.fillColorc                 C       |d urt || _d S || _d S r
   )r   r6   r   r   r   r   r   r3   b       c                 C   rR   r
   )r7   r"   r   r   r   strokeColorf   rS   zGState.strokeColorc                 C   rT   r
   )r   r7   rU   r   r   r   rW   j   rV   c                 C   
   | j  S r
   )r   Zget_line_widthr"   r   r   r   strokeWidthn      
zGState.strokeWidthc                 C   s   | j |S r
   )r   Zset_line_width)r   wr   r   r   rY   r   s   c                 C   rX   r
   )r   Zget_dashr"   r   r   r   	dashArrayv   rZ   zGState.dashArrayc                 C   sP   |r	t |ttfsd}nt |d ttfr|d |d f}| j|d |d S )N)r   r   r   r   )
isinstancelistrP   r   Zset_dash)r   dar   r   r   r\   z   s
   c                 C      t | j S r
   )intr   Zget_line_capr"   r   r   r   lineCap   rC   zGState.lineCapc                 C      | j t|S r
   )r   Zset_line_capra   r   vr   r   r   rb         c                 C   r`   r
   )ra   r   Zget_line_joinr"   r   r   r   lineJoin   rC   zGState.lineJoinc                 C   rc   r
   )r   Zset_line_joinra   rd   r   r   r   rg      rf   c                 C   s   | j t| j  S r
   )_GState__fill_rule_valuesra   r   Zget_fill_ruler"   r   r   r   fillMode   s   zGState.fillModec                 C   s   | j | jt| S r
   )r   Zset_fill_rulerh   ra   rd   r   r   r   ri      rQ   c                 C      | j   d S r
   r   new_pathr"   r   r   r   	beginPath      zGState.beginPathc                 C      | j t|t| d S r
   )r   r9   floatr   r   r   r   r   r   r#         zGState.moveToc                 C   ro   r
   )r   r:   rp   rq   r   r   r   r$      rr   zGState.lineToc                 C   rj   r
   )r   r<   r"   r   r   r   	pathClose   rn   zGState.pathCloseNc                 C   s^   | j r)|d ur| j}||kr|| _| | j  | j  |d ur+||kr-|| _d S d S d S d S r
   )r6   ri   r-   r   Zfill_preserve)r   ri   Zofmr   r   r   r4      s   
zGState.pathFillc                 C   s2   | j r| jdkr| | j  | j  d S d S d S )Nr   )r7   rY   r-   r   Zstroke_preserver"   r   r   r   
pathStroke   s   zGState.pathStrokec              	   C   s2   | j t|t|t|t|t|t| d S r
   )r   r;   rp   )r   Zx1Zy1Zx2Zy2Zx3Zy3r   r   r   r%      s   2zGState.curveToc                 C   rj   r
   rk   r"   r   r   r   r5      rn   zGState.pathBeginc                 C   rj   r
   )r   Z	rest_clipr"   r   r   r   clipPathClear   rn   zGState.clipPathClearc                 C   s4   | j }| }|  |  |  || d S r
   )r   	copy_pathrl   Zclipappend_path)r   r   oPathr   r   r   clipPathSet   s   zGState.clipPathSetc                 C   rj   r
   )r   clip_preserver"   r   r   r   clipPathAdd   rn   zGState.clipPathAddc                 C   s   || _ || _d S r
   r   )r   r   r   r   r   r   setFont   s   
zGState.setFontc           	   	   C   s   | j }| j }| j}| j}zW| j  | |||D ]}||d  |dd    q|dv r3| d |dv r;|   |dkrU| j	  W | j  | j
| || _d S W | j  | j
| || _d S | j  | j
| || _w )Nr   r   )r      rE      )r   r}      r~   rE   )r=   r   rv   ri   r>   rl   r    r4   rt   rz   rw   )	r   r   r   r   ZopMaprx   ZoFMZtRMopr   r   r   
drawString   s0   







zGState.drawString      ?Fc              
   C   s\   d|  vs|r|t|d  | |}tjt|dd||j	|j
tj||j	S )NA   rawZBGRa)ZgetbandsZputalphara   r)   r'   r(   Zcreate_for_datarG   tobytesr+   r,   Zformat_stride_for_width)clsZimr@   Zalpha
forceAlphar   r   r   Z	__fromPIL   s   

zGState.__fromPIL   c	           
      C   s   | j }	|	  |	tj |	tj |	|||  |	|t	| | t	|  |	
| j|| jdd |	  |	  d S )NF)r   )r   Zsaver/   r'   ZANTIALIAS_DEFAULTZset_operatorZOPERATOR_OVER	translateZscalerp   Zset_source_surface_GState__fromPILr&   ZpaintZrestore)
r   r   r   ZdstWZdstHdataZsrcWZsrcHZplanesr   r   r   r   	_aapixbuf   s   zGState._aapixbuf)r   r   r   r   r
   )r   r   F)r   )"__name__
__module____qualname__rh   rA   staticmethodr)   propertyrO   r2   setterr3   rW   rY   r\   rb   rg   ri   rm   r#   r$   rs   r4   rt   r%   r5   ru   ry   r{   r|   r   classmethodr   r   r   r   r   r   r      sp    
3



















	
r   )__all__rH   Z	cairocffir'   r!   Zreportlab.lib.colorsr   Zreportlab.graphics.transformr   ZPILr   ZPILImageobjectr   r   r   r   r   <module>   s    