o
    Zh                  
   @   sX  d Z ddlZddlZddlZddlmZ ddlmZ ddl	m
Z dZejejB ejB ZdZejdkrUzejdejdg ddd	ZW n eyQ Z zed
edZ[ww eZnejr\ejZned
dd Zdd Zdd Zdd Zeej ee eej re ej!ej" e#d e$dd e%  e&e e'e e(e dd Z)dS )z8GLUT Input hook for interactive use with prompt_toolkit
    N)default_timer<   darwinglutCheckLoopzglutCheckLoop(  ) -> None )ZdllZ
resultTypeZargTypesdocZargNamesz[Your glut implementation does not allow interactive sessions. Consider installing freeglut.c                   C      d S Nr   r   r   r   Z/var/www/html/lang_env/lib/python3.10/site-packages/IPython/terminal/pt_inputhooks/glut.pyglut_display<      r   c                   C   r   r	   r   r   r   r   r
   	glut_idle@   r   r   c                   C   s   t   t  d S r	   )glutglutHideWindowglutMainLoopEventr   r   r   r
   
glut_closeD   s   
r   c                 C   s   t  t jt j td d S )Nz
KeyboardInterrupt)signalSIGINTdefault_int_handlerprint)signumframer   r   r
   glut_int_handlerI   s   r   s   ipython   c                 C   s   t  t jt zCt }t dkrtd t  W dS |  sHt  t | }|dkr2t	
d n|dkr<t	
d nt	
d |  r W dS W dS  tyT   Y dS w )	aE  Run the pyglet event loop by processing pending events only.

    This keeps processing pending events until stdin is ready.  After
    processing all pending events, a call to time.sleep is inserted.  This is
    needed, otherwise, CPU usage is at 100%.  This sleep time should be tuned
    though for best performance.
    r   r   g      $@g      ?g?g?gMbP?N)r   r   r   clockr   ZglutGetWindowZglutSetWindowr   Zinput_is_readytimesleepKeyboardInterrupt)contexttZ	used_timer   r   r
   	inputhook^   s&   


r    )*__doc__sysr   r   ZOpenGL.GLUTZGLUTr   ZOpenGL.platformplatformZtimeitr   r   Zglut_fpsZGLUT_DOUBLEZ	GLUT_RGBAZ
GLUT_DEPTHZglut_display_moder   ZcreateBaseFunctionr   AttributeErroreRuntimeErrorZHAVE_FREEGLUTr   r   r   r   ZglutInitargvZglutInitDisplayModeboolZglutSetOptionZGLUT_ACTION_ON_WINDOW_CLOSEZ GLUT_ACTION_GLUTMAINLOOP_RETURNSZglutCreateWindowZglutReshapeWindowr   ZglutWMCloseFuncZglutDisplayFuncZglutIdleFuncr    r   r   r   r
   <module>   sj    







