mirror of
https://github.com/kunkundi/crossdesk.git
synced 2026-03-26 03:07:30 +08:00
[feat] add server window
This commit is contained in:
@@ -939,6 +939,55 @@ int Render::DestroyStreamWindow() {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Render::CreateServerWindow() {
|
||||||
|
if (server_window_created_) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
server_ctx_ = ImGui::CreateContext();
|
||||||
|
if (!server_ctx_) {
|
||||||
|
LOG_ERROR("Server context is null");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
ImGui::SetCurrentContext(server_ctx_);
|
||||||
|
if (!SDL_CreateWindowAndRenderer(
|
||||||
|
"Server window", (int)server_window_width_,
|
||||||
|
(int)server_window_height_,
|
||||||
|
SDL_WINDOW_HIGH_PIXEL_DENSITY | SDL_WINDOW_BORDERLESS,
|
||||||
|
&server_window_, &server_renderer_)) {
|
||||||
|
LOG_ERROR("Error creating server_window_ and server_renderer_: {}",
|
||||||
|
SDL_GetError());
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
SDL_SetWindowResizable(server_window_, true);
|
||||||
|
// for window region action
|
||||||
|
SDL_SetWindowHitTest(server_window_, HitTestCallback, this);
|
||||||
|
SetupFontAndStyle(false);
|
||||||
|
ImGui_ImplSDL3_InitForSDLRenderer(server_window_, server_renderer_);
|
||||||
|
ImGui_ImplSDLRenderer3_Init(server_renderer_);
|
||||||
|
server_window_created_ = true;
|
||||||
|
server_window_inited_ = true;
|
||||||
|
LOG_INFO("Server window inited");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Render::DestroyServerWindow() {
|
||||||
|
if (server_ctx_) {
|
||||||
|
ImGui::SetCurrentContext(server_ctx_);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (server_renderer_) {
|
||||||
|
SDL_DestroyRenderer(server_renderer_);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (server_window_) {
|
||||||
|
SDL_DestroyWindow(server_window_);
|
||||||
|
}
|
||||||
|
|
||||||
|
server_window_created_ = false;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int Render::SetupFontAndStyle(bool main_window) {
|
int Render::SetupFontAndStyle(bool main_window) {
|
||||||
float font_size = 32.0f;
|
float font_size = 32.0f;
|
||||||
|
|
||||||
@@ -1183,6 +1232,23 @@ int Render::DrawStreamWindow() {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Render::DrawServerWindow() {
|
||||||
|
if (!server_ctx_) {
|
||||||
|
LOG_ERROR("Server context is null");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
ImGui::SetCurrentContext(server_ctx_);
|
||||||
|
ImGui_ImplSDLRenderer3_NewFrame();
|
||||||
|
ImGui_ImplSDL3_NewFrame();
|
||||||
|
ImGui::NewFrame();
|
||||||
|
ServerWindow();
|
||||||
|
ImGui::Render();
|
||||||
|
SDL_RenderClear(server_renderer_);
|
||||||
|
ImGui_ImplSDLRenderer3_RenderDrawData(ImGui::GetDrawData(), server_renderer_);
|
||||||
|
SDL_RenderPresent(server_renderer_);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int Render::Run() {
|
int Render::Run() {
|
||||||
latest_version_info_ = CheckUpdate();
|
latest_version_info_ = CheckUpdate();
|
||||||
if (!latest_version_info_.empty() &&
|
if (!latest_version_info_.empty() &&
|
||||||
@@ -1357,12 +1423,17 @@ void Render::MainLoop() {
|
|||||||
UpdateLabels();
|
UpdateLabels();
|
||||||
HandleRecentConnections();
|
HandleRecentConnections();
|
||||||
HandleStreamWindow();
|
HandleStreamWindow();
|
||||||
|
HandleServerWindow();
|
||||||
|
|
||||||
DrawMainWindow();
|
DrawMainWindow();
|
||||||
if (stream_window_inited_) {
|
if (stream_window_inited_) {
|
||||||
DrawStreamWindow();
|
DrawStreamWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (need_to_send_host_info_) {
|
||||||
|
DrawServerWindow();
|
||||||
|
}
|
||||||
|
|
||||||
UpdateInteractions();
|
UpdateInteractions();
|
||||||
|
|
||||||
if (need_to_send_host_info_) {
|
if (need_to_send_host_info_) {
|
||||||
@@ -1454,6 +1525,13 @@ void Render::HandleStreamWindow() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Render::HandleServerWindow() {
|
||||||
|
if (need_to_create_server_window_) {
|
||||||
|
CreateServerWindow();
|
||||||
|
need_to_create_server_window_ = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Render::Cleanup() {
|
void Render::Cleanup() {
|
||||||
Clipboard::StopMonitoring();
|
Clipboard::StopMonitoring();
|
||||||
|
|
||||||
|
|||||||
@@ -181,6 +181,7 @@ class Render {
|
|||||||
void UpdateInteractions();
|
void UpdateInteractions();
|
||||||
void HandleRecentConnections();
|
void HandleRecentConnections();
|
||||||
void HandleStreamWindow();
|
void HandleStreamWindow();
|
||||||
|
void HandleServerWindow();
|
||||||
void Cleanup();
|
void Cleanup();
|
||||||
void CleanupFactories();
|
void CleanupFactories();
|
||||||
void CleanupPeer(std::shared_ptr<SubStreamWindowProperties> props);
|
void CleanupPeer(std::shared_ptr<SubStreamWindowProperties> props);
|
||||||
@@ -202,6 +203,7 @@ class Render {
|
|||||||
int MainWindow();
|
int MainWindow();
|
||||||
int UpdateNotificationWindow();
|
int UpdateNotificationWindow();
|
||||||
int StreamWindow();
|
int StreamWindow();
|
||||||
|
int ServerWindow();
|
||||||
int LocalWindow();
|
int LocalWindow();
|
||||||
int RemoteWindow();
|
int RemoteWindow();
|
||||||
int RecentConnectionsWindow();
|
int RecentConnectionsWindow();
|
||||||
@@ -226,11 +228,15 @@ class Render {
|
|||||||
int DestroyMainWindow();
|
int DestroyMainWindow();
|
||||||
int CreateStreamWindow();
|
int CreateStreamWindow();
|
||||||
int DestroyStreamWindow();
|
int DestroyStreamWindow();
|
||||||
|
int CreateServerWindow();
|
||||||
|
int DestroyServerWindow();
|
||||||
int SetupFontAndStyle(bool main_window);
|
int SetupFontAndStyle(bool main_window);
|
||||||
int DestroyMainWindowContext();
|
int DestroyMainWindowContext();
|
||||||
int DestroyStreamWindowContext();
|
int DestroyStreamWindowContext();
|
||||||
|
int DestroyServerWindowContext();
|
||||||
int DrawMainWindow();
|
int DrawMainWindow();
|
||||||
int DrawStreamWindow();
|
int DrawStreamWindow();
|
||||||
|
int DrawServerWindow();
|
||||||
int ConfirmDeleteConnection();
|
int ConfirmDeleteConnection();
|
||||||
int NetTrafficStats(std::shared_ptr<SubStreamWindowProperties>& props);
|
int NetTrafficStats(std::shared_ptr<SubStreamWindowProperties>& props);
|
||||||
void DrawConnectionStatusText(
|
void DrawConnectionStatusText(
|
||||||
@@ -487,6 +493,25 @@ class Render {
|
|||||||
float stream_window_dpi_scaling_w_ = 1.0f;
|
float stream_window_dpi_scaling_w_ = 1.0f;
|
||||||
float stream_window_dpi_scaling_h_ = 1.0f;
|
float stream_window_dpi_scaling_h_ = 1.0f;
|
||||||
|
|
||||||
|
// server window render
|
||||||
|
SDL_Window* server_window_ = nullptr;
|
||||||
|
SDL_Renderer* server_renderer_ = nullptr;
|
||||||
|
ImGuiContext* server_ctx_ = nullptr;
|
||||||
|
|
||||||
|
// server window properties
|
||||||
|
bool need_to_create_server_window_ = false;
|
||||||
|
bool server_window_created_ = false;
|
||||||
|
bool server_window_inited_ = false;
|
||||||
|
int server_window_width_default_ = 600;
|
||||||
|
int server_window_height_default_ = 400;
|
||||||
|
float server_window_width_ = 600;
|
||||||
|
float server_window_height_ = 400;
|
||||||
|
SDL_PixelFormat server_pixformat_ = SDL_PIXELFORMAT_NV12;
|
||||||
|
int server_window_width_real_ = 600;
|
||||||
|
int server_window_height_real_ = 400;
|
||||||
|
float server_window_dpi_scaling_w_ = 1.0f;
|
||||||
|
float server_window_dpi_scaling_h_ = 1.0f;
|
||||||
|
|
||||||
bool label_inited_ = false;
|
bool label_inited_ = false;
|
||||||
bool connect_button_pressed_ = false;
|
bool connect_button_pressed_ = false;
|
||||||
bool password_validating_ = false;
|
bool password_validating_ = false;
|
||||||
|
|||||||
@@ -622,6 +622,7 @@ void Render::OnConnectionStatusCb(ConnectionStatus status, const char* user_id,
|
|||||||
|
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case ConnectionStatus::Connected: {
|
case ConnectionStatus::Connected: {
|
||||||
|
render->need_to_create_server_window_ = true;
|
||||||
render->need_to_send_host_info_ = true;
|
render->need_to_send_host_info_ = true;
|
||||||
render->start_screen_capturer_ = true;
|
render->start_screen_capturer_ = true;
|
||||||
render->start_speaker_capturer_ = true;
|
render->start_speaker_capturer_ = true;
|
||||||
@@ -647,6 +648,8 @@ void Render::OnConnectionStatusCb(ConnectionStatus status, const char* user_id,
|
|||||||
kv.second == ConnectionStatus::Failed ||
|
kv.second == ConnectionStatus::Failed ||
|
||||||
kv.second == ConnectionStatus::Disconnected;
|
kv.second == ConnectionStatus::Disconnected;
|
||||||
})) {
|
})) {
|
||||||
|
render->need_to_create_server_window_ = false;
|
||||||
|
render->need_to_send_host_info_ = false;
|
||||||
render->start_screen_capturer_ = false;
|
render->start_screen_capturer_ = false;
|
||||||
render->start_speaker_capturer_ = false;
|
render->start_speaker_capturer_ = false;
|
||||||
render->start_mouse_controller_ = false;
|
render->start_mouse_controller_ = false;
|
||||||
|
|||||||
23
src/gui/windows/server_window.cpp
Normal file
23
src/gui/windows/server_window.cpp
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
#include "render.h"
|
||||||
|
|
||||||
|
namespace crossdesk {
|
||||||
|
int Render::ServerWindow() {
|
||||||
|
ImGui::SetNextWindowSize(
|
||||||
|
ImVec2(main_window_width_ - 2 * main_child_window_x_padding_,
|
||||||
|
main_window_height_ - status_bar_height_ -
|
||||||
|
main_window_text_y_padding_ - main_child_window_y_padding_),
|
||||||
|
ImGuiCond_Always);
|
||||||
|
ImGui::SetNextWindowPos(
|
||||||
|
ImVec2(main_child_window_x_padding_, main_window_text_y_padding_),
|
||||||
|
ImGuiCond_Always);
|
||||||
|
ImGui::Begin("##server_window", nullptr,
|
||||||
|
ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize |
|
||||||
|
ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoCollapse |
|
||||||
|
ImGuiWindowFlags_NoScrollbar |
|
||||||
|
ImGuiWindowFlags_NoScrollWithMouse);
|
||||||
|
// server window content goes here
|
||||||
|
ImGui::Text("Server Window Content");
|
||||||
|
ImGui::End();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
} // namespace crossdesk
|
||||||
Reference in New Issue
Block a user