Ë
    ¯·gà'  ã                   ó~   — d Z ddlZddlZddlZddlmZ ddlZ G d„ dej                  «      Zd„ Z	e
dk(  r e	«        yy)aj  
Description:

  Provides a pyGtk vtkRenderWindowInteractor widget.  This embeds a
  vtkRenderWindow inside a GTK widget and uses the
  vtkGenericRenderWindowInteractor for the event handling.  This is
  based on vtkTkRenderWindow.py.

  The class uses the gtkgl.GtkGLArea widget (gtkglarea).  This avoids
  a lot of problems with flicker.

  There is a working example at the bottom.

Created by Prabhu Ramachandran, April 2002.

Bugs:

  (*) There is a focus related problem.  Tkinter has a focus object
  that handles focus events.  I don't know of an equivalent object
  under GTK.  So, when an 'enter_notify_event' is received on the
  GtkVTKRenderWindow I grab the focus but I don't know what to do when
  I get a 'leave_notify_event'.

  (*) Will not work under Win32 because it uses the XID of a window in
  OnRealize.  Suggestions to fix this will be appreciated.

é    N)Ú vtkGenericRenderWindowInteractorc                   ó’   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zdd„Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚGtkVTKRenderWindowInteractora   Embeds a vtkRenderWindow into a pyGTK widget and uses
    vtkGenericRenderWindowInteractor for the event handling.  This
    class embeds the RenderWindow correctly.  A __getattr__ hook is
    provided that makes the class behave like a
    vtkGenericRenderWindowInteractor.c                 ó¦  — t        |«      }t        j                  t        j                  f}|j	                  d| «       |j	                  d|«       t        t        j                  j                  |«       t        «       | _	        d| _
        d| _        t        «       | _        | j                  j                  | j                  «       | j                  j                  d| j                   «       | j                  j                  d| j"                  «       | j%                  «        | j'                  t(        j*                  «       | j-                  dd«       y )Nr   é   ÚCreateTimerEventÚDestroyTimerEventi,  )ÚlistÚgtkglÚRGBAÚDOUBLEBUFFERÚinsertÚapplyÚ	GtkGLAreaÚ__init__ÚvtkRenderWindowÚ_RenderWindowÚ&_GtkVTKRenderWindowInteractor__CreatedÚ_ActiveButtonr   Ú_IrenÚSetRenderWindowÚAddObserverÚCreateTimerÚDestroyTimerÚConnectSignalsÚ	set_flagsÚgtkÚ	CAN_FOCUSÚ	set_usize)ÚselfÚargsÚlÚattrs       úKlib/python3.12/site-packages/vtkmodules/gtk/GtkVTKRenderWindowInteractor.pyr   z%GtkVTKRenderWindowInteractor.__init__*   sï   € Ü�‹JˆÜ—
‘
œE×.Ñ.Ð/ˆØ	�‰��DÔØ	�‰��DÔÜŒe�o‰o×&Ñ&¨Ô*Ü,Ó.ˆÔð ˆŒØˆÔä5Ó7ˆŒ
Ø�
‰
×"Ñ" 4×#5Ñ#5Ô6à�
‰
×ÑÐ1°4×3CÑ3CÔDØ�
‰
×ÑÐ2°D×4EÑ4EÔFØ×ÑÔð 	�‰”s—}‘}Ô%à�‰�s˜CÕ ó    c                 óê   — t         j                  j                  | ||«       | j                  j	                  ||«       | j
                  j	                  ||«       | j
                  j                  «        y ©N)r   r   r   r   ÚSetSizer   ÚConfigureEvent)r    ÚwÚhs      r$   r   z&GtkVTKRenderWindowInteractor.set_usizeB   sR   € Ü�‰×!Ñ! $¨¨1Ô-Ø×Ñ×"Ñ" 1 aÔ(Ø�
‰
×Ñ˜1˜aÔ Ø�
‰
×!Ñ!Õ#r%   c                 ó`  — | j                  d| j                  «       | j                  d| j                  «       | j                  d| j                  «       | j                  d| j                  «       | j                  d| j
                  «       | j                  d| j                  «       | j                  d| j                  «       | j                  d| j                  «       | j                  d	| j                  «       | j                  d
| j                  «       | j                  t        j                  t        j                  z  t        j                  z  t        j                   z  t        j"                  z  t        j$                  z  t        j&                  z  t        j(                  z  «       y )NÚrealizeÚexpose_eventÚconfigure_eventÚbutton_press_eventÚbutton_release_eventÚmotion_notify_eventÚenter_notify_eventÚleave_notify_eventÚkey_press_eventÚdelete_event)ÚconnectÚ	OnRealizeÚOnExposeÚOnConfigureÚOnButtonDownÚ
OnButtonUpÚOnMouseMoveÚOnEnterÚOnLeaveÚ
OnKeyPressÚ	OnDestroyÚ
add_eventsÚGDKÚEXPOSURE_MASKÚBUTTON_PRESS_MASKÚBUTTON_RELEASE_MASKÚKEY_PRESS_MASKÚPOINTER_MOTION_MASKÚPOINTER_MOTION_HINT_MASKÚENTER_NOTIFY_MASKÚLEAVE_NOTIFY_MASK©r    s    r$   r   z+GtkVTKRenderWindowInteractor.ConnectSignalsH   s@  € Ø�‰�Y §¡Ô/Ø�‰�^ T§]¡]Ô3Ø�‰Ð&¨×(8Ñ(8Ô9Ø�‰Ð)¨4×+<Ñ+<Ô=Ø�‰Ð+¨T¯_©_Ô=Ø�‰Ð*¨D×,<Ñ,<Ô=Ø�‰Ð)¨4¯<©<Ô8Ø�‰Ð)¨4¯<©<Ô8Ø�‰Ð&¨¯©Ô8Ø�‰�^ T§^¡^Ô4Ø�‰œ×)Ñ)¬3×+@Ñ+@Ñ@Ü×/Ñ/ñ0ä×*Ñ*ñ+ô ×/Ñ/ñ0ô ×4Ñ4ñ	5ô
 ×-Ñ-ñ.ô
 14×0EÑ0EñFõ 	Gr%   c                 óÌ   — |dk(  r| j                   fd„S t        | j                   |«      rt        | j                   |«      S t        | j                  j
                  dz   |z   «      ‚)zGMakes the object behave like a
        vtkGenericRenderWindowInteractorÚ__vtk__c                 ó   — | S r'   © )Úts    r$   Ú<lambda>z:GtkVTKRenderWindowInteractor.__getattr__.<locals>.<lambda>^   s   € ©r%   z has no attribute named )r   ÚhasattrÚgetattrÚAttributeErrorÚ	__class__Ú__name__)r    r#   s     r$   Ú__getattr__z(GtkVTKRenderWindowInteractor.__getattr__Z   sa   € ð �9ÒØ ŸJ™JÒ)Ð)Ü�T—Z‘Z Ô&Ü˜4Ÿ:™: tÓ,Ð,ä  §¡×!8Ñ!8Ø,ñ"-Ø/3ñ"4ó 5ð 5r%   c                 óX   — t        j                  d| j                  j                  «       y )Né
   )r   Útimeout_addr   Ú
TimerEvent©r    ÚobjÚevents      r$   r   z(GtkVTKRenderWindowInteractor.CreateTimere   s   € Ü�‰˜˜DŸJ™J×1Ñ1Õ2r%   c                  ó   — y)z;The timer is a one shot timer so will expire automatically.r   rP   r]   s      r$   r   z)GtkVTKRenderWindowInteractor.DestroyTimerh   s   € àr%   c                 ó   — | j                   S r'   )r   rL   s    r$   ÚGetRenderWindowz,GtkVTKRenderWindowInteractor.GetRenderWindowl   s   € Ø×!Ñ!Ð!r%   c                 óR   — | j                   r| j                  j                  «        y y r'   )r   r   ÚRenderrL   s    r$   rd   z#GtkVTKRenderWindowInteractor.Rendero   s    € Ø�>Š>Ø×Ñ×%Ñ%Õ'ð r%   c                 ó  — | j                   dk(  ro| j                  «        t        | j                  «       j                  «      }| j
                  j                  |«       | j                  j                  «        d| _         t        j                  S ©Nr   r   )r   r-   ÚstrÚ
get_windowÚxidr   ÚSetWindowInfor   Ú
Initializer   ÚTRUE)r    r!   Úwin_ids      r$   r8   z&GtkVTKRenderWindowInteractor.OnRealizes   sb   € Ø�>‰>˜QÒà�L‰LŒNÜ˜Ÿ™Ó*×.Ñ.Ó/ˆFØ×Ñ×,Ñ,¨VÔ4Ø�J‰J×!Ñ!Ô#ØˆDŒNÜ�x‰xˆr%   Nc                 ó2  — | j                   j                  «       }|j                  |d   k7  s|j                  |d   k7  rJ| j                  j                  |j                  |j                  «       | j                  j                  «        t        j                  S rf   )	r   ÚGetSizeÚwidthÚheightr   r(   r)   r   rl   )r    Úwidr_   Úszs       r$   r:   z(GtkVTKRenderWindowInteractor.OnConfigure}   sj   € Ø×Ñ×'Ñ'Ó)ˆØ�K‰K˜2˜a™5Ò  e§l¡l°b¸±eÒ&;Ø�J‰J×Ñ˜uŸ{™{¨E¯L©LÔ9Ø�J‰J×%Ñ%Ô'Ü�x‰xˆr%   c                 óB   — | j                  «        t        j                  S r'   )rd   r   rl   )r    r!   s     r$   r9   z%GtkVTKRenderWindowInteractor.OnExpose„   s   € Ø�‰ŒÜ�x‰xˆr%   c                 óf   — | j                  «        | `| j                  «        t        j                  S r'   )Úhider   Údestroyr   rl   )r    r_   s     r$   rA   z&GtkVTKRenderWindowInteractor.OnDestroyˆ   s#   € Ø�	‰	ŒØÐØ�‰ŒÜ�x‰xˆr%   c                 óÔ   — d\  }}|j                   t        j                  z  t        j                  k(  rd}|j                   t        j                  z  t        j                  k(  rd}||fS )N)r   r   r   )ÚstaterC   ÚCONTROL_MASKÚ
SHIFT_MASK)r    r_   ÚctrlÚshifts       r$   Ú_GetCtrlShiftz*GtkVTKRenderWindowInteractor._GetCtrlShiftŽ   sU   € Ø‰ˆˆeØ�[‰[œ3×+Ñ+Ñ+´×0@Ñ0@Ò@ØˆDØ�[‰[œ3Ÿ>™>Ñ)¬c¯n©nÒ<ØˆEØ�Uˆ{Ðr%   c           	      óü  — | j                  «       }| j                  |«      \  }}| j                  j                  |d   |d   ||t	        d«      dd«       |j
                  }|dk(  r*| j                  j                  «        t        j                  S |dk(  r*| j                  j                  «        t        j                  S |dk(  r*| j                  j                  «        t        j                  S t        j                  S )zMouse button pressed.r   r   Né   é   )Úget_pointerr~   r   ÚSetEventInformationFlipYÚchrÚbuttonÚRightButtonPressEventr   rl   ÚLeftButtonPressEventÚMiddleButtonPressEventÚFALSE©r    rr   r_   Úmr|   r}   r…   s          r$   r;   z)GtkVTKRenderWindowInteractor.OnButtonDown–   sÄ   € à×ÑÓˆØ×(Ñ(¨Ó/‰ˆˆeØ�
‰
×+Ñ+¨A¨a©D°!°A±$¸¸eÜ,/°«F°A°tô	=à—‘ˆØ�QŠ;Ø�J‰J×,Ñ,Ô.Ü—8‘8ˆOØ�qŠ[Ø�J‰J×+Ñ+Ô-Ü—8‘8ˆOØ�qŠ[Ø�J‰J×-Ñ-Ô/Ü—8‘8ˆOä—9‘9Ðr%   c           	      óü  — | j                  «       }| j                  |«      \  }}| j                  j                  |d   |d   ||t	        d«      dd«       |j
                  }|dk(  r*| j                  j                  «        t        j                  S |dk(  r*| j                  j                  «        t        j                  S |dk(  r*| j                  j                  «        t        j                  S t        j                  S )zMouse button released.r   r   Nr€   r�   )r‚   r~   r   rƒ   r„   r…   ÚRightButtonReleaseEventr   rl   ÚLeftButtonReleaseEventÚMiddleButtonReleaseEventr‰   rŠ   s          r$   r<   z'GtkVTKRenderWindowInteractor.OnButtonUp©   sÄ   € à×ÑÓˆØ×(Ñ(¨Ó/‰ˆˆeØ�
‰
×+Ñ+¨A¨a©D°!°A±$¸¸eÜ,/°«F°A°tô	=à—‘ˆØ�QŠ;Ø�J‰J×.Ñ.Ô0Ü—8‘8ˆOØ�qŠ[Ø�J‰J×-Ñ-Ô/Ü—8‘8ˆOØ�qŠ[Ø�J‰J×/Ñ/Ô1Ü—8‘8ˆOä�y‰yÐr%   c           	      óþ   — | j                  «       }| j                  |«      \  }}| j                  j                  |d   |d   ||t	        d«      dd«       | j                  j                  «        t        j                  S )zMouse has moved.r   r   N)r‚   r~   r   rƒ   r„   ÚMouseMoveEventr   rl   ©r    rr   r_   r‹   r|   r}   s         r$   r=   z(GtkVTKRenderWindowInteractor.OnMouseMove¼   sj   € à×ÑÓˆØ×(Ñ(¨Ó/‰ˆˆeØ�
‰
×+Ñ+¨A¨a©D°!°A±$¸¸eÜ,/°«F°A°tô	=à�
‰
×!Ñ!Ô#Ü�x‰xˆr%   c           	      ó  — | j                  «        | j                  «       }| j                  |«      \  }}| j                  j	                  |d   |d   ||t        d«      dd«       | j                  j                  «        t        j                  S )zEntering the vtkRenderWindow.r   r   N)	Ú
grab_focusr‚   r~   r   rƒ   r„   Ú
EnterEventr   rl   r’   s         r$   r>   z$GtkVTKRenderWindowInteractor.OnEnterÅ   st   € à�‰ÔØ×ÑÓˆØ×(Ñ(¨Ó/‰ˆˆeØ�
‰
×+Ñ+¨A¨a©D°!°A±$¸¸eÜ,/°«F°A°tô	=à�
‰
×ÑÔÜ�x‰xˆr%   c           	      óþ   — | j                  «       }| j                  |«      \  }}| j                  j                  |d   |d   ||t	        d«      dd«       | j                  j                  «        t        j                  S )zLeaving the vtkRenderWindow.r   r   N)r‚   r~   r   rƒ   r„   Ú
LeaveEventr   rl   r’   s         r$   r?   z$GtkVTKRenderWindowInteractor.OnLeaveÏ   sj   € à×ÑÓˆØ×(Ñ(¨Ó/‰ˆˆeØ�
‰
×+Ñ+¨A¨a©D°!°A±$¸¸eÜ,/°«F°A°tô	=à�
‰
×ÑÔÜ�x‰xˆr%   c           	      ó†  — | j                  «       }| j                  |«      \  }}|j                  |j                  }}t	        d«      }|dk  rt	        |«      }| j
                  j                  |d   |d   |||d|«       | j
                  j                  «        | j
                  j                  «        t        j                  S )zKey pressed.r   é   r   )r‚   r~   ÚkeyvalÚstringr„   r   rƒ   ÚKeyPressEventÚ	CharEventr   rl   ©	r    rr   r_   r‹   r|   r}   ÚkeycodeÚkeysymÚkeys	            r$   r@   z'GtkVTKRenderWindowInteractor.OnKeyPressØ   s    € à×ÑÓˆØ×(Ñ(¨Ó/‰ˆˆeØŸ,™,¨¯©�ˆÜ�!‹fˆØ�SŠ=Ü�g“,ˆCØ�
‰
×+Ñ+¨A¨a©D°!°A±$¸¸eØ,/°°Fô	<à�
‰
× Ñ Ô"Ø�
‰
×ÑÔÜ�x‰xˆr%   c           	      óR  — | j                  «       }| j                  |«      \  }}|j                  |j                  }}t	        d«      }|dk  rt	        |«      }| j
                  j                  |d   |d   |||d|«       | j
                  j                  «        t        j                  S )zKey released.r   r™   r   )
r‚   r~   rš   r›   r„   r   rƒ   ÚKeyReleaseEventr   rl   rž   s	            r$   ÚOnKeyReleasez)GtkVTKRenderWindowInteractor.OnKeyReleaseæ   s�   € à×ÑÓˆØ×(Ñ(¨Ó/‰ˆˆeØŸ,™,¨¯©�ˆÜ�!‹fˆØ�SŠ=Ü�g“,ˆCØ�
‰
×+Ñ+¨A¨a©D°!°A±$¸¸eØ,/°°Fô	<à�
‰
×"Ñ"Ô$Ü�x‰xˆr%   c                 óR   — | j                   r| j                  j                  «        y y r'   )r   r   rk   rL   s    r$   rk   z'GtkVTKRenderWindowInteractor.Initializeó   s   € Ø�>Š>Ø�J‰J×!Ñ!Õ#ð r%   r'   )rW   Ú
__module__Ú__qualname__Ú__doc__r   r   r   rX   r   r   rb   rd   r8   r:   r9   rA   r~   r;   r<   r=   r>   r?   r@   r¤   rk   rP   r%   r$   r   r   "   sq   „ ñ)ò!ò0$òGò$	5ò3òò"ò(òóòóòòò&ò&òòòòó$r%   r   c                  óÞ  — ddl m}  ddlm}m}m} dd l}dd l}t        j                  t        j                  «      }|j                  d«       |j                  dt        j                  «       |j                  dt        j                  «       |j                  d«       t        j                  d¬	«      }|j!                  |«       |j#                  «        t%        «       }|j'                  d
d
«       |j)                  |«       |j#                  «        |j+                  «        |j-                  «        |j/                  ddd„«        | «       }|j1                  d«        |«       }	|	j3                  |j5                  «       «        |«       }
|
j7                  |	«       |
j9                  «       j;                  ddd«        |«       }|j=                  «       j?                  |«       |jA                  |
«       t        jB                  d«      }|j                  dt        j                  «       |j)                  |«       |j#                  «        |j#                  «        t        jD                  «        y )Nr   )ÚvtkConeSource)ÚvtkActorÚvtkPolyDataMapperÚvtkRendererzA GtkVTKRenderWindow Demo!rw   r6   rZ   r€   )Úspacingi�  Ú	ExitEventc                 ó   — |S r'   rP   )ÚoÚeÚxs      r$   rR   zmain.<locals>.<lambda>  s   € ±Qr%   éP   g      à?g      ð?zQuit!Úclickedr'   )#Úvtkmodules.vtkFiltersSourcesrª   Úvtkmodules.vtkRenderingCorer«   r¬   r­   Úvtkmodules.vtkRenderingOpenGL2Úvtkmodules.vtkInteractionStyler   Ú	GtkWindowÚWINDOW_TOPLEVELÚ	set_titler7   ÚmainquitÚset_border_widthÚGtkVBoxÚaddÚshowr   r   Ú
pack_startrk   ÚStartr   ÚSetResolutionÚSetInputConnectionÚGetOutputPortÚ	SetMapperÚGetPropertyÚSetColorrb   ÚAddRendererÚAddActorÚ	GtkButtonÚmainloop)rª   r«   r¬   r­   Ú
vtkmodulesÚwindowÚvboxÚgvtkÚconeÚ
coneMapperÚ	coneActorÚrenÚquits                r$   Úmainr×   ø   s¹  € Ý:ßTÑTã)Û)ô �]‰]œ3×.Ñ.Ó/€FØ
×ÑÐ1Ô2Ø
‡N�N�9œcŸl™lÔ+Ø
‡N�N�>¤3§<¡<Ô0Ø
×Ñ˜BÔô �;‰;˜qÔ!€DØ
‡J�JˆtÔØ‡I�I„Kô (Ó)€Dà‡N�N�3˜ÔØ‡O�O�DÔØ‡I�I„KØ‡O�OÔØ‡J�J„Là×Ñ�[Ò"6Ô7ñ ‹?€DØ×Ñ�rÔÙ"Ó$€JØ×!Ñ! $×"4Ñ"4Ó"6Ô7á“
€IØ×Ñ˜
Ô#Ø×ÑÓ×$Ñ$ S¨#¨sÔ3Ù
‹-€CØ×ÑÓ×&Ñ& sÔ+Ø‡L�L�Ôô �=‰=˜Ó!€DØ‡L�L�œCŸL™LÔ)Ø‡O�O�DÔØ‡I�I„Kð ‡K�K„MÜ‡L�L…Nr%   Ú__main__)r¨   r   rC   r   Úvtkmodules.vtkRenderingUIr   Úmathr   r   r×   rW   rP   r%   r$   Ú<module>rÛ      sE   ðñ÷8 Ó Ý FÛ ôS$ 5§?¡?ô S$òl3ðl ˆzÒÙ…Fð r%   