
    kja,                     r    d dl mZ d dlmZ d dlZd dlZd dlZd dlZd dlm	Z	 d dl
mZ  G d de	          ZdS )    )Path)AnyN)
BaseWindow)Keysc                       e Zd ZdZdZeZddddZdef fdZ	d%dZ
ded	d
fdZded	d
fdZed	eeef         fd            Zej        deeef         d	d
fd            Zed	eeef         fd            Zej        deeef         d	d
fd            Zed	efd            Zej        ded	d
fd            Zed	efd            Zej        ded	d
fd            Zed	efd            Zej        ded	d
fd            Zed	efd            Zej        ded	d
fd            Zd%dZded	d
fdZdeded	d
f fd Zd% fd!Zd%d"Zd%d#Zd%d$Z  xZ!S )&Windowz4
    Basic window implementation using pygame2.
    pygame2         )r
   r   r   kwargsc                     t                      j        di | t          j                                         t          j                            t          j        | j        d                    t          j                            t          j        | j        d                    t          j                            t          j	        t          j
                   t          j                            t          j        d           t          j                            t          j        d           t          j                            t          j        d           t          j                            t          j        d           | j        dk    rYt          j                            t          j        d           t          j                            t          j        | j                   d| _        t          j        t          j        z  | _        | j        r| xj        t          j        z  c_        | j        s| xj        t          j        z  c_        |                                  | j        | _        | j        | _        t          j        j         j!        "                                | _#        | j$        r| %                    d           | &                                 | '                                 d S )Nr   r
         T )(super__init__pygamedisplayinitgl_set_attributeGL_CONTEXT_MAJOR_VERSION
gl_versionGL_CONTEXT_MINOR_VERSIONGL_CONTEXT_PROFILE_MASKGL_CONTEXT_PROFILE_CORE"GL_CONTEXT_FORWARD_COMPATIBLE_FLAGGL_DOUBLEBUFFERGL_DEPTH_SIZEGL_STENCIL_SIZEsamplesGL_MULTISAMPLEBUFFERSGL_MULTISAMPLESAMPLES_depthOPENGL	DOUBLEBUF_flags	resizable	RESIZABLE_visibleHIDDEN	_set_mode_titletitle_cursorcursor_sdl2videor   from_display_module_sdl_window
fullscreen_set_fullscreeninit_mgl_contextset_default_viewport)selfr   	__class__s     a/home/agentuser/manim-venv/lib/python3.11/site-packages/moderngl_window/context/pygame2/window.pyr   zWindow.__init__   s,   ""6"""''(GYZI[\\\''(GYZI[\\\''*F,J	
 	
 	
 	''(QSTUUU''(>BBB''(<bAAA''(>BBB<!N++F,H!LLLN++F,H$,WWWmf&66> 	,KK6++KK} 	)KK6=(KK[
l "<-4HHJJ? 	'  &&&!!#####    returnNc                     t           j                            | j        | j        f| j        | j        | j                  | _        d S )N)sizeflagsdepthvsync)	r   r   set_mode_width_heightr'   r$   _vsync_surfacer9   s    r;   r,   zWindow._set_modeF   s?    //+t|,+++	 0 
 
r<   valuec                 t    |r| j                             d           d S | j                                          d S )NT)r4   set_fullscreenset_windowedr9   rI   s     r;   r6   zWindow._set_fullscreenN   sB     	,++D11111))+++++r<   c                 <    || _         |                                  d S N)rF   r,   rM   s     r;   
_set_vsynczWindow._set_vsyncT   s    r<   c                     | j         | j        fS )ztuple[int, int]: current window size.

        This property also support assignment::

            # Resize the window to 1000 x 1000
            window.size = 1000, 1000
        )rD   rE   rH   s    r;   r?   zWindow.sizeX   s     {DL((r<   c                     |\  | _         | _        |                                  |                     |d         |d                    d S )Nr   r
   )rD   rE   r,   resizerM   s     r;   r?   zWindow.sizec   sB    $)!T\E!HeAh'''''r<   c                     | j         j        S )ztuple[int, int]: The current window position.

        This property can also be set to move the window::

            # Move window to 100, 100
            window.position = 100, 100
        r4   positionrH   s    r;   rV   zWindow.positioni   s     ((r<   c                     || j         _        d S rO   rU   rM   s     r;   rV   zWindow.positiont   s    $)!!!r<   c                     | j         S )zbool: Is the window visible?

        This property can also be set::

            # Hide or show the window
            window.visible = False
        )r*   rH   s    r;   visiblezWindow.visiblex   s     }r<   c                     || _         |r| j                                         d S | j                                         d S rO   )r*   r4   showhiderM   s     r;   rY   zWindow.visible   sG     	$!!#####!!#####r<   c                     | j         S )zbool: Should the mouse cursor be visible inside the window?

        This property can also be assigned to::

            # Disable cursor
            window.cursor = False
        )r/   rH   s    r;   r0   zWindow.cursor   s     |r<   c                 R    t           j                            |           || _        d S rO   )r   mouseset_visibler/   rM   s     r;   r0   zWindow.cursor   s#      '''r<   c                     | j         S )u  bool: If mouse exclusivity is enabled.

        When you enable mouse-exclusive mode, the mouse cursor is no longer
        available. It is not merely hidden – no amount of mouse movement
        will make it leave your application. This is for example useful
        when you don't want the mouse leaving the screen when rotating
        a 3d scene.

        This property can also be set::

            window.mouse_exclusivity = True
        )_mouse_exclusivityrH   s    r;   mouse_exclusivityzWindow.mouse_exclusivity   s     &&r<   c                 n    | j         rd| _        t          j                            |           || _        d S )NF)r/   r0   r   eventset_grabrb   rM   s     r;   rc   zWindow.mouse_exclusivity   s7    < 	 DKe$$$"'r<   c                     | j         S )zlstr: Window title.

        This property can also be set::

            window.title = "New Title"
        )r-   rH   s    r;   r.   zWindow.title   s     {r<   c                 R    t           j                            |           || _        d S rO   )r   r   set_captionr-   rM   s     r;   r.   zWindow.title   s#    ""5)))r<   c                     t           j                                         |                                  |                                  | xj        dz  c_        dS )zFSwap buffers, set viewport, trigger events and increment frame counterr
   N)r   r   flipr8   process_events_framesrH   s    r;   swap_bufferszWindow.swap_buffers   sN    !!###r<   	icon_pathc                     t           j                            |          }t           j                            |           d S rO   )r   imageloadr   set_icon)r9   ro   icons      r;   	_set_iconzWindow._set_icon   s3    |  ++%%%%%r<   widthheightc                     || _         || _        | j         | j        c| _        | _        |                                  t                                          | j        | j                   dS )zqResize callback

        Args:
            width: New window width
            height: New window height
        N)rD   rE   _buffer_width_buffer_heightr8   r   rS   )r9   rv   rw   r:   s      r;   rS   zWindow.resize   s_     26+t|/D/!!###t)4+>?????r<   c                 p    t                                                       |                                  dS )zClose the windowN)r   close_close_func)r9   r:   s    r;   r|   zWindow.close   s,    r<   c                     t           j                                        }|t           j        z  | j        _        |t           j        z  | j        _        |t           j        z  | j        _	        dS )zUpdate key modsN)
r   keyget_mods
KMOD_SHIFT
_modifiersshift	KMOD_CTRLctrlKMOD_ALTalt)r9   modss     r;   _handle_modszWindow._handle_mods   sP    z""$$ $v'8 8#f&66"V_4r<   c                 x	   t           j                                        D ]}|j        t           j        k    r|                                  | j        j        rE|                     |j	        d         |j	        d         |j
        d         |j
        d                    }|                     |j	        d         |j	        d         |j
        d         |j
        d                    |j        t           j        k    r{|                                  | j                            |j        d          }|C|                     |d           |                     |j	        d         |j	        d         |           R|j        t           j        k    r{|                                  | j                            |j        d          }|C|                     |d           |                     |j	        d         |j	        d         |           |j        t           j        t           j        fv r|                                  | j        $|j        | j        k    r|                                  |j        t           j        k    r$| j        |j        | j        k    r| j         | _        |j        t           j        k    rd| j        |j        <   n$|j        t           j        k    rd| j        |j        <   |                     |j        |j        | j                   |j        t           j        k    r0|                                  |                     |j                   /|j        t           j         k    rP|                                  | !                    tE          |j#                  tE          |j$                             |j        t           j%        k    r|                                  |j        t           j&        k    r.| '                    |j(        d         |j(        d                    |j        t           j)        k    rXtU          |dd          dk    rA|j+        rd| _,        | -                    d           Qd| _,        | -                    d           o|j        t           j.        k    r| /                    |           dS )zJHandle all queued events in pygame2 dispatching events to standard methodsr   r
   NTFstater   )0r   re   gettypeMOUSEMOTIONr   mouse_statesany_mouse_drag_event_funcposrel_mouse_position_event_funcMOUSEBUTTONDOWN_mouse_button_mapbutton!_handle_mouse_button_state_change_mouse_press_event_funcMOUSEBUTTONUP_mouse_release_event_funcKEYDOWNKEYUP	_exit_keyr   r|   _fs_keyr5   _key_pressed_map_key_event_funcr   	TEXTINPUT_unicode_char_entered_functext
MOUSEWHEEL_mouse_scroll_event_funcfloatxyQUITVIDEORESIZErS   r?   ACTIVEEVENTgetattrgainr*   _iconify_func	USEREVENT_on_generic_event_func)r9   re   r   s      r;   rl   zWindow.process_events   s@    \%%'' j	3 j	3EzV///!!###$( //	!	!	!	!	    33	!	!	!	!	    v555!!###/33EL$GG%::64HHH00	!	!   v333!!###/33EL$GG%::65III22	!	!   ===!!###>-%)t~2M2MJJLLL J&,..0	T\11*./&9DO://7;D)%)44Z6<//7<D)%)4$$UY
DOLLLLv///!!###//
;;;;v000!!###--eEGnneEGnnMMMMv{**

v111EJqM5:a=9999v111" 5'400A55z 1(,**51111(-**4000 v///++E222Uj	3 j	3r<   c                 ,    t          j                     dS )zGracefully close the windowN)r   quitrH   s    r;   destroyzWindow.destroyV  s    r<   )r=   N)"__name__
__module____qualname____doc__namer   keysr   r   r   r,   boolr6   rP   propertytupleintr?   setterrV   rY   r0   rc   strr.   rn   r   ru   rS   r|   r   rl   r   __classcell__)r:   s   @r;   r   r      s        
 DD  '$ '$ '$ '$ '$ '$ '$R
 
 
 
,T ,d , , , ,      )eCHo ) ) ) X) 
[(%S/ (d ( ( ( [(
 )%S/ ) ) ) X) _*eCHo *$ * * * _*     X ^$T $d $ $ $ ^$     X ]D T    ] '4 ' ' ' X' (t ( ( ( ( ( s    X \3 4    \   &4 &D & & & &@C @ @ @ @ @ @ @ @     
5 5 5 5m3 m3 m3 m3^       r<   r   )pathlibr   typingr   r   pygame._sdl2pygame.displaypygame.eventmoderngl_window.context.baser   $moderngl_window.context.pygame2.keysr   r   r   r<   r;   <module>r      s                             3 3 3 3 3 3 5 5 5 5 5 5K K K K KZ K K K K Kr<   