
    ^j                        d dl mZ d dlmZmZmZ ddlmZmZm	Z	m
Z
 d dlmZmZmZmZmZ d dlmZmZ d dlmZ  ed          Z G d	 d
e          Z G d de	          Z G d de
          Z G d de          ZdS )    )annotations)c_uint32c_void_pbyref   )CanvasDisplayScreen
ScreenMode)CGDirectDisplayIDquartzcf	ObjCClassget_NSString)cfstring_to_stringcfarray_to_list)NSDeviceResolutionNSScreenc                      e Zd Zd ZddZdS )CocoaDisplayc                     d}t          |z              }t                      }t          j        ||t	          |                      fdt          |          d |j                 D             S )N   c                0    g | ]}t          |          S  )CocoaScreen).0	displayIDselfs     O/home/agentuser/manim-venv/lib/python3.11/site-packages/pyglet/display/cocoa.py
<listcomp>z,CocoaDisplay.get_screens.<locals>.<listcomp>   s#    bbbD),,bbb    )r   r   r   CGGetActiveDisplayListr   listvalue)r   maxDisplaysactiveDisplayscounts   `   r   get_screenszCocoaDisplay.get_screens   sm    +k9<<

%k>5<<PPPbbbbd>>R>RS`UZU`S`>abbbbr!   returnr
   c                    t          j                    }|                                 }|D ]}|                                |k    r|c S |d         S )Nr   )r   CGMainDisplayIDr(   get_display_id)r   main_idscreensscreens       r   get_default_screenzCocoaDisplay.get_default_screen   sa    (**""$$ 	 	F$$&&'11 2 qzr!   N)r)   r
   )__name__
__module____qualname__r(   r0   r   r!   r   r   r      s:        c c c     r!   r   c                  j     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZddZddZ xZS )r   c           	     6   t          j        |          }|j        j        |j        j        }}|j        j        |j        j        }}t                      	                    |t          |          t          |          t          |          t          |                     || _        |                                 | _        |                                 | _        d| _        | j        1| j                                        }|rt%          |          | _        d S d S d S )NUnknown)r   CGDisplayBoundsoriginxysizewidthheightsuper__init__int_cg_display_idget_mode_default_modeget_nsscreen
_ns_screen_friendly_namelocalizedNamer   )
r   displayr   boundsr9   r:   r<   r=   screen_name	__class__s
            r   r?   zCocoaScreen.__init__$   s    '	22 }1)6;+=v#a&&#a&&#e**c&kkJJJ'!]]__++--'?&/7799K F&8&E&E### '&F Fr!   c                `   t                                           }|                                }t          |          D ]p}|                    |          }|                                }|                    t          d                    }|                                }|| j	        k    r|c S qdS )zAReturns the NSScreen instance that matches our CGDirectDisplayID.NSScreenNumberN)
r   r.   r'   rangeobjectAtIndex_deviceDescriptionobjectForKey_r   intValuerA   )r   screen_arrayr'   insscreen
screenInfor   s          r   rD   zCocoaScreen.get_nsscreen6   s      ''))""$$u 	  	 A#22155H!3355J"00>N1O1OPPI!**,,ID/// 0tr!   c                    | j                                         }|                    t                                                    }t          |j                  S N)rE   rP   rQ   r   	sizeValuer@   r<   )r   descrsizes      r   get_dpizCocoaScreen.get_dpiE   sE    0022""#566@@BB5;r!   c                    d}| j         rM| j                                         }| j                             |          }|j        j        |j        j        z  }nt          d           |S )Ng      ?z=Could not initialize NSScreen to retrieve DPI. Using default.)rE   frameconvertRectToBacking_r;   r<   print)r   ratioptspixelss       r   	get_scalezCocoaScreen.get_scaleJ   sc    ? 	S/''))C_::3??FK%6EEQRRRr!   c                X    t          | j        | d           }|                    |          S rX   )CocoaCanvasrH   match)r   templatecanvass      r   get_matching_configsz CocoaScreen.get_matching_configsU   s'    T\466~~f%%%r!   c                     t          t          j         j        d                     } fdt	          |          D             }t          j        |           |S )Nc                0    g | ]}t          |          S r   )CocoaScreenMode)r   cgmoder   s     r   r    z)CocoaScreen.get_modes.<locals>.<listcomp>[   s#    VVV6v..VVVr!   )r   r   CGDisplayCopyAllDisplayModesrA   r   r   	CFRelease)r   cgmodesmodess   `  r   	get_modeszCocoaScreen.get_modesY   sW    6>t?RTXYYZZVVVV_W=U=UVVV
Wr!   c                    t          t          j        | j                            }t	          | |          }t          j        |           |S rX   )r   r   CGDisplayCopyDisplayModerA   rm   CGDisplayModeRelease)r   rn   modes      r   rB   zCocoaScreen.get_mode_   sB    &9$:MNNOOtV,,#F+++r!   c                    |j         | u sJ t          j        | j                   t          j        | j        |j        d            |j        | _        |j        | _        d S rX   )r/   r   CGDisplayCapturerA   CGDisplaySetDisplayModern   r<   r=   )r   rw   s     r   set_modezCocoaScreen.set_modee   sY    {d"""" 3444&t':DKNNNZ
kr!   c                     g d}                                  t           fd|D                       rd S t          j         j         j        j        d            t          j         j                   d S )N)r<   r=   depthratec              3  f   K   | ]+}t          |          t          j        |          k    V  ,d S rX   )getattrrC   )r   attrcurrent_moder   s     r   	<genexpr>z+CocoaScreen.restore_mode.<locals>.<genexpr>o   sS       $ $ |T**gd6H$.O.OO $ $ $ $ $ $r!   )rB   allr   rz   rA   rC   rn   CGDisplayRelease)r   match_attrsr   s   ` @r   restore_modezCocoaScreen.restore_model   s    :::}} $ $ $ $ $"$ $ $ $ $ 	 F&t':D<N<UW[\\\ 344444r!   c                8    t          j        | j                   d S rX   )r   ry   rA   r   s    r   capture_displayzCocoaScreen.capture_displayv        344444r!   c                8    t          j        | j                   d S rX   )r   r   rA   r   s    r   release_displayzCocoaScreen.release_displayy   r   r!   r)   strc                    | j         S )z'Get a unique identifier for the screen.)rA   r   s    r   r,   zCocoaScreen.get_display_id|   s    ""r!   c                    | j         S )zpGet a friendly name, if available.

        For example, the make and model of the screen: Dell S2716DG
        )rF   r   s    r   get_monitor_namezCocoaScreen.get_monitor_name   s    
 ""r!   )r)   r   )r1   r2   r3   r?   rD   r\   rd   rj   rs   rB   r{   r   r   r   r,   r   __classcell__rK   s   @r   r   r   "   s        F F F F F$       
	 	 	& & &    " " "5 5 55 5 55 5 5# # # ## # # # # # # #r!   r   c                  *     e Zd Z fdZd Zd Z xZS )rm   c                ~   t                                          |           t          j        |           || _        t          t          j        |                    | _        t          t          j        |                    | _	        | 
                    |          | _        t          j        |          | _        d S rX   )r>   r?   r   CGDisplayModeRetainrn   r@   CGDisplayModeGetWidthr<   CGDisplayModeGetHeightr=   getBitsPerPixelr}   CGDisplayModeGetRefreshRater~   )r   r/   rn   rK   s      r   r?   zCocoaScreenMode.__init__   s       "6***5f==>>
&7??@@))&11
6v>>			r!   c                F    t          j        | j                   d | _        d S rX   )r   rv   rn   r   s    r   __del__zCocoaScreenMode.__del__   s     #DK000r!   c                    d}d}d}t          t          j        |                    }t          |          }t	          j        |           ||k    rdS ||k    rdS ||k    rdS dS )NPPPPPPPPz-RRRRRGGGGGBBBBBz --------RRRRRRRRGGGGGGGGBBBBBBBB          r   )r   r   CGDisplayModeCopyPixelEncodingr   r   rp   )r   rn   IO8BitIndexedPixelsIO16BitDirectPixelsIO32BitDirectPixelscfstringpixelEncodings          r   r   zCocoaScreenMode.getBitsPerPixel   s~    (0@FA&IIJJ*844
X/////////qr!   )r1   r2   r3   r?   r   r   r   r   s   @r   rm   rm      sV        ? ? ? ? ?        r!   rm   c                       e Zd Z fdZ xZS )rf   c                f    t                                          |           || _        || _        d S rX   )r>   r?   r/   nsview)r   rH   r/   r   rK   s       r   r?   zCocoaCanvas.__init__   s-    !!!r!   )r1   r2   r3   r?   r   r   s   @r   rf   rf      s8                r!   rf   N)
__future__r   ctypesr   r   r   baser   r	   r
   r   pyglet.libs.darwin.cocoapyr   r   r   r   r   r   r   pyglet.libs.darwinr   r   r   r   rm   rf   r   r!   r   <module>r      sy   " " " " " " , , , , , , , , , , 5 5 5 5 5 5 5 5 5 5 5 5 ] ] ] ] ] ] ] ] ] ] ] ] ] ] J J J J J J J J 1 1 1 1 1 1 9Z      7   &c# c# c# c# c#& c# c# c#J    j   >    &     r!   