U
    lh                     @   s~   d dl mZ d dlZd dlmZmZmZmZ zd dlmZ W n  e	k
r\   d dl
mZ Y nX ddlmZ G dd deZdS )	    )FontN)ListCallableTupleOptional)Literal   )ThemeManagerc                       s   e Zd ZdZdee ee ed ed eed fdd	Z	e
d
ddZe
d
ddZeeeeef dddZdd Z fddZeed fddZd dddZ  ZS )CTkFonta  
    Font object with size in pixel, independent of scaling.
    To get scaled tuple representation use create_scaled_tuple() method.

    family	The font family name as a string.
    size	The font height as an integer in pixel.
    weight	'bold' for boldface, 'normal' for regular weight.
    slant	'italic' for italic, 'roman' for unslanted.
    underline	1 for underlined text, 0 for normal.
    overstrike	1 for overstruck text, 0 for normal.

    Tkinter Font: https://anzeljg.github.io/rin2/book2/2405/docs/tkinter/fonts.html
    NromanF)normalZbold)Zitalicr   familysizeweightslant	underline
overstrikec                    s   g | _ |d krtjd d n|| _t j|d kr>tjd d n|t| j |d kr`tjd d n||||d t d| _t d d| d|rdnd d|rd	nd | _	d S )
Nr
   r   r   r   r    r    r   )
_size_configure_callback_listr	   theme_sizesuper__init__abscget_family_tuple_style_string)selfr   r   r   r   r   r   	__class__ O/tmp/pip-unpacked-wheel-ckatmccg/customtkinter/windows/widgets/font/ctk_font.pyr      s    
zCTkFont.__init__)callbackc                 C   s   | j | dS )z9 add function, that gets called when font got configured N)r   appendr   r$   r"   r"   r#   add_size_configure_callback1   s    z#CTkFont.add_size_configure_callbackc                 C   s*   z| j | W n tk
r$   Y nX dS )z< remove function, that gets called when font got configured N)r   remove
ValueErrorr&   r"   r"   r#   remove_size_configure_callback5   s    z&CTkFont.remove_size_configure_callback)font_scalingreturnc                 C   s   | j tt| j | | jfS )z\ return scaled tuple representation of font in the form (family: str, size: int, style: str))r   roundr   r   r   )r   r+   r"   r"   r#   create_scaled_tuple<   s    zCTkFont.create_scaled_tuplec                 O   s   t dd S )Nz]'config' is not implemented for CTk widgets. For consistency, always use 'configure' instead.)AttributeError)r   argskwargsr"   r"   r#   config@   s    zCTkFont.configc              	      s   d|kr*| d| _t jt| j d d|krTt j| dd t d| _t jf | t d dt d dt drdnd	 dt d
rd
nd	 | _| jD ]
}|  qd S )Nr   )r   r   )r   r   r   r   r   r   r   )	popr   r   	configurer   r   r   r   r   )r   r1   r$   r    r"   r#   r4   C   s    L
zCTkFont.configure)attribute_namer,   c                    s,   |dkr| j S |dkr| jS t |S d S )Nr   r   )r   r   r   r   )r   r5   r    r"   r#   r   U   s
    zCTkFont.cget)r,   c                 C   s
   t | S )N)copydeepcopy)r   r"   r"   r#   r6   ]   s    zCTkFont.copy)NNNr   FF)__name__
__module____qualname____doc__r   strintr   boolr   r   r'   r*   floatr   r.   r2   r4   anyr   r6   __classcell__r"   r"   r    r#   r
      s,         r
   )Ztkinter.fontr   r6   typingr   r   r   r   r   ImportErrorZtyping_extensionsr   r	   r
   r"   r"   r"   r#   <module>   s   