2010-01-19 9 views
9

Ho un'immagine per una Squeak Morphic GUI che contiene alcune parti trasparenti e quindi non dovrebbe accettare alcun mouseeven ecc. Ma solo essere visibile, ma deve essere visibile di fronte ad altri morph.Propagazione di eventi in una GUI Morphic

Ecco perché ho pensato che sarebbe stato utile propagare gli eventi del mouse che apparivano ai metamorfosi sottostanti. Qualcuno conosce una soluzione per il mio problema o un altro suggerimento per risolverlo.

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

_____________________________ <- basic morph 

spero che questo illustri il mio problema.

risposta

2

La cosa migliore che posso pensare è qualcosa lungo le linee seguenti (in ordine di levigatezza crescente, e l'ordine di probabilità di lavorare decrescente)

  1. registrare l'evento, scheda dell'immagine trasparente via, e riproduzione l'evento. Questo sembra un modo inefficiente e scarso di farlo.
  2. In qualche modo, tenete traccia di ciò che si concentra dietro la vostra immagine trasparente e vi passa l'evento. Non ho familiarità con le librerie in questione, quindi non so se è possibile farlo in quel modo. Se hai il controllo sugli altri livelli, questa è probabilmente la strada da percorrere. (È possibile chiamare direttamente le funzioni "un evento del mouse è successo" con quel mouseDownEvent, anche se è ancora necessario identificare quale si riceverebbe).
  3. Dichiaralo semplicemente come qualcosa che non riceve gli eventi del mouse passati a qualsiasi livello disponibile. Le finestre OSD tendono a farlo, non so come. Se puoi farlo in questo modo, lo consiglierei ... ma dato che stai facendo questa domanda, probabilmente non puoi.
2

Per impostazione predefinita, gli eventi del mouse morfico vengono gestiti nel morph più alto. Tuttavia, un morph padre è in grado di intercettare #mouseDown per i bambini che utilizzano #mouseDownPriority.

L'immagine trasparente riceve tutti i clic perché è al massimo. Dai uno sguardo allo #rejectsEvent:. Giusta combina #isLocked e #visible per rifiutare gli eventi. Potresti voler sovrascrivere questo per respingere gli eventi anche se visibili.

Ad esempio:

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