
    kjR,                     z    d dl mZmZ 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
mZ d dlmZ  G d de          ZdS )	    )c_char_pc_int)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	e
d
dfdZd	e
d
dfdZd
eeef         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ed
df fdZd%dZd ed
dfd!Zd%d"Zd% fd#Zd%d$Z  xZ!S )&Windowz1
    Basic window implementation using SDL2.
    sdl2         )r   r   r   kwargsc                     t                      j        di | t          j        t          j                  dk    rt          d          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        | _        | j        dk    rYt          j                            t          j        d           t          j                            t          j        | j                   t          j        t          j        z  }| j        r|t          j        z  }n| j        r|t          j        z  }| j        s|t          j        z  }t          j        | j                                         t          j!        t          j!        | j"        | j#        |          | _$        | j$        s!t          dt          j%                              t          j&        | j$                  | _'        t          j        (                    | j)        rdnd           | *                                \  | _+        | _,        | -                                 | .                                 d S )Nr   zFailed to initialize sdl2r         zFailed to create window: )/super__init__r   SDL_InitSDL_INIT_VIDEO
ValueErrorvideoSDL_GL_SetAttributeSDL_GL_CONTEXT_MAJOR_VERSION
gl_versionSDL_GL_CONTEXT_MINOR_VERSIONSDL_GL_CONTEXT_PROFILE_MASKSDL_GL_CONTEXT_PROFILE_CORE&SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAGSDL_GL_DOUBLEBUFFERSDL_GL_DEPTH_SIZESDL_GL_STENCIL_SIZE_cursorcursorsamplesSDL_GL_MULTISAMPLEBUFFERSSDL_GL_MULTISAMPLESAMPLESSDL_WINDOW_OPENGLSDL_WINDOW_ALLOW_HIGHDPI
fullscreenSDL_WINDOW_FULLSCREEN_DESKTOP	resizableSDL_WINDOW_RESIZABLE_visibleSDL_WINDOW_HIDDENSDL_CreateWindowtitleencodeSDL_WINDOWPOS_UNDEFINEDwidthheight_windowSDL_GetErrorSDL_GL_CreateContext_contextSDL_GL_SetSwapIntervalvsync_get_drawable_size_buffer_width_buffer_heightinit_mgl_contextset_default_viewport)selfr   flags	__class__s      ^/home/agentuser/manim-venv/lib/python3.11/site-packages/moderngl_window/context/sdl2/window.pyr   zWindow.__init__   s   ""6"""=,--228999
&&t'H$/Z[J\]]]
&&t'H$/Z[J\]]]
&&,d.N	
 	
 	
 	
&&t'RTUVVV
&&t'?CCC
&&t'=rBBB
&&t'?CCCl<!J**4+I1MMMJ**4+I4<XXX&)FF? 	3T77EE~ 322} 	,T++E,J((JK
 
 | 	N79J9L9LMMM1$,??
))tz*@!!qAAA262I2I2K2K/D/!!#####    valuereturnNc                 V    t          j        | j        |rt           j        nd           d S )Nr   )r   SDL_SetWindowFullscreenr7   r,   rB   rG   s     rE   _set_fullscreenzWindow._set_fullscreenP   s5    $LL$<<1	
 	
 	
 	
 	
rF   c                 L    t           j                            |rdnd           d S )Nr   r   )r   r   r;   rK   s     rE   
_set_vsynczWindow._set_vsyncU   s'    
))u*;!!!<<<<<rF   c                     t                      }t                      }t          j                            | j        ||           |j        |j        fS N)r   r   r   SDL_GL_GetDrawableSizer7   rG   rB   xys      rE   r=   zWindow._get_drawable_sizeX   s?    GGGG
))$,1===wrF   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
        )_width_heightrB   s    rE   sizezWindow.size^   s     {DL((rF   c                     t          j        | j        |d         |d                    |                     |d         |d                    d S Nr   r   )r   SDL_SetWindowSizer7   resizerK   s     rE   rY   zWindow.sizei   sC    t|U1XuQx@@@E!HeAh'''''rF   c                     t          d          }t          d          }t          j        | j        ||           |j        |j        f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
        r   )r   r   SDL_GetWindowPositionr7   rG   rR   s      rE   positionzWindow.positiono   s@     !HH!HH"4<A666wrF   c                 T    t          j        | j        |d         |d                    d S r[   )r   SDL_SetWindowPositionr7   rK   s     rE   r`   zWindow.position}   s'    "4<q58DDDDDrF   c                     | j         S )zbool: Is the window visible?

        This property can also be set::

            # Hide or show the window
            window.visible = False
        )r/   rX   s    rE   visiblezWindow.visible   s     }rF   c                     || _         |rt          j        | j                   d S t          j        | j                   d S rP   )r/   r   SDL_ShowWindowr7   SDL_HideWindowrK   s     rE   rd   zWindow.visible   sC     	.----------rF   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$   rX   s    rE   r%   zWindow.cursor   s     |rF   c                 l    t          j        |rt           j        nt           j                   || _        d S rP   )r   SDL_ShowCursor
SDL_ENABLESDL_DISABLEr$   rK   s     rE   r%   zWindow.cursor   s,    uJDOO$:JKKKrF   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_exclusivityrX   s    rE   mouse_exclusivityzWindow.mouse_exclusivity   s     &&rF   c                     |du rt          j        t           j                   nt          j        t           j                   || _        d S )NT)r   SDL_SetRelativeMouseModeSDL_TRUE	SDL_FALSErn   rK   s     rE   ro   zWindow.mouse_exclusivity   sB    D==)$-8888)$.999"'rF   c                     | j         S )zlstr: Window title.

        This property can also be set::

            window.title = "New Title"
        )_titlerX   s    rE   r2   zWindow.title   s     {rF   c                     t          |                                          }t          j        | j        |           || _        d S rP   )r   r3   r   SDL_SetWindowTitler7   ru   )rB   rG   datas      rE   r2   zWindow.title   s7    ''d333rF   c                     t          j        | j                   |                                  |                                  | xj        dz  c_        dS )zFSwap buffers, set viewport, trigger events and increment frame counterr   N)r   SDL_GL_SwapWindowr7   rA   process_events_framesrX   s    rE   swap_bufferszWindow.swap_buffers   sM    t|,,,!!###rF   r5   r6   c                     || _         || _        |                                 \  | _        | _        |                                  t                                          | j        | j                   dS )zrResize callback.

        Args:
            width: New window width
            height: New window height
        N)rV   rW   r=   r>   r?   rA   r   r]   )rB   r5   r6   rD   s      rE   r]   zWindow.resize   se     262I2I2K2K/D/!!###t)4+>?????rF   c                     t          j                    }|t           j        z  | j        _        |t           j        z  | j        _        |t           j        z  | j        _        dS )zUpdate key modsN)	r   SDL_GetModState
KMOD_SHIFT
_modifiersshift	KMOD_CTRLctrlKMOD_ALTalt)rB   modss     rE   _handle_modszWindow._handle_mods   sI    #%% $t 6#dn4"T]2rF   	icon_pathc                 t    t          j        | j        t           j                            |                     d S rP   )r   SDL_SetWindowIconr7   ext
load_image)rB   r   s     rE   	_set_iconzWindow._set_icon   s-    t|TX-@-@-K-KLLLLLrF   c                 	   t           j                                        D ]}|j        t           j        k    r| j        j        rA|                     |j        j	        |j        j
        |j        j        |j        j                   e|                     |j        j	        |j        j
        |j        j        |j        j                   |j        t           j        k    r~|                                  | j                            |j        j        d          }|A|                     |d           |                     |j        j	        |j        j
        |           9|j        t           j        k    r~|                                  | j                            |j        j        d          }|A|                     |d           |                     |j        j	        |j        j
        |           |j        t           j        t           j        fv r|                                  | j        .|j        j        j        | j        k    r|                                  | j        <|j        j        j        | j        k    r"|j        t           j        k    r| j         | _        |j        t           j        k    rd| j         |j        j        j        <   n.|j        t           j        k    rd| j         |j        j        j        <   | !                    |j        j        j        |j        | j"                   |j        t           j#        k    r3| $                    |j%        j%        &                                           O|j        t           j'        k    rZ|                                  | (                    tS          |j*        j	                  tS          |j*        j
                             |j        t           j+        k    r|                                  |j        t           j,        k    r|j-        j.        t           j/        t           j0        fv r,| 1                    |j-        j2        |j-        j3                   N|j-        j.        t           j4        k    rd| _5        | 6                    d           |j-        j.        t           j7        k    rd| _5        | 6                    d           dS )zGHandle all queued events in sdl2 dispatching events to standard methodsNTF)8r   r   
get_eventstypeSDL_MOUSEMOTIONmouse_statesany_mouse_drag_event_funcmotionrS   rT   xrelyrel_mouse_position_event_funcSDL_MOUSEBUTTONDOWNr   _mouse_button_mapgetbutton!_handle_mouse_button_state_change_mouse_press_event_funcSDL_MOUSEBUTTONUP_mouse_release_event_funcSDL_KEYDOWN	SDL_KEYUP	_exit_keykeykeysymsymclose_fs_keyr+   _key_pressed_map_key_event_funcr   SDL_TEXTINPUT_unicode_char_entered_functextdecodeSDL_MOUSEWHEEL_mouse_scroll_event_funcfloatwheelSDL_QUITSDL_WINDOWEVENTwindoweventSDL_WINDOWEVENT_RESIZEDSDL_WINDOWEVENT_SIZE_CHANGEDr]   data1data2SDL_WINDOWEVENT_MINIMIZEDr/   _iconify_funcSDL_WINDOWEVENT_RESTORED)rB   r   r   s      rE   r{   zWindow.process_events   s2   X((** P	. P	.EzT111$( //))	    33))	    t777!!###/33EL4GNN%::64HHH00   t555!!###/33EL4GNN%::65III22    0$.AAA!!###>-%)2B2F$.2X2XJJLLL L,	(,<<
d&666*./&9DO:!111BFD)%)*:*>??Z4>11BGD)%)*:*>?$$UY%5%95:tWWWWt111//
0F0F0H0HIIIIt222!!###--eEKM.B.BE%+-DXDXYYYYt},,

t333<%05*   KK 2EL4FGGGG\'4+III$)DM&&t,,,,\'4+HHH$(DM&&u---aP	. P	.rF   c                 p    t                                                       |                                  dS )zClose the windowN)r   r   _close_func)rB   rD   s    rE   r   zWindow.close@  s,    rF   c                     t          j        | j                   t          j        | j                   t          j                     dS )zGracefully close the windowN)r   SDL_GL_DeleteContextr:   SDL_DestroyWindowr7   SDL_QuitrX   s    rE   destroyzWindow.destroyE  s7    !$-000t|,,,rF   )rH   N)"__name__
__module____qualname____doc__namer   keysr   r   r   boolrL   rN   tupleintr=   propertyrY   setterr`   rd   r%   ro   strr2   r}   r]   r   r   r   r{   r   r   __classcell__)rD   s   @rE   r
   r
      s        
 DD  1$ 1$ 1$ 1$ 1$ 1$ 1$f
T 
d 
 
 
 

= = = = = = E#s(O         )eCHo ) ) ) X) 
[(%S/ (d ( ( ( [(
  %S/       X  _EeCHo E$ E E E _E     X ^.T .d . . . ^.     X ]D T    ] '4 ' ' ' X' (t ( ( ( ( ( s    X \3 4    \
   @C @ @ @ @ @ @ @ @3 3 3 3M4 MD M M M MR. R. R. R.h     
       rF   r
   )ctypesr   r   pathlibr   typingr   r   sdl2.ext
sdl2.videomoderngl_window.context.baser   !moderngl_window.context.sdl2.keysr   r
   r   rF   rE   <module>r      s    " " " " " " " "                   3 3 3 3 3 3 2 2 2 2 2 2| | | | |Z | | | | |rF   