//---------------------------------------------------------------
// Purpose: 
//---------------------------------------------------------------
void CGuiClientElement::HandleMouseReleased( KeyCodes::KeyCode key, const Vector2f &absPos, const Vector2f &relPos )
{
	Vector2f rel = GetRelativePosition(relPos);
	OnMouseReleased(key, absPos, rel);
	CALL_FUNC_ON_CLIENT_CHILDREN( HandleMouseReleased, key, absPos, rel );
}
void uddTableItemElement::OnBeginDrag(const wxPoint& pos)
{
	m_previousAbsolutePosition = GetRelativePosition();
}
uint64 KaxSegment::GetRelativePosition(const EbmlElement & Elt) const
{
	return GetRelativePosition(Elt.GetElementPosition());
}
Exemple #4
0
  AbstractWidget* AbstractNode::RecheckWidgetUnderCursor (AbstractWidget* orig,
                                                          AbstractWindow* context)
  {
    DBG_ASSERT(orig);
    DBG_ASSERT(orig->super() && orig->super() != this);

    AbstractWidget* result = orig;
    AbstractView* parent = result->super();
    Point offset;

    Rect rect(GetRelativePosition(parent) + position() + GetOffset(),
              parent->size());

    bool cursor_in_superview = rect.contains(context->local_cursor_position());

    if (cursor_in_superview) {

      offset = parent->GetOffset();
      context->set_local_cursor_position(
          context->local_cursor_position().x() - rect.x() - offset.x(),
          context->local_cursor_position().y() - rect.y() - offset.y());

      if (result->Contain(context->local_cursor_position())) {
        result = RecursiveDispatchHoverEvent(result, context);
      } else {

        dispatch_mouse_hover_out(result, context);

        // find which contianer contains cursor position
        while (parent) {

          if (parent == this) {
            parent = 0;
            break;
          }

          offset = parent->GetOffset();
          context->set_local_cursor_position(
              context->local_cursor_position().x() + parent->position().x()
                  + offset.x(),
              context->local_cursor_position().y() + parent->position().y()
                  + offset.y());

          if (parent->Contain(context->local_cursor_position())) break;

          parent = parent->super();
        }

        result = dynamic_cast<AbstractWidget*>(parent);

        if (result) {
          result = RecursiveDispatchHoverEvent(result, context);
        }

      }

    } else {

      dispatch_mouse_hover_out(result, context);

      // find which contianer contains cursor position
      parent = parent->super();
      while (parent != nullptr) {

        if (parent == this) {
          parent = nullptr;
          break;
        }

        if (is_widget(parent)) {
          rect.set_position(GetRelativePosition(parent));
          rect.set_size(parent->size());
        } else {
          DBG_ASSERT(parent == this);
          rect.set_position(position());
          rect.set_size(size());
        }

        offset = parent->GetOffset();
        context->set_local_cursor_position(
            context->local_cursor_position().x() - rect.x() - offset.x(),
            context->local_cursor_position().y() - rect.y() - offset.y());

        if (rect.contains(context->local_cursor_position())) break;

        parent = parent->super();
      }

      result = dynamic_cast<AbstractWidget*>(parent);
      if (result) {

        for (AbstractView* p = parent->GetLastSubView(); p;
            p = parent->GetPreviousSubView(p)) {

          if (is_widget(p)) {
            if (p->Contain(context->local_cursor_position())) {
              result = dynamic_cast<AbstractWidget*>(p);

              dispatch_mouse_hover_in(result, context);
              result = RecursiveDispatchHoverEvent(result, context);

              break;
            }
          } else {
            break;
          }
        }
      }

    }

    return result;
  }