diff options
author | dec05eba <dec05eba@protonmail.com> | 2019-04-08 21:04:12 +0200 |
---|---|---|
committer | dec05eba <dec05eba@protonmail.com> | 2019-04-08 21:04:17 +0200 |
commit | 725ea566a2b6a12e0a02e4f570b6e99102e2d21b (patch) | |
tree | d35a338392e15f50402c2055d520e7b1c3ea36a2 /src/RoomSidePanel.cpp | |
parent | 4aac8df198e3a5bd9c6efc95cdf4c520c2e05401 (diff) |
Refactor, remove a lot of code and use dchat core instead
Diffstat (limited to 'src/RoomSidePanel.cpp')
-rw-r--r-- | src/RoomSidePanel.cpp | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/src/RoomSidePanel.cpp b/src/RoomSidePanel.cpp new file mode 100644 index 0000000..a7baf8a --- /dev/null +++ b/src/RoomSidePanel.cpp @@ -0,0 +1,88 @@ +#include "../include/RoomSidePanel.hpp" +#include "../include/RoomTopPanel.hpp" +#include "../include/ResourceCache.hpp" +#include "../include/Settings.hpp" +#include "../include/ColorScheme.hpp" +#include "../include/Room.hpp" +#include <SFML/Graphics/RectangleShape.hpp> +#include <SFML/Graphics/Text.hpp> +#include <SFML/Window/Mouse.hpp> +#include <dchat/Room.hpp> +#include <vector> +#include <cmath> + +using namespace std; + +namespace dchat +{ + static sf::Vector2f position; + const float WIDTH = 300.0f; + const unsigned int FONT_SIZE = 20; + const float PADDING_BOTTOM = 10.0f; + const float CHANNEL_NAME_BOX_HEIGHT_RATIO = 1.5f; + + void RoomSidePanel::draw(sf::RenderWindow &window) + { + std::shared_ptr<Rooms> rooms = getRooms(); + if(!rooms) return; + + float posY = RoomTopPanel::getHeight(); + auto windowSize = window.getSize(); + sf::RectangleShape rect(sf::Vector2f(getWidth(), windowSize.y)); + rect.setPosition(0.0f, 0.0f); + rect.setFillColor(ColorScheme::getPanelColor()); + window.draw(rect); + + const sf::Font *font = ResourceCache::getFont("fonts/Nunito-Regular.ttf"); + const float fontSize = FONT_SIZE * Settings::getScaling(); + const float fontHeight = font->getLineSpacing(fontSize); + const float channelBoxHeight = floor(fontHeight * CHANNEL_NAME_BOX_HEIGHT_RATIO); + + auto mousePos = sf::Mouse::getPosition(window); + + position.y = posY; + for(auto &it : rooms->getRooms()) + { + const std::shared_ptr<Room> room = it.second; + sf::FloatRect box(0.0f, position.y, getWidth(), channelBoxHeight); + if(room == getCurrentRoom()) + { + rect.setFillColor(ColorScheme::getBackgroundColor() + sf::Color(15, 15, 15)); + rect.setSize(sf::Vector2f(box.width, box.height)); + rect.setPosition(sf::Vector2f(0.0f, position.y)); + window.draw(rect); + } + else if(box.contains(mousePos.x, mousePos.y)) + { + rect.setFillColor(ColorScheme::getBackgroundColor() + sf::Color(5, 5, 5)); + rect.setSize(sf::Vector2f(box.width, box.height)); + rect.setPosition(sf::Vector2f(0.0f, position.y)); + window.draw(rect); + + if(sf::Mouse::isButtonPressed(sf::Mouse::Button::Left)) + { + setCurrentRoom(room); + } + } + + // TODO: Remove this shit + sf::String str = "# "; + str += sf::String::fromUtf8(room->name.begin(), room->name.end()); + sf::Text text(str, *font, fontSize); + text.setPosition(sf::Vector2f(position.x, floor(position.y + channelBoxHeight * 0.5f - fontHeight * 0.5f))); + text.setFillColor(ColorScheme::getTextRegularColor()); + window.draw(text); + position.y += floor(fontHeight + PADDING_BOTTOM); + } + } + + float RoomSidePanel::getWidth() + { + return floor(WIDTH * Settings::getScaling()); + } + + float RoomSidePanel::getHeight() + { + return position.y; + } +} |