U
    lh                     @   sT   d dl mZmZmZmZ zd dlmZmZ W n ek
r@   Y nX G dd dZ	dS )    )TupleDictCallableList)ImageImageTkc                   @   s   e Zd ZdZdZd#ddeeef dddZed	d
 Z	e
dddZe
dddZdd ZeedddZdd Zeeeef dddZeeef ddddZeeef ddddZeedd d!d"ZdS )$CTkImageaY  
    Class to store one or two PIl.Image.Image objects and display size independent of scaling:

    light_image: PIL.Image.Image for light mode
    dark_image: PIL.Image.Image for dark mode
    size: tuple (<width>, <height>) with display size for both images

    One of the two images can be None and will be replaced by the other image.
    FN   r
   zImage.Image)light_image
dark_imagesizec                 C   s>   | j s|   || _|| _|   || _g | _i | _i | _d S N)	_checked_PIL_import_check_pil_import_light_image_dark_image_check_images_size_configure_callback_list_scaled_light_photo_images_scaled_dark_photo_images)selfr   r   r    r   Q/tmp/pip-unpacked-wheel-ckatmccg/customtkinter/windows/widgets/image/ctk_image.py__init__   s    zCTkImage.__init__c                 C   s0   zt t }}W n tk
r*   tdY nX d S )Nz.PIL.Image and PIL.ImageTk couldn't be imported)r   r   	NameErrorImportError)cls_r   r   r   r   &   s    zCTkImage._check_pil_import)callbackc                 C   s   | j | dS )z: add function, that gets called when image got configured N)r   appendr   r    r   r   r   add_configure_callback-   s    zCTkImage.add_configure_callbackc                 C   s   | j | dS )z= remove function, that gets called when image got configured N)r   remover"   r   r   r   remove_configure_callback1   s    z"CTkImage.remove_configure_callbackc                 K   sn   d|kr"| d| _i | _|   d|krD| d| _i | _|   d|krX| d| _| jD ]
}|  q^d S Nr   r   r   )popr   r   r   r   r   r   r   )r   kwargsr    r   r   r   	configure5   s    
zCTkImage.configure)attribute_namereturnc                 C   s.   |dkr| j S |dkr| jS |dkr*| jS d S r&   )r   r   r   )r   r*   r   r   r   cgetE   s    zCTkImage.cgetc                 C   s   | j d k	r,t| j tjs,tdt| j  | jd k	rXt| jtjsXtdt| j | j d krt| jd krttd| j d k	r| jd k	r| j j| jjkrtd| j j d| jj dd S )Nz?CTkImage: light_image must be instance if PIL.Image.Image, not z>CTkImage: dark_image must be instance if PIL.Image.Image, not zECTkImage: No image given, light_image is None and dark_image is None.zCTkImage: light_image size z% must be the same as dark_image size .)r   
isinstancer   
ValueErrortyper   r   )r   r   r   r   r   M   s    $zCTkImage._check_images)widget_scalingr+   c                 C   s$   t | jd | t | jd | fS )Nr      )roundr   )r   r1   r   r   r   _get_scaled_size\   s    zCTkImage._get_scaled_sizezImageTk.PhotoImage)scaled_sizer+   c                 C   s:   || j kr| j | S t| j|| j |< | j | S d S r   )r   r   
PhotoImager   resizer   r5   r   r   r   _get_scaled_light_photo_image_   s    

z&CTkImage._get_scaled_light_photo_imagec                 C   s:   || j kr| j | S t| j|| j |< | j | S d S r   )r   r   r6   r   r7   r8   r   r   r   _get_scaled_dark_photo_imagef   s    

z%CTkImage._get_scaled_dark_photo_image)r1   appearance_moder+   c                 C   s~   |  |}|dkr&| jd k	r&| |S |dkrB| jd krB| |S |dkr^| jd k	r^| |S |dkrz| jd krz| |S d S )NlightZdark)r4   r   r9   r:   r   )r   r1   r;   r5   r   r   r   create_scaled_photo_imagem   s    



z"CTkImage.create_scaled_photo_image)NNr	   )__name__
__module____qualname____doc__r   r   intr   classmethodr   r   r#   r%   r)   stranyr,   r   floatr4   r9   r:   r=   r   r   r   r   r      s*   
   

r   N)
typingr   r   r   r   ZPILr   r   r   r   r   r   r   r   <module>   s
   