예제 #1
0
bool nuiEventSource::SendEvent(const nuiEvent& rEvent)
{
  if (IsEnabled() && !mpTargets.empty())
  {
    rEvent.SetSource(this);
    std::vector<nuiEventTargetBase*> targets(mpTargets);
    std::vector<nuiEventTargetBase*>::const_iterator it = targets.begin();
    std::vector<nuiEventTargetBase*>::const_iterator end = targets.end();

    mEnumerating++;
    bool handled = false;
    while (it != end && !handled)
    {
      nuiEventTargetBase* pETB = *it;
      if (mGraveYard.find(pETB) == mGraveYard.end())
      {
        pETB->OnEvent(rEvent);
        handled = rEvent.IsCanceled();
      }
      ++it;
    }

    mEnumerating--;
    mGraveYard.clear();
    return handled;
  }

  return false;
}
예제 #2
0
bool nuiEventSource::SendEvent(const nuiEvent& rEvent)
{
  if (IsEnabled() && !mpTargets.empty())
  {
    rEvent.SetSource(this);
    std::vector<nuiEventTargetBase*> targets(mpTargets);
    std::vector<nuiEventTargetBase*>::const_iterator it = targets.begin();
    std::vector<nuiEventTargetBase*>::const_iterator end = targets.end();

    bool handled = false;
    while (it != end && !handled)
    {
      ((*it)->OnEvent(rEvent));
      handled = rEvent.IsCanceled();
      ++it;
    }

    return handled;
  }

  return false;
}