void AreaNode::getElementsByPos(const glm::vec2& pos, vector<NodePtr>& pElements) { if (pos.x >= 0 && pos.y >= 0 && pos.x < getSize().x && pos.y < getSize().y && reactsToMouseEvents()) { pElements.push_back(getSharedThis()); } }
void RectNode::getElementsByPos(const glm::vec2& pos, vector<NodePtr>& pElements) { glm::vec2 pivot = m_Rect.tl + m_Rect.size()/2.f; glm::vec2 rpos = getRotatedPivot(pos, m_Angle, pivot); if (rpos.x >= m_Rect.tl.x && rpos.y >= m_Rect.tl.y && rpos.x < m_Rect.br.x && rpos.y < m_Rect.br.y && reactsToMouseEvents()) { pElements.push_back(getSharedThis()); } }
void ImageNode::getElementsByPos(const glm::vec2& pos, vector<NodePtr>& pElements) { if (reactsToMouseEvents()) { OffscreenCanvasPtr pCanvas = m_pGPUImage->getCanvas(); if (pCanvas && pCanvas->getHandleEvents()) { glm::vec2 nodeSize(getSize()); glm::vec2 canvasSize(pCanvas->getSize()); glm::vec2 localPos(pos.x*(canvasSize.x/nodeSize.x), pos.y*(canvasSize.y/nodeSize.y)); pCanvas->getRootNode()->getElementsByPos(localPos, pElements); } RasterNode::getElementsByPos(pos, pElements); } }
void DivNode::getElementsByPos(const glm::vec2& pos, vector<NodePtr>& pElements) { if (reactsToMouseEvents() && ((getSize() == glm::vec2(0,0) || (pos.x >= 0 && pos.y >= 0 && pos.x < getSize().x && pos.y < getSize().y)))) { for (int i = getNumChildren()-1; i >= 0; i--) { NodePtr pCurChild = getChild(i); glm::vec2 relPos = pCurChild->toLocal(pos); pCurChild->getElementsByPos(relPos, pElements); if (!pElements.empty()) { pElements.push_back(getSharedThis()); return; } } // pos isn't in any of the children. if (getSize() != glm::vec2(0,0)) { // Explicit width/height given for div - div reacts on its own. pElements.push_back(getSharedThis()); } } }
void PolygonNode::getElementsByPos(const glm::vec2& pos, vector<NodePtr>& pElements) { if (reactsToMouseEvents() && pointInPolygon(pos, m_Pts)) { pElements.push_back(getSharedThis()); } }