bool GUIImage::render(sf::RenderWindow *window, sf::RenderStates &states) { bool visible = getVisible(); if(!visible)return false; float x = getLocalX(), y = getLocalY(); std::shared_ptr<GUIElement> parent = getParent(); while(parent != NULL) { x += parent->getLocalX(); y += parent->getLocalY(); visible = parent->getVisible(); if(!visible) return false; parent = parent->getParent(); } if(visible) { mSprite.setPosition(x, y); window->draw(mSprite, states); } if(!mChilds.empty()) { for(std::vector<std::shared_ptr<GUIElement> >::size_type i = 0; i < mChilds.size(); ++i) { mChilds[i]->render(window, states); } } return true; }
bool GUIText::render(sf::RenderWindow *window, sf::RenderStates &states) { bool visible = getVisible(); if(!visible)return false; float x = getLocalX(), y = getLocalY(); std::shared_ptr<GUIElement> parent = getParent(); while(parent != NULL) { visible = parent->getVisible(); x += parent->getLocalX(); y += parent->getLocalY(); if(!visible) return false; parent = parent->getParent(); } if(visible) { float posX = x, posY = y; if(mAlignment == "left") { mText.setPosition(getX(), getY()); mText.setOrigin(0, 0); } else if(mAlignment == "middle") { mText.setPosition(getX(), getY()); mText.setOrigin(mText.getLocalBounds().width/2, 0); } else if(mAlignment == "right") { mText.setPosition(getX(), getY()); mText.setOrigin(mText.getLocalBounds().width, 0); } window->draw(mText, states); } if(!mChilds.empty()) { for(std::vector<std::shared_ptr<GUIElement> >::size_type i = 0; i < mChilds.size(); ++i) { mChilds[i]->render(window, states); } } return true; }
bool GUIButton::render(sf::RenderWindow *window, sf::RenderStates &states) { bool visible = getVisible(); if(!visible) return false; std::shared_ptr<GUIElement> parent = getParent(); float x = getLocalX(), y = getLocalY(); while(parent != NULL) { x += parent->getLocalX(); y += parent->getLocalY(); visible = parent->getVisible(); if(!visible) return false; parent = parent->getParent(); } if(visible) { sf::RenderStates _state = states; if(getMouseIsInside()) _state.shader = mGlowEffect; //sf::RectangleShape rect(sf::Vector2f(getWidth(), getHeight())); //rect.setPosition(x, y); //rect.setFillColor(sf::Color::Color(255, 255, 255, 255)); //window->draw(rect); mSprite.setPosition(x, y); window->draw(mSprite, _state); } if(!mChilds.empty()) { for(std::vector<std::shared_ptr<GUIElement> >::size_type i = 0; i < mChilds.size(); ++i) { mChilds[i]->render(window, states); } } return true; }
Point Space::fromPhysical(int x, int y){ return Point(getLocalX(x), getLocalY(y), *this); }