diff --git a/src/single_window/control_bar.cpp b/src/single_window/control_bar.cpp index 1fcd3ad..59a76a8 100644 --- a/src/single_window/control_bar.cpp +++ b/src/single_window/control_bar.cpp @@ -13,41 +13,36 @@ int Render::ControlBar() { ImGui::SetCursorPosX(is_control_bar_in_left_ ? (control_window_width_ + 5) : 53); // Mouse control - std::string mouse = ICON_FA_COMPUTER_MOUSE; + std::string mouse = + mouse_control_button_pressed_ ? ICON_FA_HAND_BACK_FIST : ICON_FA_HAND; if (ImGui::Button(mouse.c_str(), ImVec2(25, 25))) { - if (mouse_control_button_label_ == - localization::control_mouse[localization_language_index_] && - connection_established_) { - mouse_control_button_pressed_ = true; + if (connection_established_) { control_mouse_ = true; - mouse_control_button_label_ = - localization::release_mouse[localization_language_index_]; } else { control_mouse_ = false; - mouse_control_button_label_ = - localization::control_mouse[localization_language_index_]; } mouse_control_button_pressed_ = !mouse_control_button_pressed_; + mouse_control_button_label_ = + mouse_control_button_pressed_ + ? localization::release_mouse[localization_language_index_] + : localization::control_mouse[localization_language_index_]; } ImGui::SameLine(); // Audio capture - std::string audio = audio_capture_button_pressed_ ? ICON_FA_VOLUME_HIGH - : ICON_FA_VOLUME_XMARK; + std::string audio = audio_capture_button_pressed_ ? ICON_FA_VOLUME_XMARK + : ICON_FA_VOLUME_HIGH; if (ImGui::Button(audio.c_str(), ImVec2(25, 25))) { - if (mouse_control_button_label_ == - localization::audio_capture[localization_language_index_] && - connection_established_) { - audio_capture_button_pressed_ = true; + if (connection_established_) { audio_capture_ = true; - audio_capture_button_label_ = - localization::mute[localization_language_index_]; } else { - control_mouse_ = false; - audio_capture_button_label_ = - localization::audio_capture[localization_language_index_]; + audio_capture_ = false; } audio_capture_button_pressed_ = !audio_capture_button_pressed_; + audio_capture_button_label_ = + audio_capture_button_pressed_ + ? localization::audio_capture[localization_language_index_] + : localization::mute[localization_language_index_]; RemoteAction remote_action; remote_action.type = ControlType::audio_capture; @@ -62,6 +57,10 @@ int Render::ControlBar() { fullscreen_button_pressed_ ? ICON_FA_COMPRESS : ICON_FA_EXPAND; if (ImGui::Button(fullscreen.c_str(), ImVec2(25, 25))) { fullscreen_button_pressed_ = !fullscreen_button_pressed_; + fullscreen_button_label_ = + fullscreen_button_pressed_ + ? localization::exit_fullscreen[localization_language_index_] + : localization::fullscreen[localization_language_index_]; if (fullscreen_button_pressed_) { SDL_SetWindowFullscreen(main_window_, SDL_WINDOW_FULLSCREEN_DESKTOP); } else { diff --git a/src/single_window/render.cpp b/src/single_window/render.cpp index a4c2e66..7f6b6ee 100644 --- a/src/single_window/render.cpp +++ b/src/single_window/render.cpp @@ -327,8 +327,9 @@ int Render::Run() { config.GlyphMinAdvanceX = 13.0f; // Use if you want to make the icon monospaced static const ImWchar icon_ranges[] = {ICON_MIN_FA, ICON_MAX_FA, 0}; - io.Fonts->AddFontFromMemoryTTF(fa_regular_400_ttf, sizeof(fa_regular_400_ttf), - 30.0f, &config, icon_ranges); + // io.Fonts->AddFontFromMemoryTTF(fa_regular_400_ttf, + // sizeof(fa_regular_400_ttf), + // 30.0f, &config, icon_ranges); io.Fonts->AddFontFromMemoryTTF(fa_solid_900_ttf, sizeof(fa_solid_900_ttf), 30.0f, &config, icon_ranges); @@ -424,16 +425,22 @@ int Render::Run() { connect_button_pressed_ ? localization::disconnect[localization_language_index_] : localization::connect[localization_language_index_]; - fullscreen_button_label_ = - fullscreen_button_pressed_ - ? localization::exit_fullscreen[localization_language_index_] - : localization::fullscreen[localization_language_index_]; mouse_control_button_label_ = mouse_control_button_pressed_ ? localization::release_mouse[localization_language_index_] : localization::control_mouse[localization_language_index_]; + audio_capture_button_label_ = + audio_capture_button_pressed_ + ? localization::mute[localization_language_index_] + : localization::audio_capture[localization_language_index_]; + + fullscreen_button_label_ = + fullscreen_button_pressed_ + ? localization::exit_fullscreen[localization_language_index_] + : localization::fullscreen[localization_language_index_]; + settings_button_label_ = localization::settings[localization_language_index_]; inited_ = true; @@ -519,6 +526,7 @@ int Render::Run() { connection_established_ = false; received_frame_ = false; is_client_mode_ = false; + audio_capture_button_pressed_ = false; SDL_RestoreWindow(main_window_); continue; } else { diff --git a/src/single_window/render.h b/src/single_window/render.h index 1a15374..a228991 100644 --- a/src/single_window/render.h +++ b/src/single_window/render.h @@ -185,7 +185,7 @@ class Render { bool control_bar_expand_ = true; bool fullscreen_button_pressed_ = false; bool mouse_control_button_pressed_ = false; - bool audio_capture_button_pressed_ = true; + bool audio_capture_button_pressed_ = false; bool show_settings_window_ = false; bool received_frame_ = false; bool is_create_connection_ = false; diff --git a/src/single_window/render_callback_func.cpp b/src/single_window/render_callback_func.cpp index e394469..b464697 100644 --- a/src/single_window/render_callback_func.cpp +++ b/src/single_window/render_callback_func.cpp @@ -205,6 +205,11 @@ void Render::OnConnectionStatusCb(ConnectionStatus status, void *user_data) { render->start_mouse_control_ = false; render->connection_established_ = false; render->control_mouse_ = false; + if (render->audio_capture_) { + render->StopSpeakerCapture(); + render->audio_capture_ = false; + render->audio_capture_button_pressed_ = false; + } render->exit_video_window_ = false; render->remote_password_.clear(); if (render->dst_buffer_) { diff --git a/src/single_window/title_bar.cpp b/src/single_window/title_bar.cpp index 74937e4..7dda231 100644 --- a/src/single_window/title_bar.cpp +++ b/src/single_window/title_bar.cpp @@ -14,6 +14,7 @@ int Render::TitleBar() { ImGuiChildFlags_Border, ImGuiWindowFlags_MenuBar | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoBringToFrontOnFocus); + ImDrawList* draw_list = ImGui::GetWindowDrawList(); if (ImGui::BeginMenuBar()) { ImGui::SetCursorPosX(main_window_width_ - (streaming_ @@ -23,7 +24,10 @@ int Render::TitleBar() { ImGui::PushStyleColor(ImGuiCol_HeaderActive, ImVec4(1.0f, 1.0f, 1.0f, 1.0f)); if (!streaming_) { - if (ImGui::BeginMenu(ICON_FA_BARS)) { + float bar_pos_x = ImGui::GetCursorPosX() + 7; + float bar_pos_y = ImGui::GetCursorPosY() + 15; + std::string menu_button = " "; // ICON_FA_BARS; + if (ImGui::BeginMenu(menu_button.c_str())) { ImGui::SetWindowFontScale(0.5f); if (ImGui::MenuItem( localization::settings[localization_language_index_].c_str())) { @@ -36,6 +40,15 @@ int Render::TitleBar() { ImGui::SetWindowFontScale(1.0f); ImGui::EndMenu(); } + draw_list->AddLine(ImVec2(bar_pos_x, bar_pos_y - 6), + ImVec2(bar_pos_x + 12, bar_pos_y - 6), + IM_COL32(0, 0, 0, 255)); + draw_list->AddLine(ImVec2(bar_pos_x, bar_pos_y), + ImVec2(bar_pos_x + 12, bar_pos_y), + IM_COL32(0, 0, 0, 255)); + draw_list->AddLine(ImVec2(bar_pos_x, bar_pos_y + 6), + ImVec2(bar_pos_x + 12, bar_pos_y + 6), + IM_COL32(0, 0, 0, 255)); ImGui::PopStyleColor(2); { @@ -51,11 +64,17 @@ int Render::TitleBar() { ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0, 0, 0, 0.1f)); ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(1.0f, 1.0f, 1.0f, 1.0f)); - std::string window_minimize_button = ICON_FA_MINUS; + + float minimize_pos_x = ImGui::GetCursorPosX() + 12; + float minimize_pos_y = ImGui::GetCursorPosY() + 15; + std::string window_minimize_button = "##minimize"; // ICON_FA_MINUS; if (ImGui::Button(window_minimize_button.c_str(), ImVec2(BUTTON_PADDING, 30))) { SDL_MinimizeWindow(main_window_); } + draw_list->AddLine(ImVec2(minimize_pos_x, minimize_pos_y), + ImVec2(minimize_pos_x + 12, minimize_pos_y), + IM_COL32(0, 0, 0, 255)); ImGui::PopStyleColor(2); if (streaming_) { @@ -65,19 +84,39 @@ int Render::TitleBar() { ImVec4(1.0f, 1.0f, 1.0f, 1.0f)); if (window_maximized_) { - std::string window_restore_button = ICON_FA_WINDOW_RESTORE; + float pos_x_top = ImGui::GetCursorPosX() + 11; + float pos_y_top = ImGui::GetCursorPosY() + 11; + float pos_x_bottom = ImGui::GetCursorPosX() + 13; + float pos_y_bottom = ImGui::GetCursorPosY() + 9; + std::string window_restore_button = + "##restore"; // ICON_FA_WINDOW_RESTORE; if (ImGui::Button(window_restore_button.c_str(), ImVec2(BUTTON_PADDING, 30))) { SDL_RestoreWindow(main_window_); window_maximized_ = !window_maximized_; } + draw_list->AddRect(ImVec2(pos_x_top, pos_y_top), + ImVec2(pos_x_top + 12, pos_y_top + 12), + IM_COL32(0, 0, 0, 255)); + draw_list->AddRect(ImVec2(pos_x_bottom, pos_y_bottom), + ImVec2(pos_x_bottom + 12, pos_y_bottom + 12), + IM_COL32(0, 0, 0, 255)); + draw_list->AddRectFilled(ImVec2(pos_x_top + 1, pos_y_top + 1), + ImVec2(pos_x_top + 11, pos_y_top + 11), + IM_COL32(255, 255, 255, 255)); } else { - std::string window_maximize_button = ICON_FA_SQUARE_FULL; + float maximize_pos_x = ImGui::GetCursorPosX() + 12; + float maximize_pos_y = ImGui::GetCursorPosY() + 10; + std::string window_maximize_button = + "##maximize"; // ICON_FA_SQUARE_FULL; if (ImGui::Button(window_maximize_button.c_str(), ImVec2(BUTTON_PADDING, 30))) { SDL_MaximizeWindow(main_window_); window_maximized_ = !window_maximized_; } + draw_list->AddRect(ImVec2(maximize_pos_x, maximize_pos_y), + ImVec2(maximize_pos_x + 12, maximize_pos_y + 12), + IM_COL32(0, 0, 0, 255)); } ImGui::PopStyleColor(2); } @@ -85,12 +124,27 @@ int Render::TitleBar() { ImGui::SetCursorPosX(main_window_width_ - BUTTON_PADDING); ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(1.0f, 0, 0, 1.0f)); ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(1.0f, 0, 0, 0.5f)); - std::string close_button = ICON_FA_XMARK; + + float xmark_pos_x = ImGui::GetCursorPosX() + 18; + float xmark_pos_y = ImGui::GetCursorPosY() + 16; + float xmark_size = 12.0f; + std::string close_button = "##xmark"; // ICON_FA_XMARK; if (ImGui::Button(close_button.c_str(), ImVec2(BUTTON_PADDING, 30))) { SDL_Event event; event.type = SDL_QUIT; SDL_PushEvent(&event); } + draw_list->AddLine(ImVec2(xmark_pos_x - xmark_size / 2 - 0.25f, + xmark_pos_y - xmark_size / 2 + 0.75f), + ImVec2(xmark_pos_x + xmark_size / 2 - 1.5f, + xmark_pos_y + xmark_size / 2 - 0.5f), + IM_COL32(0, 0, 0, 255)); + draw_list->AddLine(ImVec2(xmark_pos_x + xmark_size / 2 - 1.75f, + xmark_pos_y - xmark_size / 2 + 0.75f), + ImVec2(xmark_pos_x - xmark_size / 2, + xmark_pos_y + xmark_size / 2 - 1.0f), + IM_COL32(0, 0, 0, 255)); + ImGui::PopStyleColor(2); ImGui::PopStyleColor(1);