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