
    kj%                         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          Z G d de          Z G d d	ee          Z	dS )
    N)compute_fb_scale)BaseOpenGLRendererc                   \    e Zd Z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widthheightc                     | j         j        | j        _        t	          | j         j        | j         j                  | j        _        d S N)wndsizeiodisplay_sizer   buffer_sizedisplay_fb_scale)selfr   r   s      ]/home/agentuser/manim-venv/lib/python3.11/site-packages/moderngl_window/integrations/imgui.pyresizezModernglWindowMixin.resize
   s3    #x}#3DHM48CW#X#X       c                     | j         j        }||j        k    r'|| j        v rd| j        j        | j        |         <   d S d S || j        v rd| j        j        | j        |         <   d S d S )NTF)r   keysACTION_PRESSREVERSE_KEY_MAPr   	keys_down)r   keyaction	modifiersr   s        r   	key_eventzModernglWindowMixin.key_event   s    x}T&&&d***?C!$"6s";<<< +* d***?D!$"6s";<<< +*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   mouser1   r2   r3   r4   r   r$   r%   buttons       r   mouse_press_eventz%ModernglWindowMixin.mouse_press_event2        44Q::TX^((($%DGq!TX^***$%DGq!TX^)))$%DGq!!! *)r   r$   r%   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 )Nr   r   r/   r=   r?   s       r   mouse_release_eventz'ModernglWindowMixin.mouse_release_event>   rB   r   c                 p    t          j                    }|                    t          |                     d S r
   )imguiget_ioadd_input_characterord)r   charr   s      r   unicode_char_enteredz(ModernglWindowMixin.unicode_char_enteredJ   s-    \^^
s4yy)))))r   N)__name__
__module____qualname__r    r   r   r&   r,   r5   r;   rA   rD   rK    r   r   r   r   	   s        YC Y Y Y Y YE E E
 
 
; ; ;
& 
& 
&' ' '
& 
& 
&
&S 
&S 
&# 
& 
& 
& 
&* * * * *r   r   c                   j     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	 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_fbo_font_texture_vertex_buffer_index_buffer_vao	_texturesgetr   rS   
ValueErrorsuper__init__hasattrr   r   r   r   )r   argskwargs	__class__s      r   r^   zModernGLRenderer.__init__i   s   
	!"!	::e$$#'8SS48<<&**UBSBSx 	978884 	>DH 	>DK-....v%%#)::n#=#=DG    &%r   texturec                 $    || j         |j        <   dS )z,Make the imgui renderer aware of the textureNrZ   glor   rc   s     r   register_texturez!ModernGLRenderer.register_texture~   s    &-w{###r   c                      | j         |j        = dS )z*Remove the texture from the imgui rendererNre   rg   s     r   remove_texturezModernGLRenderer.remove_texture   s    N7;'''r   c                    | j         j                                        \  }}}| j        r3|                     | j                   | j                                         | j                            ||fd|          | _        |                     | j                   | j        j	        | j         j        _
        | j         j                                         d S )N   )data)r   fontsget_tex_data_as_rgba32rV   rj   releaserS   rc   rh   rf   
texture_idclear_tex_data)r   r   r   pixelss       r   refresh_font_texturez%ModernGLRenderer.refresh_font_texture   s     $ D D F Fvv 	) 2333&&(((!X--ufoqv-NNd0111#'#5#9 $$&&&&&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)rS   programVERTEX_SHADER_SRCFRAGMENT_SHADER_SRCrT   projMatvaluebufferrF   VERTEX_SIZErW   
INDEX_SIZErX   vertex_arrayrY   r   s    r   _create_device_objectsz'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   c                    | 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        _         |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#                  }|:tI          d%                    |j#        tM          | j!                                      |                    d           |j'        \  }}}}t          |          t          ||z
            t          ||z
            t          ||z
            f| j        _(        | j)        *                    t          j+        |j,        |           ||j,        z  }d | j        _(        d S )	Nr   r/   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_rectsrS   enable_onlymodernglBLENDFUNC_ADDblend_equation	SRC_ALPHAONE_MINUS_SRC_ALPHA
blend_funcrV   usecommands_listsctypesc_bytevtx_buffer_sizerF   r   idx_buffer_sizer   from_addressvtx_buffer_dataidx_buffer_datarW   writerX   commandsrZ   r[   rq   r\   formatlist	clip_rectscissorrY   render	TRIANGLES
elem_count)r   	draw_datar   display_widthdisplay_heightfb_width	fb_heightr   vtx_typeidx_typevtx_arridx_arridx_poscommandrc   r$   r%   zws                      r   r   zModernGLRenderer.render   s   W(*%~}r':1'==>>)<Q)??@@	q==INNF ->/!!
& 	#	"B$788X^,,,"*"3&0(2NN   !0 	. 	.H}x'??%BSSH}x'??%BRRH--h.FGGG--h.FGGG%%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   )	rV   rp   rW   rX   rY   rT   r   rn   rq   r   s    r   _invalidate_device_objectsz+ModernGLRenderer._invalidate_device_objects   s     	)&&((( 	*''))) 	)&&(((9 	 I: 	!J   #$ !r   )rL   rM   rN   r   r   r^   r   ry   rh   rj   rt   r   r   r   __classcell__rb   s   @r   rQ   rQ   O   s        	> > > > >*.(8 . . . .(h&6 ( ( ( (
' 
' 
'
 
 
 @  @  @ D" " " " " " "r   rQ   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   )	r]   r^   r   _init_key_mapsr   r   r   r"   r   )r   windowrb   s     r   r^   zModernglWindowRenderer.__init__   sd    V$$$#x}#'8#79M#M   r   c                 P   | j         j        }i |j        t          j        |j        t          j        |j        t          j        |j	        t          j
        |j        t          j        |j        t          j        |j        t          j        |j        t          j        |j        t          j        |j        t          j        |j        t          j        |j        t          j        |j        t          j        |j        t          j        |j        t          j         |j!        t          j"        |j#        t          j$        |j%        t          j&        |j'        t          j(        |j)        t          j*        i| _+        | j+        ,                                D ]}|| j-        j.        |<   d S r
   )/r   r   TABrF   KEY_TABLEFTKEY_LEFT_ARROWRIGHTKEY_RIGHT_ARROWUPKEY_UP_ARROWDOWNKEY_DOWN_ARROWPAGE_UPKEY_PAGE_UP	PAGE_DOWNKEY_PAGE_DOWNHOMEKEY_HOMEENDKEY_ENDDELETE
KEY_DELETESPACE	KEY_SPACE	BACKSPACEKEY_BACKSPACEENTER	KEY_ENTERESCAPE
KEY_ESCAPEAKEY_ACKEY_CVKEY_VXKEY_XYKEY_YZKEY_Zr   valuesr   key_map)r   r   r   s      r   r   z%ModernglWindowRenderer._init_key_maps   s   x} 
Hem 
Iu+ 
 J- 
 GU'	 

 Iu+ 
 L%+ 
 NE/ 
 Iu~ 
 Hem 
 K) 
 J 
 NE/ 
 J 
 K) 
 FEK 
  FEK! 
" FEK# 
$ FEKFEKFEK) 
  
. )0022 	+ 	+E%*DGOE""	+ 	+r   )rL   rM   rN   r^   r   r   r   s   @r   r   r      sL        N N N N N+ + + + + + +r   r   )
r   rF   r   imgui.integrationsr   imgui.integrations.baser   r   rQ   r   rO   r   r   <module>r      s       / / / / / / 6 6 6 6 6 6C* C* C* C* C* C* C* C*Lb" b" b" b" b") b" b" b"J$+ $+ $+ $+ $+-/B $+ $+ $+ $+ $+r   