void EditorWidgetManager::update() { if (gInput().isPointerButtonDown(PointerEventButton::Left) || gInput().isPointerButtonDown(PointerEventButton::Right)) { for (auto& widgetData : mActiveWidgets) { EditorWidgetBase* widget = widgetData.second; EditorWidgetContainer* parentContainer = widget->_getParent(); if (parentContainer == nullptr) { widget->_setHasFocus(false); continue; } EditorWindowBase* parentWindow = parentContainer->getParentWindow(); SPtr<RenderWindow> parentRenderWindow = parentWindow->getRenderWindow(); const RenderWindowProperties& props = parentRenderWindow->getProperties(); if (!props.hasFocus()) { widget->_setHasFocus(false); continue; } if (parentContainer->getActiveWidget() != widget) { widget->_setHasFocus(false); continue; } Vector2I widgetPos = widget->screenToWidgetPos(gInput().getPointerPosition()); if (widgetPos.x >= 0 && widgetPos.y >= 0 && widgetPos.x < (INT32)widget->getWidth() && widgetPos.y < (INT32)widget->getHeight()) { widget->_setHasFocus(true); } else widget->_setHasFocus(false); } } }
void EditorWidgetManager::onFocusLost(const RenderWindow& window) { for (auto& widgetData : mActiveWidgets) { EditorWidgetBase* widget = widgetData.second; EditorWidgetContainer* parentContainer = widget->_getParent(); if (parentContainer == nullptr) continue; EditorWindowBase* parentWindow = parentContainer->getParentWindow(); SPtr<RenderWindow> parentRenderWindow = parentWindow->getRenderWindow(); if (parentRenderWindow.get() != &window) continue; widget->_setHasFocus(false); } }