From b03341ac8ddd0c933d4281a3f925215dc87c1695 Mon Sep 17 00:00:00 2001 From: collecting Date: Fri, 24 Oct 2025 00:04:24 +0000 Subject: [PATCH] feat: Add multiplayer_room_overlay.h --- src/citron/util/multiplayer_room_overlay.h | 77 ++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 src/citron/util/multiplayer_room_overlay.h diff --git a/src/citron/util/multiplayer_room_overlay.h b/src/citron/util/multiplayer_room_overlay.h new file mode 100644 index 000000000..d93580f18 --- /dev/null +++ b/src/citron/util/multiplayer_room_overlay.h @@ -0,0 +1,77 @@ +// SPDX-FileCopyrightText: Copyright 2025 citron Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include +#include +#include +#include +#include + +#include "citron/multiplayer/state.h" +#include "citron/multiplayer/chat_room.h" + +class GMainWindow; +class QSizeGrip; + +class MultiplayerRoomOverlay : public QWidget { + Q_OBJECT + +public: + explicit MultiplayerRoomOverlay(GMainWindow* parent); + ~MultiplayerRoomOverlay() override; + + void SetVisible(bool visible); + bool IsVisible() const { return is_visible; } + +public slots: + // These slots are connected to the main window to prevent crashes. + void OnEmulationStarting(); + void OnEmulationStopping(); + +protected: + void paintEvent(QPaintEvent* event) override; + void resizeEvent(QResizeEvent* event) override; + void mousePressEvent(QMouseEvent* event) override; + void mouseMoveEvent(QMouseEvent* event) override; + void mouseReleaseEvent(QMouseEvent* event) override; + bool eventFilter(QObject* watched, QEvent* event) override; + +private slots: + void UpdateRoomData(); + +private: + void UpdatePosition(); + void ConnectToRoom(); + void DisconnectFromRoom(); + + GMainWindow* main_window; + QTimer update_timer; + + // UI Elements + QLabel* players_online_label; + ChatRoom* chat_room_widget; + QGridLayout* main_layout; + QSizeGrip* size_grip; + + // Network and Data + MultiplayerState* multiplayer_state = nullptr; + std::shared_ptr room_member; + + // Display settings + bool is_visible = false; + QColor background_color; + QColor border_color; + + // Layout + int padding = 12; + int border_width = 1; + int corner_radius = 10; + + // Drag functionality + bool is_dragging = false; + bool has_been_moved = false; + QPoint drag_start_pos; + QPoint widget_start_pos; +};