【问题标题】:Event propagation in a Morphic GUIMorphic GUI 中的事件传播
【发布时间】:2010-01-19 14:06:17
【问题描述】:

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

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

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

_____________________________ <- basic morph

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

【问题讨论】:

    标签: event-handling smalltalk squeak morphic


    【解决方案1】:

    我能想到的最好的事情是以下几行(按平滑度递增顺序,工作可能性递减顺序)

    1. 记录事件,将透明图像移开,然后重播事件。这似乎是一种低效且糟糕的方式。
    2. 以某种方式跟踪透明图像背后的焦点,并将事件传递给它。我不熟悉有问题的图书馆,所以我不知道是否可以这样做。如果您可以控制其他层,那么这很可能是要走的路。 (您可以使用 mouseDownEvent 直接调用他们的“发生鼠标事件”函数,但您仍然必须确定哪个会接收它)。
    3. 只需将其声明为在任何可用级别都不会将鼠标事件传递给它的东西。 OSD 窗口倾向于这样做,我不确定如何。如果您可以这样做,我会建议您这样做...但是鉴于您要问这个问题,您可能不能这样做。

    【讨论】:

      【解决方案2】:

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

      您的透明图片获得了所有点击,因为它是最高的。看看#rejectsEvent:。它只是结合#isLocked#visible 来拒绝事件。您可能希望覆盖它以拒绝即使可见的事件。

      例如:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-22
        • 2017-07-05
        • 2011-11-05
        相关资源
        最近更新 更多