
    ࢉi)"                     4    d dl Z d dlZd dlmZ  G d d      Zy)    N)Callablec                   0   e Zd ZdZi Zi ZdZdZdZdZ	dZ
edefd       Zedefd       Zedefd	       Zed
efd       Zed        Zed        Zed        Zedefd       Zed        Zed        Zed        Zed        Zedefd       Zed        Zy)ScalingTrackerF   d   i  returnc                 \    | j                  |      }| j                  |   | j                  z  S N)get_window_root_of_widgetwindow_dpi_scaling_dictwidget_scaling)clswidgetwindow_roots      /home/obispo/Crisostomo_bridge/mision_env/lib/python3.12/site-packages/customtkinter/windows/widgets/scaling/scaling_tracker.pyget_widget_scalingz!ScalingTracker.get_widget_scaling   .    33F;**;7#:L:LLL    c                 \    | j                  |      }| j                  |   | j                  z  S r
   )r   r   window_scaling)r   windowr   s      r   get_window_scalingz!ScalingTracker.get_window_scaling   r   r   widget_scaling_factorc                 F    t        |d      | _        | j                          y Ng?)maxr   update_scaling_callbacks_all)r   r   s     r   set_widget_scalingz!ScalingTracker.set_widget_scaling        !6<((*r   window_scaling_factorc                 F    t        |d      | _        | j                          y r   )r   r   r   )r   r    s     r   set_window_scalingz!ScalingTracker.set_window_scaling"   r   r   c                    |}t        |t        j                        du rat        |t        j                        du rE|j                  }t        |t        j                        du rt        |t        j                        du rE|S )NF)
isinstancetkinterTkToplevelmaster)r   r   current_widgets      r   r   z(ScalingTracker.get_window_root_of_widget'   sl    4=>7+;+;<E+22N 4=>7+;+;<E r   c                 $   | j                   j                         D ]s  \  }}|D ]i  }| j                  s> || j                  |   | j                  z  | j                  |   | j
                  z         M || j                  | j
                         k u y r
   )window_widgets_dictitems"deactivate_automatic_dpi_awarenessr   r   r   )r   r   callback_listset_scaling_callbacks       r   r   z+ScalingTracker.update_scaling_callbacks_all1   s    %(%<%<%B%B%D 	=!FM(5 =$==()D)DV)LsOaOa)a),)D)DV)LsOaOa)ac )););),););==	=r   c                     | j                   |   D ]i  }| j                  s> || j                  |   | j                  z  | j                  |   | j                  z         M || j                  | j                         k y r
   )r+   r-   r   r   r   )r   r   r/   s      r   #update_scaling_callbacks_for_windowz2ScalingTracker.update_scaling_callbacks_for_window<   s{    $'$;$;F$C 	9 99$S%@%@%H3K]K]%]%(%@%@%H3K]K]%]_ %S%7%7%(%7%79	9r   widget_callbackc                 X   | j                  |      }|| j                  vr|g| j                  |<   n| j                  |   j                  |       || j                  vr| j	                  |      | j                  |<   | j
                  s$|j                  d| j                         d| _        y y )Nr   T)r   r+   appendr   get_window_dpi_scalingupdate_loop_runningaftercheck_dpi_scalingr   r2   r   r   s       r   
add_widgetzScalingTracker.add_widgetF   s    33F;c5554C3DC##K0##K077Hc9997:7Q7QR]7^C''4&&c3#8#89&*C# 'r   c                 r    | j                  |      }	 | j                  |   j                  |       y #  Y y xY wr
   )r   r+   remover9   s       r   remove_widgetzScalingTracker.remove_widgetV   s:    33F;	##K077H	s   2 6c                 .    	 | j                   |= y #  Y y xY wr
   )r+   r   window_callbackr   s      r   remove_windowzScalingTracker.remove_window^   s    	''/	s    c                     || j                   vr|g| j                   |<   n| j                   |   j                  |       || j                  vr| j                  |      | j                  |<   y y r
   )r+   r4   r   r5   r?   s      r   
add_windowzScalingTracker.add_windowe   sj    000/>.?C##F+##F+22?C444252L2LV2TC''/ 5r   c                     | j                   s^t        j                  dk(  ryt        j                  j                  d      r*ddl}|j
                  j                  j                  d       yyy)z make process DPI aware, customtkinter elements will get scaled automatically,
            only gets activated when CTk object is created darwinwinr   N   )r-   sysplatform
startswithctypeswindllshcoreSetProcessDpiAwareness)r   rK   s     r   activate_high_dpi_awarenessz*ScalingTracker.activate_high_dpi_awarenesso   sT    
 55||x'((/2 $$;;A>A 6r   c                    | j                   st        j                  dk(  ryt        j                  j                  d      rddlm}m}m} d}d}|j                  |j                               }|j                  j                  ||j                  d            }|j                         |j                         }
}	|j                  j                  || ||	       ||
             |	j                   |
j                   z   d|z  z  S yy)NrE   r   rF   r   )rL   pointerwintypes`   rG   )r-   rH   rI   rJ   rK   rL   rQ   rR   HWNDwinfo_iduser32MonitorFromWindowDWORDUINTrM   GetDpiForMonitorvalue)r   r   rL   rQ   rR   DPI100pcDPI_typewindow_hwndmonitor_handlex_dpiy_dpis              r   r5   z%ScalingTracker.get_window_dpi_scaling   s    55||x'((/<<&mmFOO,=>!'!@!@hnn]^N_!`'}}u..~xQVY`afYghekk1a(lCC r   c                    d}| j                   D ]  }|j                         s|j                         dk(  r(| j                  |      }|| j                  |   k7  sL|| j                  |<   t
        j                  j                  d      r|j                  dd       |j                          | j                  |       |j                          t
        j                  j                  d      r|j                  dd       d} | j                   j                         D ]T  }	 |r(|j                  | j                  | j                          y |j                  | j                   | j                          y  d| _        y # t"        $ r Y jw xY w)NFiconicrF   z-alphag333333?r   T)r+   winfo_existsstater5   r   rH   rI   rJ   
attributesblock_update_dimensions_eventr1   unblock_update_dimensions_eventkeysr7   loop_pause_after_new_scalingr8   update_loop_interval	Exceptionr6   )r   new_scaling_detectedr   current_dpi_scaling_valueapps        r   r8   z ScalingTracker.check_dpi_scaling   s`   $ -- 	0F""$V\\^x-G,/,F,Fv,N),0K0KF0SS:SC//7||..u5))(D988:;;FC::<||..u5))(A6+/(!	0& **//1 	C'IIc>>@U@UV  IIc668M8MN	 #(  s   (E:	&E::	FFN)__name__
__module____qualname__r-   r+   r   r   r   r6   rk   rj   classmethodfloatr   r   r   r"   r   r   r1   r   r:   r=   rA   rC   rO   r5   r8    r   r   r   r      sy   ).& NN#' M5 M M M5 M M +u + + +u + +   = = 9 9 + + +     U U $ $L u  * !( !(r   r   )r%   rH   typingr   r   ru   r   r   <module>rw      s     
 H( H(r   