void MaskedSprite::render(const RenderState& parentRS) { if (_mask && _mask->getAnimFrame().getDiffuse().base) { Renderer::transform t = getGlobalTransform(_mask); RectF maskDest = _mask->getDestRect(); RectF maskSrc = _mask->getSrcRect(); //maskDest const Diffuse& df = _mask->getAnimFrame().getDiffuse(); bool rchannel = _useRChannel ? true : (df.alpha ? true : false); spNativeTexture msk = _useRChannel ? df.base : (df.alpha ? df.alpha : df.base); MaskedRenderer mr(msk, maskSrc, maskDest, t, rchannel); RenderState rs = parentRS; rs.renderer = &mr; mr.begin(parentRS.renderer); _Sprite::render(rs); mr.end(); } else { _Sprite::render(parentRS); } }
bool View::contains(const glm::vec3 &point) const { // Pulled from downstream ds_cinder/sprite.cpp if (mSize.x <= 0.0f || mSize.y <= 0.0f) return false; if (mScale.x <= 0.0f || mScale.y <= 0.0f) return false; const float pad(0.0f); glm::mat4 global_m(getGlobalTransform()); glm::vec4 pR = glm::vec4(point.x, point.y, point.z, 1.0f); glm::vec4 cA = global_m * glm::vec4(-pad, -pad, 0.0f, 1.0f); glm::vec4 cB = global_m * glm::vec4(mSize.x + pad, -pad, 0.0f, 1.0f); glm::vec4 cC = global_m * glm::vec4(mSize.x + pad, mSize.y + pad, 0.0f, 1.0f); glm::vec4 v1 = cA - cB; glm::vec4 v2 = cC - cB; glm::vec4 v = pR - cB; float dot1 = glm::dot(v, v1); float dot2 = glm::dot(v, v2); float dot3 = glm::dot(v1, v1); float dot4 = glm::dot(v2, v2); return ( dot1 >= 0 && dot2 >= 0 && dot1 <= dot3 && dot2 <= dot4 ); }
/** * Updates the button * * @date 2015-02-27 * * @revisions * * @designer * * @programmer Jonathan Chu * Lewis Scott * Melvin Loho * * @return void */ void Button::update(sf::Time& t) { static bool tog = false; static AppWindow& appWindow = AppWindow::getInstance(); if (enabled) // button enabled { if (getGlobalTransform().transformRect(sprite().getLocalBounds()).contains(appWindow.getMousePositionRelativeToWindowAndView(view))) // mouse inside button { if (sf::Mouse::isButtonPressed(sf::Mouse::Left)) // mouse clicking button { sprite().setTextureRect(clicked); // So that holding the mouse doesn't activate multiple times if (!tog) { on_click(); tog = true; } } else // mouse just hovering sprite().setTextureRect(hover); } else //mouse outside button sprite().setTextureRect(normal); } else // button disabled sprite().setTextureRect(disabled); // Reset the button if the mouse is released if (!sf::Mouse::isButtonPressed(sf::Mouse::Left)) tog = false; }
AglMatrix AglSkeleton::getGlobalTransform(int p_joint) { AglJoint j = m_joints[p_joint]; AglMatrix transform; if (m_scene->getDynamicNode(j.nodeID).animated) transform = m_scene->getDynamicNode(j.nodeID).transform; else transform = m_scene->getNode(j.nodeID).localTransform; if (j.parentIndex >= 0) return transform * getGlobalTransform(j.parentIndex); return transform * m_header.baseTransform; }
void Widget::processEvent(simplgui::Event event) { sf::Transform globalTr = getGlobalTransform(); sf::FloatRect widgetRect(sf::Vector2f(0.f, 0.f), getEffectiveSize()); widgetRect = globalTr.transformRect(widgetRect); if(event.type == simplgui::Event::MouseButtonPressed) { if(widgetRect.contains(event.mouseButton.x, event.mouseButton.y)) { setFocused(true); m_click = true; } else //TODO: Allow widgets to go outside their effective size rectangle (like combobox with their unfoldable list) { setFocused(false); } } else if(event.type == simplgui::Event::MouseButtonReleased) { m_click = false; } else if(event.type == simplgui::Event::MouseMoved) { if(widgetRect.contains(event.mouseMove.x, event.mouseMove.y)) { } else //TODO: Allow widgets to go outside their effective size rectangle (like combobox with their unfoldable list) { m_click = false; } } doProcessEvent(event); }
Matrix4x4 Camera::getViewMatrix() { return getGlobalTransform().getLookAtMatrix(); }
sf::FloatRect Node::getGlobalBoundingBox() { sf::Transform tf = getGlobalTransform(); return tf.transformRect(getBoundingBox()); }