
    ^j&%                       d dl mZ d dlZd dlmZmZ d dlmZ d dlmZm	Z	 d dl
mZmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% d	d
l&m'Z'm(Z(m)Z)m*Z* erd dlm+Z+ erd dl,m-Z-m.Z.m/Z/m0Z0 ddZ1 e1              G d de(          Z2 G d de)          Z3ddddZ4 G d de*          Z5 G d de'          Z6dS )    )annotationsN)byrefsizeof)TYPE_CHECKING)_gdi32_user32)CDS_FULLSCREENDISP_CHANGE_SUCCESSFUL)DISPLAYCONFIG_DEVICE_INFO_GET_SOURCE_NAME)DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_NAMEENUM_CURRENT_SETTINGS
LOGPIXELSX
LOGPIXELSYMONITORINFOF_PRIMARYQDC_ONLY_ACTIVE_PATHSUSER_DEFAULT_SCREEN_DPIWINDOWS_8_1_OR_GREATER%WINDOWS_10_CREATORS_UPDATE_OR_GREATERWINDOWS_VISTA_OR_GREATER)device_context)DEVMODEDISPLAY_DEVICEWDISPLAYCONFIG_PATH_INFO DISPLAYCONFIG_SOURCE_DEVICE_NAME DISPLAYCONFIG_TARGET_DEVICE_NAME*DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2MONITORENUMPROCMONITORINFOEXPROCESS_PER_MONITOR_DPI_AWAREUINTUINT32   )CanvasDisplayScreen
ScreenMode)_shcore)HDCHMONITORLPARAMLPRECTreturnNonec                     t           rt          j        t                     dS t          rt          j        t                     dS t          rt          j	                     dS dS )zSetting DPI varies per Windows version.

    .. note:: DPI awareness needs to be set before Window, Display, or Screens are initialized.
    N)
r   r   SetProcessDpiAwarenessContextr   r   r'   SetProcessDpiAwarenessr   r   SetProcessDPIAware     O/home/agentuser/manim-venv/lib/python3.11/site-packages/pyglet/display/win32.pyset_dpi_awarenessr5   /   sk    
 - %-.XYYYYY	 %&'DEEEEE	! %"$$$$$% %r3   c                      e Zd ZddZddZdS )	Win32Displayr,   r%   c                Z    |                                  }|D ]}|j        r|c S |d         S Nr   )get_screens
is_primary)selfscreensscreens      r4   get_default_screenzWin32Display.get_default_screen@   sG    ""$$ 	 	F   qzr3   list[Win32Screen]c                h     g d fd}t          |          }t          j        d d |d           S )NhMonitorr)   
hdcMonitorr(   lprcMonitorr+   dwDatar*   r,   boolc           
         |j         }|j        |j        z
  }|j        |j        z
  }                    t          | |j        |j        ||                     dS )NT)contentsrightleftbottomtopappendWin32Screen)	rB   rC   rD   rE   rwidthheightr=   r<   s	          r4   	enum_procz+Win32Display.get_screens.<locals>.enum_procK   s^    $AGaf$EX%FNND(AFAE5&IIK K K4r3   r   )
rB   r)   rC   r(   rD   r+   rE   r*   r,   rF   )r   r   EnumDisplayMonitors)r<   rR   enum_proc_ptrr=   s   `  @r4   r:   zWin32Display.get_screensH   sW    	 	 	 	 	 	 	 (	22#D$qAAAr3   N)r,   r%   )r,   r@   )__name__
__module____qualname__r?   r:   r2   r3   r4   r7   r7   ?   s<                r3   r7   c                       e Zd ZU ded<   dZd$ fdZed%d            Zd&dZd&dZ	d Z
d'dZd&dZd&dZd&dZd(dZd)dZd*dZd+d Zd,d"Zd-d#Z xZS ).rN   r)   _handleNdisplayr7   handlexintyrP   rQ   r,   r-   c                    t                                          |||||           || _        |                                 | _        |                                 | _        d S N)super__init__rY   get_device_name_device_name_get_friendly_name_friendly_name)r<   rZ   r[   r\   r^   rP   rQ   	__class__s          r4   rb   zWin32Screen.__init__\   sX    !Qv666 0022"5577r3   rF   c                H    |                                  }|j        t          z  S )zJIf the screen is considered the primary according to the operating system.)_get_monitor_infodwFlagsr   r<   infos     r4   r;   zWin32Screen.is_primaryb   s#     %%''|222r3   strc                   t                      }t                      }t          j        t          t	          j        |          t	          j        |                    }|dk    rdS t          |j        z              }t	          j        d|j        z            }t          j	        t          t	          j        |          |t	          j        |          |d          }|dk    rdS t          |j                  D ]e}||         }t                      }|j        j        |j        _        |j        j        |j        _        t           |j        _        t	          j        |          |j        _        t          j        t	          j        |j                            }|dk    r|j        | j        k    r|j        j        st3                      }	|j        j        |	j        _        |j        j        |	j        _        t4          |	j        _        t	          j        |	          |	j        _        t          j        t	          j        |	j                            dk    r	|	j        c S gdS )zGet the friendly name of a monitor using the newer Display Configuration API.

        This API is meant to replace EnumDisplayDevicesW, and should be more accurate.

        Requires Windows Vista or higher.
        r   Unknown@   )r!   r   GetDisplayConfigBufferSizesr   ctypesr   r   valuecreate_string_bufferQueryDisplayConfigranger   
sourceInfo	adapterIdheaderidr   typer   sizeDisplayConfigGetDeviceInfoviewGdiDeviceNamerd   
targetInfotargetAvailabler   r   monitorFriendlyDeviceName)
r<   
path_count
mode_countresultpathsmodesipathsource_nametarget_names
             r4   %_get_friendly_name_display_config_apiz1Win32Screen._get_friendly_name_display_config_apih   s
    XX
XX
4!6<
#;#;V\*=U=U
 
 Q;;9(:+;;>>+B1A,ABB+!6<
#;#;UFLQ[D\D\^cef
 
 Q;;9z'(( 	= 	=A8D:<<K+/?+DK($(O$6K!&OK#&,mK&@&@K#7[EW8X8XYYF{{,0AAA?2 :<<K+/?+DK($(O$6K!&OK#&,mK&@&@K#1&,{?Q2R2RSSWXXX"<<<< Y yr3   c                    t           r|                                 S t                      }t          j        |          |_        t          j        | j        dt          j	        |          d          r|j
        S dS )Nr   ro   )r   r   r   rr   r   cbr   EnumDisplayDevicesWrd   r   DeviceString)r<   dds     r4   re   zWin32Screen._get_friendly_name   sl    # 	@==???b!!&t'8!V\"=M=MqQQ 	#?"yr3   c                    t          d           5 }t          | j        d|          }|                    |          }|D ]	}| |_        
	 d d d            n# 1 swxY w Y   |S r9   )r   Win32CanvasrZ   matchr>   )r<   templatehdccanvasconfigsconfigs         r4   get_matching_configsz Win32Screen.get_matching_configs   s    D!! 	%S q#66FnnV,,G! % % $%		% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% s   8AAAr   c                    t                      }t          t                     |_        t          j        | j        t          |                     |S r`   )r   r   cbSizer   GetMonitorInfoWrY   r   rk   s     r4   ri   zWin32Screen._get_monitor_info   s:    ]++eDkk:::r3   c                    | j         S r`   )rd   r<   s    r4   get_display_idzWin32Screen.get_display_id   s      r3   c                    | j         S r`   )rf   r   s    r4   get_monitor_namezWin32Screen.get_monitor_name   s    ""r3   c                8    |                                  }|j        S r`   )ri   szDevicerk   s     r4   rc   zWin32Screen.get_device_name   s    %%''}r3   c                   t           rat                      }t                      }t          j        | j        dt          |          t          |                     |j        |j        }}n]t          j        d           }t          j
        |t                    }t          j
        |t                    }t          j        d|           |S r9   )r   r    r'   GetDpiForMonitorrY   r   rs   r   GetDCr   GetDeviceCapsr   r   	ReleaseDC)r<   xdpiydpidcs       r4   get_dpizWin32Screen.get_dpi   s    ! 		%66D66D$T\1eDkk5;;OOOTZ$DDt$$B'J77D'J77Da$$$r3   floatc                >    |                                  }|t          z  S r`   )r   r   )r<   r   s     r4   	get_scalezWin32Screen.get_scale   s    ||~~---r3   list[Win32ScreenMode]c                $   |                                  }d}g }	 t                      }t          t                    |_        t	          j        ||t          |                    }|sn)|                    t          | |                     |dz  }v|S )Nr   Tr"   )	rc   r   r   dmSizer   EnumDisplaySettingsWr   rM   Win32ScreenMode)r<   device_namer   r   moderO   s         r4   	get_modeszWin32Screen.get_modes   s    **,,	99D //DK,[!U4[[IIA LLt44555FA	 r3   r   c                    t                      }t          t                     |_        t          j        |                                 t          t          |                     t          | |          S r`   )	r   r   r   r   r   rc   r   r   r   )r<   r   s     r4   get_modezWin32Screen.get_mode   sY    yyWoo$T%9%9%;%;%:%*4[[	2 	2 	2 tT***r3   r   c                (   |j         | u sJ | j        s|                                 | _        t          j        |                                 t          |j                  d t          d           }|t          k    r|j
        | _
        |j        | _        d S d S r`   )r>   _initial_moder   r   ChangeDisplaySettingsExWrc   r   _moder	   r
   rP   rQ   )r<   r   rO   s      r4   set_modezWin32Screen.set_mode   s    {d""""! 	1!%D,T-A-A-C-C-24:->->-1-;-1	3 3
 &&&DJ+DKKK '&r3   c                L    | j         r|                     | j                    d S d S r`   )r   r   r   s    r4   restore_modezWin32Screen.restore_mode   s2     	.MM$,-----	. 	.r3   )rZ   r7   r[   r)   r\   r]   r^   r]   rP   r]   rQ   r]   r,   r-   )r,   rF   r,   rm   )r,   r   )r,   r]   )r,   r   )r,   r   )r,   r   )r   r   r,   r-   r,   r-   )rU   rV   rW   __annotations__r   rb   propertyr;   r   re   r   ri   r   r   rc   r   r   r   r   r   r   __classcell__rg   s   @r4   rN   rN   X   sp        M8 8 8 8 8 8 3 3 3 X3
6 6 6 6p	 	 	 	     ! ! ! !# # # #      . . . .    + + + +& & & &. . . . . . . .r3   rN   defaultcenterstretch)r   r"      c                  (     e Zd Zd
 fdZdd	Z xZS )r   r>   rN   r   r   r,   r-   c                    t                                          |           || _        |j        | _        |j        | _        |j        | _        |j	        | _
        |j        | _        d S r`   )ra   rb   r   dmPelsWidthrP   dmPelsHeightrQ   dmBitsPerPeldepthdmDisplayFrequencyratedmDisplayFixedOutputscaling)r<   r>   r   rg   s      r4   rb   zWin32ScreenMode.__init__  sX       
%
'&
+	0r3   rm   c                    | j         j         d| j        d| j        d| j        d| j         dt                              | j                   dS )Nz(width=z	, height=z, depth=z,rate=z
, scaling=))	rg   rU   rP   rQ   r   r   _win32_scale_namegetr   r   s    r4   __repr__zWin32ScreenMode.__repr__  s    >* T T4: T T$+ T Taeak T T	T T->-B-B4<-P-PT T T 	Ur3   )r>   rN   r   r   r,   r-   r   )rU   rV   rW   rb   r   r   r   s   @r4   r   r     sY        1 1 1 1 1 1U U U U U U U Ur3   r   c                        e Zd Zd
 fd	Z xZS )r   rZ   r7   hwndHWNDr   r(   r,   r-   c                f    t                                          |           || _        || _        d S r`   )ra   rb   r   r   )r<   rZ   r   r   rg   s       r4   rb   zWin32Canvas.__init__  s-    !!!	r3   )rZ   r7   r   r   r   r(   r,   r-   )rU   rV   rW   rb   r   r   s   @r4   r   r     s=                 r3   r   r   )7
__future__r   rr   r   r   typingr   pyglet.libs.win32r   r   pyglet.libs.win32.constantsr	   r
   r   r   r   r   r   r   r   r   r   r   r   "pyglet.libs.win32.context_managersr   pyglet.libs.win32.typesr   r   r   r   r   r   r   r   r   r    r!   baser#   r$   r%   r&   r'   ctypes.wintypesr(   r)   r*   r+   r5   r7   rN   r   r   r   r2   r3   r4   <module>r      s   " " " " " "                              - - - - - - - -                              > = = = = =                          6 5 5 5 5 5 5 5 5 5 5 5 *)))))) >============
% 
% 
% 
%         7   2g. g. g. g. g.& g. g. g.V   
U U U U Uj U U U    &     r3   