2010-01-19 53 views
9

我有一個包含一些透明部分的Squeak Morphic GUI的圖像,因此不應該接受任何mouseevents等,但只是可見的,但它需要在其他變體前可見。Morphic GUI中的事件傳播

這就是爲什麼我認爲將出現的mouseevents傳播到底層變形將是有用的。有沒有人知道我的問題或解決它的另一個建議的解決方案。

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

_____________________________ <- basic morph 

我希望能說明我的問題。

回答

2

我能想到的最好的事情是大意如下的東西(增加平滑的秩序,並減少可能的爲了工作)

  1. 記錄的情況下,標籤透明圖像了,和重播事件。這似乎是一種效率低下的方式。
  2. 以某種方式跟蹤透明圖像背後的焦點,並將事件傳遞給它。我對這些圖書館並不熟悉,所以我不知道是否有可能這樣做。如果你可以控制其他層次,這很可能是最好的選擇。 (您可以直接使用該mouseDownEvent調用他們的'鼠標事件發生'函數,儘管您仍然必須確定哪一個會接收它)。
  3. 只需將其聲明爲不會在任何級別傳遞給它的鼠標事件。 OSD窗口傾向於這樣做,我不知道如何。如果你能這樣做,我會建議......但鑑於你問這個問題,你可能不能。
2

默認情況下,Morphic鼠標事件是在最頂端的變形中處理的。但是,父母變體能夠使用#mouseDownPriority攔截#mouseDown給孩子。

您的透明圖像獲取所有點擊,因爲它是最頂級的。看看#rejectsEvent:。它只是結合#isLocked#visible來拒絕事件。即使可見,您也可能想要覆蓋此事件以拒絕事件。

例如:

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