
    kjC(                         d dl Z d dlZd dlmZ d dlmZ  G d d          Z G d de          Z G d d	e          Z	 G d
 de	e          Z
dS )    N)imgui)compute_fb_scalec                   r    e Zd ZU ej        ed<   dedefdZd Zd Z	d Z
d Zd	 Zd
 ZdededefdZd ZdS )ModernglWindowMixiniowidthheightc                     | j         j        | j        _        t	          | j         j        | j         j                  | j        _        d S N)wndsizer   display_sizer   buffer_sizedisplay_framebuffer_scale)selfr   r	   s      d/home/agentuser/manim-venv/lib/python3.11/site-packages/moderngl_window/integrations/imgui_bundle.pyresizezModernglWindowMixin.resize   s3    #x},<TX]DHL`,a,a)))    c                     | j         j        }|| j        v r4||j        k    }| j                            | j        |         |           d S d S )N)down)r   keysREVERSE_KEYMAPACTION_PRESSr   add_key_event)r   keyaction	modifiersr   r   s         r   	key_eventzModernglWindowMixin.key_event   sW    x}$%%%T..DG!!$"5c":!FFFFF &%r   c                     t          || j        j        | j        j        | j        j        z  z
  dz  z
            t          || j        j        | j        j        | j        j        z  z
  dz  z
            fS )z:Make sure mouse coordinates are correct with black borders   )intr   r   viewport_widthpixel_ratior	   viewport_height)r   xys      r   _mouse_pos_viewportz'ModernglWindowMixin._mouse_pos_viewport   sj     TX^dh&=@T&TTXYYYZZTX_tx'?$(BV'VVZ[[[\\
 	
r   c                 F    |                      ||          | j        _        d S r   )r'   r   	mouse_posr   r%   r&   dxdys        r   mouse_position_eventz(ModernglWindowMixin.mouse_position_event   s"     44Q::r   c                 
   |                      ||          | j        _        | j        j        j        rd| j        j        d<   | j        j        j        rd| j        j        d<   | j        j        j        rd| j        j        d<   d S d S N   r   r    )	r'   r   r)   r   mouse_statesleft
mouse_downmiddlerightr*   s        r   mouse_drag_eventz$ModernglWindowMixin.mouse_drag_event    s     44Q::8 % 	&$%DGq!8 ' 	&$%DGq!8 & 	&$%DGq!!!	& 	&r   c                 6    || j         _        || j         _        d S r   )r   mouse_wheel_hmouse_wheel)r   x_offsety_offsets      r   mouse_scroll_eventz&ModernglWindowMixin.mouse_scroll_event,   s     (&r   c                 "   |                      ||          | j        _        || j        j        j        k    rd| j        j        d<   || j        j        j        k    rd| j        j        d<   || j        j        j        k    rd| j        j        d<   d S d S r/   	r'   r   r)   r   mouser2   r3   r4   r5   r   r%   r&   buttons       r   mouse_press_eventz%ModernglWindowMixin.mouse_press_event0        44Q::TX^((($%DGq!TX^***$%DGq!TX^)))$%DGq!!! *)r   r%   r&   rA   c                 "   |                      ||          | j        _        || j        j        j        k    rd| j        j        d<   || j        j        j        k    rd| j        j        d<   || j        j        j        k    rd| j        j        d<   d S d S )Nr   r    r0   r>   r@   s       r   mouse_release_eventz'ModernglWindowMixin.mouse_release_event<   rC   r   c                 p    t          j                    }|                    t          |                     d S r   )r   get_ioadd_input_characterord)r   charr   s      r   unicode_char_enteredz(ModernglWindowMixin.unicode_char_enteredH   s-    \^^
s4yy)))))r   N)__name__
__module____qualname__r   IO__annotations__r!   r   r   r'   r-   r6   r<   rB   rE   rK    r   r   r   r      s         LLLbC b b b b bG G G
 
 
; ; ;
& 
& 
&' ' '
& 
& 
&
&S 
&S 
&# 
& 
& 
& 
&* * * * *r   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )BaseOpenGLRendererc                     t          j                    st          d          t          j                    | _        d | _        d| j        _        |                                  |                                  d S )Nz\No valid ImGui context. Use imgui.create_context() first and/or imgui.set_current_context().g?)	r   get_current_contextRuntimeErrorrG   r   _font_texture
delta_time_create_device_objectsrefresh_font_texturer   s    r   __init__zBaseOpenGLRenderer.__init__N   su    (** 	/   ,..!'##%%%!!#####r   c                     t           r   NotImplementedError)r   	draw_datas     r   renderzBaseOpenGLRenderer.render]       !!r   c                     t           r   r^   r[   s    r   rZ   z'BaseOpenGLRenderer.refresh_font_texture`   rb   r   c                     t           r   r^   r[   s    r   rY   z)BaseOpenGLRenderer._create_device_objectsc   rb   r   c                     t           r   r^   r[   s    r   _invalidate_device_objectsz-BaseOpenGLRenderer._invalidate_device_objectsf   rb   r   c                 .    |                                   d S r   )rf   r[   s    r   shutdownzBaseOpenGLRenderer.shutdowni   s    '')))))r   N)	rL   rM   rN   r\   ra   rZ   rY   rf   rh   rQ   r   r   rS   rS   M   sn        $ $ $" " "" " "" " "" " "* * * * *r   rS   c                   z     e Zd ZdZdZ fdZdej        fdZdej        fdZ	d Z
d Zd	ej        fd
Zd Z xZS )ModernGLRendereraK  
        #version 330
        uniform mat4 ProjMtx;
        in vec2 Position;
        in vec2 UV;
        in vec4 Color;
        out vec2 Frag_UV;
        out vec4 Frag_Color;
        void main() {
            Frag_UV = UV;
            Frag_Color = Color;
            gl_Position = ProjMtx * vec4(Position.xy, 0, 1);
        }
    z
        #version 330
        uniform sampler2D Texture;
        in vec2 Frag_UV;
        in vec4 Frag_Color;
        out vec4 Out_Color;
        void main() {
            Out_Color = (Frag_Color * texture(Texture, Frag_UV.st));
        }
    c                     d | _         d | _        d | _        d | _        d | _        d | _        i | _        |                    d          | _        | j        r| j        j	        r| j        j	        n|                    d          | _	        | j	        st          d          t                                                       t          | d          r| j        r | j        | j        j          d S d|v r!|                    d          | j        _        d S d S )Nr   ctxzMissing moderngl contextr   )_prog_fborW   _vertex_buffer_index_buffer_vao	_texturesgetr   rl   rV   superr\   hasattrr   r   r   r   )r   argskwargs	__class__s      r   r\   zModernGLRenderer.__init__   s   
	!"!	::e$$ HLLDHLL6::e;L;L 	 x 	;9:::4 	>DH 	>DK-....v%%#)::n#=#=DG    &%r   texturec                 $    || j         |j        <   dS )z,Make the imgui renderer aware of the textureNrr   glor   ry   s     r   register_texturez!ModernGLRenderer.register_texture   s    &-w{###r   c                      | j         |j        = dS )z*Remove the texture from the imgui rendererNr{   r}   s     r   remove_texturezModernGLRenderer.remove_texture   s    N7;'''r   c                    | j         j                                        }|j        d         }|j        d         }|j        }| j        r3|                     | j                   | j                                         | j        	                    ||fd|          | _        | 
                    | j                   | j        j        | j         j        _        | j         j                                         d S )Nr0   r      )data)r   fontsget_tex_data_as_rgba32shaper   rW   r   releaserl   ry   r~   r|   tex_idclear_tex_data)r   font_matrixr   r	   pixelss        r   rZ   z%ModernGLRenderer.refresh_font_texture   s    gm::<<!!$"1%! 	) 2333&&(((!X--ufoqv-NNd0111#15$$&&&&&r   c                    | j                             | j        | j                  | _        | j        d         | _        d| j        d         _        | j                             t          j	        dz            | _
        | j                             t          j        dz            | _        | j                             | j        | j
        ddd	d
fg| j        t          j                  | _        d S )N)vertex_shaderfragment_shaderProjMtxr   Texturei   )reservez	2f 2f 4f1PositionUVColor)index_bufferindex_element_size)rl   programVERTEX_SHADER_SRCFRAGMENT_SHADER_SRCrm   projMatvaluebufferr   VERTEX_SIZEro   
INDEX_SIZErp   vertex_arrayrq   r[   s    r   rY   z'ModernGLRenderer._create_device_objects   s    X%%0 4 & 
 

 z),&'
9#"hooe6G%6OoPP!X__U5E5M_NNH))J!;
D'JK+$/	 * 
 
			r   r`   c                 b   | j         }|j        \  }}t          ||j        d         z            }t          ||j        d         z            }|dk    s|dk    rd S d|z  ddddd| z  ddddddddddf| j        _        |                    t          j        |j                    | j	        
                    t          j                   t          j        | j	        _        t          j        t          j        f| j	        _        | j                                         |j        D ]}t*          j        |j                                        z  t          j        z  }t*          j        |j                                        z  t          j        z  }	|                    |j                                                  }
|	                    |j                                                  }| j                            |
           | j                             |           d}|j!        D ]}| j"        #                    |j$                  }|:tK          d&                    |j$        tO          | j"                                      |                    d           |j(        \  }}}}t          |          t          ||z
            t          ||z
            t          ||z
            f| j	        _)        | j*        +                    t          j,        |j-        |           ||j-        z  }d | j	        _)        d S )	Nr   r0   g       @g        g      g      ?zeTexture {} is not registered. Please add to renderer using register_texture(..). Current textures: {})verticesfirst).r   r   r!   r   r   r   scale_clip_rectsr   ImVec2rl   enable_onlymodernglBLENDFUNC_ADDblend_equation	SRC_ALPHAONE_MINUS_SRC_ALPHA
blend_funcrW   use	cmd_listsctypesc_byte
vtx_bufferr   r   
idx_bufferr   from_addressdata_addressro   writerp   
cmd_bufferrr   rs   
texture_id
ValueErrorformatlist	clip_rectscissorrq   ra   	TRIANGLES
elem_count)r   r`   r   display_widthdisplay_heightfb_width	fb_heightcommandsvtx_typeidx_typevtx_arridx_arridx_poscommandry   r%   r&   zws                      r   ra   zModernGLRenderer.render   s   W(*%~}r'CA'FFGG)Ea)HHII	q==INNF ->/!!
& 	""5<1M#NOOOX^,,,"*"3&0(2NN   !+ 	. 	.H}x':'?'?'A'AAEDUUH}x':'?'?'A'AAEDTTH--h.A.N.N.P.PQQG--h.A.N.N.P.PQQG%%g...$$W---G#. . ..,,W-?@@?$3396':LdSWSaNbNb3c3c	   A$.
1a#&q663y1}+=+=s1q5zz3qSTu::#U 	  !3g>PX_ ```7--!.$  r   c                 v   | j         r| j                                          | j        r| j                                         | j        r| j                                         | j        r| j                                         | j        r| j                                         d| j        j        _        d | _         d S )Nr   )	rW   r   ro   rp   rq   rm   r   r   r   r[   s    r   rf   z+ModernGLRenderer._invalidate_device_objects  s     	)&&((( 	*''))) 	)&&(((9 	 I: 	!J    !r   )rL   rM   rN   r   r   r\   r   r   r~   r   rZ   rY   r   
ImDrawDatara   rf   __classcell__rx   s   @r   rj   rj   m   s        	> > > > >..(8 . . . .(h&6 ( ( ( (' ' '
 
 
 @  0 @  @  @  @ D" " " " " " "r   rj   c                   $     e Zd Z fdZd Z xZS )ModernglWindowRendererc                     t                                          |           || _        |                                  | j        j        | j        _        | j        j        | j        j        f| j        _        d S )N)r   )	rt   r\   r   _init_key_mapsr   r   r   r#   r   )r   windowrx   s     r   r\   zModernglWindowRenderer.__init__  sd    V$$$#x},0H,@$(BV,V)))r   c                    | j         j        }|j        t          j        j        |j        t          j        j        |j        t          j        j	        |j
        t          j        j        |j        t          j        j        |j        t          j        j        |j        t          j        j        |j        t          j        j        |j        t          j        j        |j        t          j        j        |j        t          j        j        |j        t          j        j        |j        t          j        j        |j        t          j        j        i| _         d S r   )!r   r   TABr   KeytabLEFT
left_arrowRIGHTright_arrowUPup_arrowDOWN
down_arrowPAGE_UPpage_up	PAGE_DOWN	page_downHOMEhomeENDendDELETEdeleteSPACEspace	BACKSPACE	backspaceENTERenterESCAPEescaper   )r   r   s     r   r   z%ModernglWindowRenderer._init_key_maps   s    x} HeimIuy+J	-GUY'Iuy+L%)+NEI/Iuy~HeimK)J	NEI/J	K)
r   )rL   rM   rN   r\   r   r   r   s   @r   r   r     sL        W W W W W
 
 
 
 
 
 
r   r   )r   r   imgui_bundler   imgui_bundle.python_backendsr   r   objectrS   rj   r   rQ   r   r   <module>r      s           9 9 9 9 9 9B* B* B* B* B* B* B* B*J* * * * * * * *@g" g" g" g" g") g" g" g"T
 
 
 
 
-/B 
 
 
 
 
r   