U
    lh+%                     @   s`   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 )
    )UnionTupleListOptionalAny   )	CTkCanvas)ThemeManager)
DrawEngine)CTkBaseClassc                       s"  e Zd ZdZdeeeeeeef  eeeef  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ef f  df eedf d
 fddZ
ee d fd	d
Z fddZd fdd	Zd fdd	Zd fdd	Zeed fddZd ddZd!ddZ  ZS )"CTkFramez
    Frame with rounded corners and border.
    Default foreground colors are set according to theme.
    To make the frame transparent set fg_color=None.
    For detailed information check out the documentation.
       Ntransparent)
masterwidthheightcorner_radiusborder_widthbg_colorfg_colorborder_colorbackground_corner_colors"overwrite_preferred_drawing_methodc                    sZ  t  jf ||||d| |d kr2tjd d n| || _|d krt| jtr| jj	tjd d krztjd d | _	qtjd d | _	qtjd d | _	n| j|dd| _	|	| _
|d krtjd d n|| _|d krtjd d	 n|| _t| d
| | j| | jd| _| jjd
d
ddd | jj| | jd t| j| _|
| _| jdd d S )N)r   r   r   r   r   r   r   Ztop_fg_colorTZtransparencyr   r   r   )r   Zhighlightthicknessr   r   r   )xyZrelwidthZ	relheightbg)no_color_updates)super__init__r	   theme_check_color_type_border_color
isinstancer   r   	_fg_color_background_corner_colors_corner_radius_border_widthr   _apply_widget_scaling_current_width_current_height_canvasZplace	configure_apply_appearance_mode	_bg_colorr
   _draw_engine#_overwrite_preferred_drawing_method_draw)selfr   r   r   r   r   r   r   r   r   r   kwargs	__class__ K/tmp/pip-unpacked-wheel-ckatmccg/customtkinter/windows/widgets/ctk_frame.pyr       s,    "

zCTkFrame.__init__)returnc                    s:   t   }z|| j |W S  tk
r4   | Y S X dS )z
        winfo_children of CTkFrame without self.canvas widget,
        because it's not a child but part of the CTkFrame itself
        N)r   winfo_childrenremover,   
ValueError)r3   Zchild_widgetsr5   r7   r8   r:   C   s    
zCTkFrame.winfo_childrenc                    s:   t  j|| | jj| | j| | jd |   d S N)r   r   )r   _set_scalingr,   r-   r)   _desired_width_desired_heightr2   )r3   argsr4   r5   r7   r8   r>   P   s
    
zCTkFrame._set_scalingc                    s:   t  || | jj| | j| | jd |   d S r=   )r   _set_dimensionsr,   r-   r)   r?   r@   r2   )r3   r   r   r5   r7   r8   rB   W   s
    
zCTkFrame._set_dimensionsFc                    s  t  | | j sd S | jd k	r| j| | j| | j	 | jj
d| | jd d | jj
d| | jd d | jj
d| | jd d | jj
d| | jd	 d n| jd
 | jj| | j| | j	| | j| | j| jd}|dks|r| jdkr8| jj
d| | j| | jd n"| jj
d| | j| | jd | jj
d| | j| | jd | jj| | jd d S )NZbackground_corner_top_leftr   )fillZbackground_corner_top_rightr   Zbackground_corner_bottom_right   Zbackground_corner_bottom_left   Zbackground_parts)r   Fr   Zinner_parts)rC   outlineZborder_partsr   )r   r2   r,   Zwinfo_existsr&   r0   Zdraw_background_cornersr)   r*   r+   Z
itemconfigr.   deleteZdraw_rounded_rect_with_borderr'   r(   r1   r%   r/   r#   r-   )r3   r   Zrequires_recoloringr5   r7   r8   r2   ^   sB    











zCTkFrame._drawc                    s   d|krH| j |ddd| _d}|  D ]}t|tr*|j| jd q*d|kr| jdkr|  D ]}t|trb|j| jd qbd|kr|  |d| _d}d|kr|d| _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   r   require_redraw)r"   popr%   r:   r$   r   r-   r#   r&   r'   r(   r   )r3   rH   r4   childr5   r7   r8   r-      s0    


zCTkFrame.configure)attribute_namer9   c                    sV   |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 t |S d S )Nr   r   r   r   r   )r'   r(   r%   r#   r&   r   cget)r3   rK   r5   r7   r8   rL      s    zCTkFrame.cgetTc                 C   s.   |dks|dkst d| jj||dd dS ) called on the tkinter.Canvas +TzE'add' argument can only be '+' or True to preserve internal callbacks)addN)r<   r,   bind)r3   sequencecommandrO   r7   r7   r8   rP      s    zCTkFrame.bindc                 C   s"   |dk	rt d| j|d dS )rM   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 not)r<   r,   unbind)r3   rQ   Zfuncidr7   r7   r8   rS      s    zCTkFrame.unbind)	r   r   NNr   NNNN)NN)F)F)NNT)NN)__name__
__module____qualname____doc__r   intr   r   strr   r    r   anyr:   r>   rB   r2   r-   rL   rP   rS   __classcell__r7   r7   r5   r8   r   	   s<   	         
2(#
r   N)typingr   r   r   r   r   Zcore_renderingr   r!   r	   r
   Zcore_widget_classesr   r   r7   r7   r7   r8   <module>   s
   