Morphic GUI中的事件传播

时间:2010-01-19 14:06:18

标签: event-handling smalltalk squeak morphic

我有一个Squeak Morphic GUI的图像,其中包含一些透明部分,因此不应该接受任何鼠标事件等但只是可见,但它需要在其他变形前面可见。

这就是为什么我认为将出现的鼠标事件传播到底层变形是有用的。有没有人知道我的问题的解决方案或解决它的其他建议。

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

_____________________________ <- basic morph

我希望这能说明我的问题。

2 个答案:

答案 0 :(得分:2)

我能想到的最好的事情是沿着以下几点(按顺序增加顺序,降低工作可能性的顺序)

  1. 记录事件,标记透明图像,然后重播事件。这似乎是一种效率低下且做得不好的方式。
  2. 以某种方式跟踪透明图像背后的焦点,并将事件传递给它。我不熟悉有问题的库,所以我不知道是否可以这样做。如果您可以控制其他图层,这很可能就是您的选择。 (您可以使用该mouseDownEvent直接调用他们的'鼠标事件发生'函数,但您仍然必须确定哪一个会收到它。)
  3. 只需将其声明为无法在任何可用级别传递鼠标事件的内容。 OSD窗口倾向于这样做,我不知道如何。如果你能这样做,我会建议......但鉴于你问这个问题,你可能不会。

答案 1 :(得分:2)

默认情况下,Morphic鼠标事件在最顶层的变形中处理。但是,父变体可以使用#mouseDown拦截#mouseDownPriority个孩子。

您的透明图片会获得所有点击,因为它是最顶层的。看看#rejectsEvent:。它只是将#isLocked#visible结合起来拒绝事件。您可能希望覆盖此操作,以便即使可见也拒绝事件。

例如:

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