2010-01-19 63 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."