U
    
Jf                     @   s   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eeeedddZ	dedddZ
eeedddZdS )    )	ImageFont	ImageDrawc                   @   s   e Zd ZdddZdS )FontCollectionr   c                 C   sZ   t jdd| d| _t jdd| d| _t jdd| d| _t jdd| d| _|| _d S )NzDejaVuSans.ttf	   )sizezDejaVuSans-Bold.ttf      )r   truetypesmall
normalBoldnormal	largeBoldr   )selfr    r   S/srv/www/ofi/ef05a/epaper/epaper-zimmerinfo/basics/server/flaskr/graphics/layout.py__init__   s
    zFontCollection.__init__N)r   )__name__
__module____qualname__r   r   r   r   r   r      s   r   c                   @   s>   e Zd Zdd ZeedddZdeddd	Zdd
dZ	dS )	TextLinesc                 C   s   g | _ g | _d| _d S )Nr   r   )linesboxesboxr   r   r   r   r      s    zTextLines.__init__textfontc                 C   s0   | j ||d | jt|| |   d S )Nr   )r   appendr   get_text_dimensionsgetBox)r   r   r   r   r   r   add   s    zTextLines.add   )returnc                 C   s>   t dd | jD tdd | jD t| j|  f| _| jS )Nc                 S   s   g | ]}|d  qS r   r   .0br   r   r   
<listcomp>   s     z$TextLines.getBox.<locals>.<listcomp>c                 S   s   g | ]}|d  qS    r   r%   r   r   r   r(      s     )maxr   sumlenr   )r   sepr   r   r   r       s    8zTextLines.getBoxc                 C   sV   t |}t| jD ]<\}}|j||f|d |d dd || j| d | 7 }qd S )Nr   r   black)r   fillr*   )r   Draw	enumerater   multiline_textr   )r   xybitmapr.   drawbwiliner   r   r   draw   s    
zTextLines.drawN)r"   )r"   )
r   r   r   r   strr   r!   tupler    r:   r   r   r   r   r      s   r   c                   @   s<   e Zd Zdd ZdedddZdd Zd	d
 Zdd ZdS )Columnc                 C   s   g | _ g | _g | _d S N)rows
separatorsgridYr   r   r   r   r   $   s    zColumn.__init__   )r   c                 C   s   | j | | j| d S r>   )r?   r   r@   )r   r   	separatorr   r   r   r!   )   s    z
Column.addc                 C   sB   t dd | jD }tdd | jD t| jdd  }||fS )Nc                 S   s   g | ]}|j d  qS r$   r   r&   r9   r   r   r   r(   .   s     z!Column.getBox.<locals>.<listcomp>c                 S   s   g | ]}|j d  qS r)   rD   rE   r   r   r   r(   /   s     r   )r+   r?   r,   r@   )r   whr   r   r   r    -   s    &zColumn.getBoxc                 C   s@   |g}t | jD ]*\}}||d |jd  | j|   q|S )NrF   r*   )r2   r?   r   r   r@   )r   r5   ycr8   rowr   r   r   getYCoordinates2   s    $zColumn.getYCoordinatesc                 C   s<   |  |}t| jD ]"\}}|||| || j|  qd S r>   )rK   r2   r?   r:   r@   )r   r4   r5   r6   rI   r8   rJ   r   r   r   r:   8   s    
zColumn.drawN)rB   )	r   r   r   r   r   r!   r    rK   r:   r   r   r   r   r=   #   s
   r=   c                   @   s4   e Zd Zdd ZeedddZdd Zdd	 Zd
S )
GridColumnc                 C   s   g | _ g | _d S r>   )r?   rA   r   r   r   r   r   ?   s    zGridColumn.__init__)r   rA   c                 C   s   | j | | j| d S r>   )r?   r   rA   )r   r   rA   r   r   r   r!   C   s    zGridColumn.addc           	      C   s   t | jD ]\}}t| j| }|t|kr.q
|| }|| j| kr|d t|k r`||d  nd|d  |d  }t||||  | j| |   }|||| q
d S )Nr*      rF   )r2   r?   intrA   r-   r:   )	r   r4   rI   r6   r8   rJ   Zyindexr5   nyr   r   r   r:   G   s    0"zGridColumn.drawc                 C   s   t dd | jD S )Nc                 S   s   g | ]}|j d  qS r$   rD   rE   r   r   r   r(   S   s     z'GridColumn.getWidth.<locals>.<listcomp>)r+   r?   r   r   r   r   getWidthR   s    zGridColumn.getWidthN)	r   r   r   r   r   floatr!   r:   rQ   r   r   r   r   rL   >   s   rL   rB   )columnsr4   r.   r#   c                 C   s6   |g}t | D ]"\}}||d |  |  q|S )NrF   )r2   r   rQ   )rS   r4   r.   xcjcolr   r   r   columnsSetXcU   s    rW   r"   )rS   c                 C   s,   t | D ]\}}||| | || qd S r>   )r2   r:   )rS   rT   rI   r6   r.   rU   rV   r   r   r   drawColumnSet\   s    rX   )text_stringr   r#   c                 C   sT   | d kst | dkrdS | \}}||  d }||  d | }||fS )Nr   r   rM   r"   )r-   Z
getmetricsgetmaskgetbbox)rY   r   Zascentdescent
text_widthZtext_heightr   r   r   r   `   s    r   N)r   rB   )r"   )PILr   r   r   r   r=   rL   listrO   rW   rX   r;   r   r   r   r   r   <module>   s   
