//--------------------------------------------------------------- // 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()); }
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; }