aboutsummaryrefslogtreecommitdiff
path: root/src/RoomSidePanel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/RoomSidePanel.cpp')
-rw-r--r--src/RoomSidePanel.cpp88
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;
+ }
+}