1 #include "engine.h"
2 #include "gui2_overlay.h"
3 
GuiOverlay(GuiContainer * owner,string id,sf::Color color)4 GuiOverlay::GuiOverlay(GuiContainer* owner, string id, sf::Color color)
5 : GuiElement(owner, id), color(color)
6 {
7     texture_mode = TM_None;
8     setSize(GuiElement::GuiSizeMax, GuiElement::GuiSizeMax);
9 }
10 
onDraw(sf::RenderTarget & window)11 void GuiOverlay::onDraw(sf::RenderTarget& window)
12 {
13     if (color.a > 0)
14     {
15         sf::RectangleShape overlay(sf::Vector2f(rect.width, rect.height));
16         overlay.setPosition(rect.left, rect.top);
17         overlay.setFillColor(color);
18         switch(texture_mode)
19         {
20         case TM_None:
21             break;
22         case TM_Centered:
23             overlay.setTexture(textureManager.getTexture(texture));
24             overlay.setSize(sf::Vector2f(overlay.getTextureRect().width, overlay.getTextureRect().height));
25             overlay.setPosition(rect.left + rect.width / 2.0 - overlay.getSize().x / 2.0, rect.top + rect.height / 2.0 - overlay.getSize().y / 2.0);
26             break;
27         case TM_Tiled:
28             overlay.setTexture(textureManager.getTexture(texture));
29             P<WindowManager> window_manager = engine->getObject("windowManager");
30             sf::Vector2i texture_size = window_manager->mapCoordsToPixel(sf::Vector2f(rect.width, rect.height)) - window_manager->mapCoordsToPixel(sf::Vector2f(0, 0));
31             overlay.setTextureRect(sf::IntRect(0, 0, texture_size.x, texture_size.y));
32             break;
33         }
34         window.draw(overlay);
35     }
36 }
37 
setColor(sf::Color color)38 GuiOverlay* GuiOverlay::setColor(sf::Color color)
39 {
40     this->color = color;
41     return this;
42 }
43 
setAlpha(int alpha)44 GuiOverlay* GuiOverlay::setAlpha(int alpha)
45 {
46     color.a = std::max(0, std::min(255, alpha));
47     return this;
48 }
49 
setTextureCenter(string texture)50 GuiOverlay* GuiOverlay::setTextureCenter(string texture)
51 {
52     this->texture = texture;
53     this->texture_mode = TM_Centered;
54     return this;
55 }
56 
setTextureTiled(string texture)57 GuiOverlay* GuiOverlay::setTextureTiled(string texture)
58 {
59     this->texture = texture;
60     this->texture_mode = TM_Tiled;
61     return this;
62 }
63 
setTextureNone()64 GuiOverlay* GuiOverlay::setTextureNone()
65 {
66     this->texture = nullptr;
67     this->texture_mode = TM_None;
68     return this;
69 }
70