Simple GUI Library
border.cpp
Go to the documentation of this file.
1/**
2 * @author Nikita Mochalov (github.com/tralf-strues)
3 * @file border.cpp
4 * @date 2021-11-06
5 *
6 * @copyright Copyright (c) 2021
7 */
8
9#include "sml/graphics_wrapper/primitives.h"
10#include "paint/border.h"
11
12namespace Sgl
13{
14 Border::Border(int32_t thickness, Sml::Color color)
15 : m_Thickness(thickness), m_Color(color) {}
16
17 Border::Border(const Insets& thickness, Sml::Color color)
18 : m_Thickness(thickness), m_Color(color) {}
19
20
21 const Insets& Border::getThickness() const
22 {
23 return m_Thickness;
24 }
25
26 Sml::Color Border::getColor() const
27 {
28 return m_Color;
29 }
30
31 void Border::encloseArea(const Border* border, const Sml::Rectangle<int32_t>& targetRegion)
32 {
33 if (border == nullptr) { return; }
34
35 Sml::Rectangle<int32_t> topBorder{targetRegion.pos, targetRegion.width, border->getThickness().top};
36 Sml::Rectangle<int32_t> leftBorder{targetRegion.pos, border->getThickness().left, targetRegion.height};
37
38 Sml::Rectangle<int32_t> bottomBorder;
39 bottomBorder.pos.x = targetRegion.pos.x;
40 bottomBorder.pos.y = targetRegion.pos.y + targetRegion.height - border->getThickness().bottom;
41 bottomBorder.width = targetRegion.width;
42 bottomBorder.height = border->getThickness().bottom;
43
44 Sml::Rectangle<int32_t> rightBorder;
45 rightBorder.pos.x = targetRegion.pos.x + targetRegion.width - border->getThickness().right;
46 rightBorder.pos.y = targetRegion.pos.y;
47 rightBorder.width = border->getThickness().right;
48 rightBorder.height = targetRegion.height;
49
50 Sml::Renderer::getInstance().setColor(border->getColor());
51
52 if (border->getThickness().top > 0)
53 {
54 Sml::renderFilledRect(topBorder);
55 }
56
57 if (border->getThickness().right > 0)
58 {
59 Sml::renderFilledRect(rightBorder);
60 }
61
62 if (border->getThickness().bottom > 0)
63 {
64 Sml::renderFilledRect(bottomBorder);
65 }
66
67 if (border->getThickness().left > 0)
68 {
69 Sml::renderFilledRect(leftBorder);
70 }
71 }
72}