U
    l±Ëh$6  ã                   @   sh   d dl Z d dlmZmZmZmZmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ G dd	„ d	eƒZdS )
é    N)ÚUnionÚTupleÚCallableÚOptionalÚAnyé   )Ú	CTkCanvas)ÚThemeManager)Ú
DrawEngine)ÚCTkBaseClassc                       s„  e Zd ZdZd3eeeeef  eeeef  ee ee eeee	eef f eeee	eef f  eeee	eef f  eeee	eef f  e
eeef edœ‡ fdd	„Zd4ee d
œdd„Z‡ fdd„Zd5‡ fdd„	Zdd„ Zd6‡ fdd„	Zd7‡ fdd„	Zeedœ‡ fdd„Zd8dd„Zd9dd„Zd d!„ Zd:d"d#„Zeed$œd%d&„Zd'd(„ Zd;d)d*„Zd<d+d,„Zd-d.„ Zd/d0„ Zd1d2„ Z ‡  Z!S )=ÚCTkScrollbarzÎ
    Scrollbar with rounded corners, configurable spacing.
    Connect to scrollable widget by passing .set() method and set command attribute.
    For detailed information check out the documentation.
    Né   ÚtransparentTÚvertical)ÚmasterÚwidthÚheightÚcorner_radiusÚborder_spacingÚminimum_pixel_lengthÚbg_colorÚfg_colorÚbutton_colorÚbutton_hover_colorÚhoverÚcommandÚorientationc                    sz  |d kr|  ¡ dkrd}nd}|d kr<|  ¡ dkr8d}nd}tƒ jf ||||dœ|—Ž |d krntjd d n| j|dd	| _|	d kr”tjd d
 n|  |	¡| _|
d kr¶tjd d n|  |
¡| _|d krØtjd d n|| _	|d krôtjd d n|| _
|| _d| _|| _|| _d| _d| _|| _t| d|  | j¡|  | j¡d| _| jjddddd t| jƒ| _|  ¡  |  ¡  d S )Nr   é   éÈ   Z
horizontal)r   r   r   r   r   r   T©Ztransparencyr   r   r   r   Fr   r   )r   Zhighlightthicknessr   r   )ÚxÚyZrelwidthZ	relheight)ÚlowerÚsuperÚ__init__r	   ÚthemeÚ_check_color_typeÚ	_fg_colorÚ_button_colorÚ_button_hover_colorÚ_corner_radiusÚ_border_spacingÚ_hoverÚ_hover_stateÚ_commandÚ_orientationÚ_start_valueÚ
_end_valueÚ_minimum_pixel_lengthr   Ú_apply_widget_scalingÚ_current_widthÚ_current_heightÚ_canvasZplacer
   Ú_draw_engineÚ_create_bindingsÚ_draw)Úselfr   r   r   r   r   r   r   r   r   r   r   r   r   Úkwargs©Ú	__class__© úO/tmp/pip-unpacked-wheel-ckatmccg/customtkinter/windows/widgets/ctk_scrollbar.pyr$      s<    &""

ýzCTkScrollbar.__init__©Úsequencec                 C   sž   |dkr| j  dd| j¡ |dks*|dkr:| j  d| j¡ |dksJ|dkrZ| j  d| j¡ |dksj|dkrz| j  d| j¡ |dksŠ|dkrš| j  d| j¡ dS )zS set necessary bindings for functionality of widget, will overwrite other bindings NÚborder_partsz
<Button-1>z<Enter>z<Leave>z<B1-Motion>z<MouseWheel>)r6   Ztag_bindÚ_clickedÚbindÚ	_on_enterÚ	_on_leaveÚ_mouse_scroll_event)r:   rA   r>   r>   r?   r8   M   s    zCTkScrollbar._create_bindingsc                    s>   t ƒ j||Ž | jj|  | j¡|  | j¡d | jdd d S ©N)r   r   T)Úno_color_updates)r#   Ú_set_scalingr6   Ú	configurer3   Ú_desired_widthÚ_desired_heightr9   )r:   Úargsr;   r<   r>   r?   rJ   Z   s
    
ÿzCTkScrollbar._set_scalingc                    s>   t ƒ  ||¡ | jj|  | j¡|  | j¡d | jdd d S rH   )r#   Ú_set_dimensionsr6   rK   r3   rL   rM   r9   )r:   r   r   r<   r>   r?   rO   a   s
    
ÿzCTkScrollbar._set_dimensionsc                 C   s  | j dkrˆ| j| j | j }|| jk rz| | j dkrz| | j | | j  }| jd| j |  }| j| j|  }||fS | j| jfS n|| j| j | j }|| jk rø| | j dkrø| | j | | j  }| jd| j |  }| j| j|  }||fS | j| jfS d S )Nr   r   r   )r/   r1   r0   r5   r2   r4   )r:   Zscrollbar_pixel_lengthZinterval_extend_factorÚcorrected_end_valueÚcorrected_start_valuer>   r>   r?   Ú,_get_scrollbar_values_for_minimum_pixel_sizeh   s    
z9CTkScrollbar._get_scrollbar_values_for_minimum_pixel_sizeFc              	      s:  t ƒ  |¡ |  ¡ \}}| j |  | j¡|  | j¡|  | j¡|  | j	¡||| j
¡}|dks`|r,| jdkrŽ| jjd|  | j¡|  | j¡d n"| jjd|  | j¡|  | j¡d | jdkrô| jj|  | j¡d | jjd|  | j¡|  | j¡d n8| jj|  | j¡d | jjd|  | j¡|  | j¡d | j ¡  d S )NFTÚscrollbar_parts)ÚfillÚoutliner   )ÚbgrB   )r#   r9   rR   r7   Zdraw_rounded_scrollbarr3   r4   r5   r*   r+   r/   r-   r6   Ú
itemconfigÚ_apply_appearance_moder)   r(   r'   rK   Z	_bg_colorZupdate_idletasks)r:   rI   rQ   rP   Zrequires_recoloringr<   r>   r?   r9   €   s@    


ú


þ

þ


þ

þzCTkScrollbar._drawc                    sÐ   d|kr"| j | d¡dd| _d}d|kr@|   | d¡¡| _d}d|kr^|   | d¡¡| _d}d|krr| d¡| _d|kr†| d¡| _d|krž| d¡| _d}d	|kr¶| d	¡| _d}t	ƒ j
f d
|i|—Ž d S )Nr   Tr   r   r   r   r   r   r   Úrequire_redraw)r&   Úpopr'   r(   r)   r,   r.   r*   r+   r#   rK   )r:   rY   r;   r<   r>   r?   rK   £   s(    zCTkScrollbar.configure)Úattribute_nameÚreturnc                    sŽ   |dkr| j S |dkr| jS |dkr*| jS |dkr8| jS |dkrF| jS |dkrT| jS |dkrb| jS |dkrp| jS |d	kr~| jS t	ƒ  
|¡S d S )
Nr   r   r   r   Zscrollbar_colorZscrollbar_hover_colorr   r   r   )r*   r+   r2   r'   r(   r)   r,   r.   r/   r#   Úcget)r:   r[   r<   r>   r?   r]   À   s&    zCTkScrollbar.cgetr   c                 C   s6   | j dkr2d| _| jjd|  | j¡|  | j¡d d S )NTrS   ©rU   rT   )r,   r-   r6   rW   rX   r)   ©r:   Úeventr>   r>   r?   rE   Ù   s    


þzCTkScrollbar._on_enterc                 C   s,   d| _ | jjd|  | j¡|  | j¡d d S )NFrS   r^   )r-   r6   rW   rX   r(   r_   r>   r>   r?   rF   à   s
    

þzCTkScrollbar._on_leavec                 C   s¸   | j dkr.|  |j| j | jd| j   ¡}n"|  |j| j | jd| j   ¡}| j| j }t	|d t
|d|d  ƒƒ}||d  | _||d  | _|  ¡  | jd k	r´|  d| j¡ d S )Nr   é   r   Zmoveto)r/   Z_reverse_widget_scalingr!   r+   r5   r    r4   r1   r0   ÚmaxÚminr9   r.   )r:   r`   ÚvalueZcurrent_scrollbar_lengthr>   r>   r?   rC   æ   s    
$"
zCTkScrollbar._clickedc                 C   sH   | j d k	rDtj d¡r2|   dt|jd ƒ d¡ n|   d|j d¡ d S )NÚwinZscrollé(   Zunits)r.   ÚsysÚplatformÚ
startswithÚintÚdeltar_   r>   r>   r?   rG   õ   s    
z CTkScrollbar._mouse_scroll_event)Ústart_valueÚ	end_valuec                 C   s    t |ƒ| _t |ƒ| _|  ¡  d S ©N)Úfloatr0   r1   r9   )r:   rl   rm   r>   r>   r?   Úsetü   s    

zCTkScrollbar.setc                 C   s   | j | jfS rn   )r0   r1   ©r:   r>   r>   r?   Úget  s    zCTkScrollbar.getc                 C   s.   |dks|dkst dƒ‚| jj||dd dS )z called on the tkinter.Canvas ú+TzE'add' argument can only be '+' or True to preserve internal callbacks)ÚaddN)Ú
ValueErrorr6   rD   )r:   rA   r   rt   r>   r>   r?   rD     s    zCTkScrollbar.bindc                 C   s.   |dk	rt dƒ‚| j |d¡ | j|d dS )z; called on the tkinter.Canvas, restores internal callbacks NzŽ'funcid' argument can only be None, because there is a bug in tkinter and its not clear whether the internal callbacks will be unbinded or notr@   )ru   r6   Úunbindr8   )r:   rA   Zfuncidr>   r>   r?   rv   
  s    zCTkScrollbar.unbindc                 C   s
   | j  ¡ S rn   )r6   Úfocusrq   r>   r>   r?   rw     s    zCTkScrollbar.focusc                 C   s
   | j  ¡ S rn   )r6   Ú	focus_setrq   r>   r>   r?   rx     s    zCTkScrollbar.focus_setc                 C   s
   | j  ¡ S rn   )r6   Úfocus_forcerq   r>   r>   r?   ry     s    zCTkScrollbar.focus_force)NNNNr   r   NNNTNr   )N)NN)F)F)r   )r   )N)NNT)NN)"Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   rj   Ústrr   Úboolr   r$   r8   rJ   rO   rR   r9   rK   Úanyr]   rE   rF   rC   rG   ro   rp   rr   rD   rv   rw   rx   ry   Ú__classcell__r>   r>   r<   r?   r   
   s\               ñ
ñ<#




r   )rg   Útypingr   r   r   r   r   Zcore_renderingr   r%   r	   r
   Zcore_widget_classesr   r   r>   r>   r>   r?   Ú<module>   s   