2010-01-19 15 views
9

Tengo una imagen para una GUI Squeak Morphic que contiene algunas partes transparentes y por lo tanto no debería aceptar ningún mouseevents, etc., pero solo ser visible, pero debe estar visible frente a otros morphs.Propagación de eventos en una interfaz gráfica de usuario morfológica

Es por eso que pensé que sería útil propagar el mouseevents que aparece a los morph subyacentes. ¿Alguien sabe una solución para mi problema u otra sugerencia para resolverlo?

V       <- mouseDownEvent 
_____________________________ <- transparent image (BorderedMorph) 
    _____ _____  _____ 
_|  |___| |___|  |__ <- buttons waiting for click and drop events 

_____________________________ <- basic morph 

espero que ilustre mi problema.

Respuesta

2

Lo mejor que se me ocurre es algo a lo largo de las siguientes líneas (con el fin de suavidad en aumento, y el orden de la probabilidad de trabajar disminuyendo)

  1. grabar el evento, la ficha imagen transparente de distancia, y la repetición el evento. Esto parece una forma ineficiente y pobre de hacerlo.
  2. De alguna manera realizar un seguimiento de lo que tiene enfoque detrás de su imagen transparente, y pasarle el evento. No estoy familiarizado con las bibliotecas en cuestión, así que no sé si es posible hacerlo así. Si tienes control sobre las otras capas, es muy probable que sea el camino a seguir. (Puede llamar directamente a sus funciones 'un evento de mouse' con ese mouseDownEvent, aunque aún tiene que identificar cuál lo recibiría).
  3. Simplemente lo declara como algo que no obtiene los eventos del mouse pasados ​​a él en cualquier nivel que esté disponible. Las ventanas de OSD tienden a hacer esto, no estoy seguro cómo. Si puede hacerlo de esta manera, lo aconsejaría ... pero dado que está haciendo esta pregunta, probablemente no pueda.
2

De forma predeterminada, los eventos del mouse de Morphic se manejan en el más alto morph. Sin embargo, un morph parental puede interceptar #mouseDown a los niños que usan #mouseDownPriority.

Su imagen transparente recibe todos los clics porque es la más alta. Eche un vistazo al #rejectsEvent:. Es justs combina #isLocked y #visible para rechazar eventos. Es posible que desee sobrescribir esto para rechazar eventos, incluso si son visibles.

Por ejemplo:

MyMorph>>rejectsEvent: anEvent 
^true "Ignores all events." 
Cuestiones relacionadas