mirror of
https://github.com/kunkundi/crossdesk.git
synced 2025-10-26 20:25:34 +08:00
393 lines
14 KiB
C++
393 lines
14 KiB
C++
#include "layout.h"
|
|
#include "localization.h"
|
|
#include "rd_log.h"
|
|
#include "render.h"
|
|
|
|
int Render::SettingWindow() {
|
|
if (show_settings_window_) {
|
|
if (settings_window_pos_reset_) {
|
|
const ImGuiViewport* viewport = ImGui::GetMainViewport();
|
|
if (ConfigCenter::LANGUAGE::CHINESE == localization_language_) {
|
|
ImGui::SetNextWindowPos(
|
|
ImVec2((viewport->WorkSize.x - viewport->WorkPos.x -
|
|
SETTINGS_WINDOW_WIDTH_CN) /
|
|
2,
|
|
(viewport->WorkSize.y - viewport->WorkPos.y -
|
|
SETTINGS_WINDOW_HEIGHT_CN) /
|
|
2));
|
|
|
|
ImGui::SetNextWindowSize(
|
|
ImVec2(SETTINGS_WINDOW_WIDTH_CN, SETTINGS_WINDOW_HEIGHT_CN));
|
|
} else {
|
|
ImGui::SetNextWindowPos(
|
|
ImVec2((viewport->WorkSize.x - viewport->WorkPos.x -
|
|
SETTINGS_WINDOW_WIDTH_EN) /
|
|
2,
|
|
(viewport->WorkSize.y - viewport->WorkPos.y -
|
|
SETTINGS_WINDOW_HEIGHT_EN) /
|
|
2));
|
|
|
|
ImGui::SetNextWindowSize(
|
|
ImVec2(SETTINGS_WINDOW_WIDTH_EN, SETTINGS_WINDOW_HEIGHT_EN));
|
|
}
|
|
|
|
settings_window_pos_reset_ = false;
|
|
}
|
|
|
|
// Settings
|
|
{
|
|
static int settings_items_padding = 30;
|
|
int settings_items_offset = 0;
|
|
|
|
ImGui::SetWindowFontScale(0.5f);
|
|
ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(1.0f, 1.0f, 1.0f, 1.0f));
|
|
ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 5.0f);
|
|
ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 3.0f);
|
|
|
|
ImGui::Begin(localization::settings[localization_language_index_].c_str(),
|
|
nullptr,
|
|
ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse |
|
|
ImGuiWindowFlags_NoSavedSettings);
|
|
ImGui::SetWindowFontScale(1.0f);
|
|
ImGui::SetWindowFontScale(0.5f);
|
|
ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f);
|
|
{
|
|
const char* language_items[] = {
|
|
localization::language_zh[localization_language_index_].c_str(),
|
|
localization::language_en[localization_language_index_].c_str()};
|
|
|
|
settings_items_offset += settings_items_padding;
|
|
ImGui::SetCursorPosY(settings_items_offset + 4);
|
|
ImGui::Text(
|
|
"%s", localization::language[localization_language_index_].c_str());
|
|
if (ConfigCenter::LANGUAGE::CHINESE == localization_language_) {
|
|
ImGui::SetCursorPosX(LANGUAGE_SELECT_WINDOW_PADDING_CN);
|
|
} else {
|
|
ImGui::SetCursorPosX(LANGUAGE_SELECT_WINDOW_PADDING_EN);
|
|
}
|
|
ImGui::SetCursorPosY(settings_items_offset);
|
|
ImGui::SetNextItemWidth(SETTINGS_SELECT_WINDOW_WIDTH);
|
|
|
|
ImGui::Combo("##language", &language_button_value_, language_items,
|
|
IM_ARRAYSIZE(language_items));
|
|
}
|
|
|
|
ImGui::Separator();
|
|
|
|
if (stream_window_inited_) {
|
|
ImGui::BeginDisabled();
|
|
}
|
|
|
|
{
|
|
const char* video_quality_items[] = {
|
|
localization::video_quality_high[localization_language_index_]
|
|
.c_str(),
|
|
localization::video_quality_medium[localization_language_index_]
|
|
.c_str(),
|
|
localization::video_quality_low[localization_language_index_]
|
|
.c_str()};
|
|
|
|
settings_items_offset += settings_items_padding;
|
|
ImGui::SetCursorPosY(settings_items_offset + 4);
|
|
ImGui::Text(
|
|
"%s",
|
|
localization::video_quality[localization_language_index_].c_str());
|
|
|
|
if (ConfigCenter::LANGUAGE::CHINESE == localization_language_) {
|
|
ImGui::SetCursorPosX(VIDEO_QUALITY_SELECT_WINDOW_PADDING_CN);
|
|
} else {
|
|
ImGui::SetCursorPosX(VIDEO_QUALITY_SELECT_WINDOW_PADDING_EN);
|
|
}
|
|
ImGui::SetCursorPosY(settings_items_offset);
|
|
ImGui::SetNextItemWidth(SETTINGS_SELECT_WINDOW_WIDTH);
|
|
|
|
ImGui::Combo("##video_quality", &video_quality_button_value_,
|
|
video_quality_items, IM_ARRAYSIZE(video_quality_items));
|
|
}
|
|
|
|
ImGui::Separator();
|
|
|
|
{
|
|
const char* video_frame_rate_items[] = {"30 fps", "60 fps"};
|
|
|
|
settings_items_offset += settings_items_padding;
|
|
ImGui::SetCursorPosY(settings_items_offset + 4);
|
|
ImGui::Text("%s",
|
|
localization::video_frame_rate[localization_language_index_]
|
|
.c_str());
|
|
|
|
if (ConfigCenter::LANGUAGE::CHINESE == localization_language_) {
|
|
ImGui::SetCursorPosX(VIDEO_FRAME_RATE_SELECT_WINDOW_PADDING_CN);
|
|
} else {
|
|
ImGui::SetCursorPosX(VIDEO_FRAME_RATE_SELECT_WINDOW_PADDING_EN);
|
|
}
|
|
ImGui::SetCursorPosY(settings_items_offset);
|
|
ImGui::SetNextItemWidth(SETTINGS_SELECT_WINDOW_WIDTH);
|
|
|
|
ImGui::Combo("##video_frame_rate", &video_frame_rate_button_value_,
|
|
video_frame_rate_items,
|
|
IM_ARRAYSIZE(video_frame_rate_items));
|
|
}
|
|
|
|
ImGui::Separator();
|
|
|
|
{
|
|
const char* video_encode_format_items[] = {
|
|
localization::h264[localization_language_index_].c_str(),
|
|
localization::av1[localization_language_index_].c_str()};
|
|
|
|
settings_items_offset += settings_items_padding;
|
|
ImGui::SetCursorPosY(settings_items_offset + 4);
|
|
ImGui::Text(
|
|
"%s",
|
|
localization::video_encode_format[localization_language_index_]
|
|
.c_str());
|
|
|
|
if (ConfigCenter::LANGUAGE::CHINESE == localization_language_) {
|
|
ImGui::SetCursorPosX(VIDEO_ENCODE_FORMAT_SELECT_WINDOW_PADDING_CN);
|
|
} else {
|
|
ImGui::SetCursorPosX(VIDEO_ENCODE_FORMAT_SELECT_WINDOW_PADDING_EN);
|
|
}
|
|
ImGui::SetCursorPosY(settings_items_offset);
|
|
ImGui::SetNextItemWidth(SETTINGS_SELECT_WINDOW_WIDTH);
|
|
|
|
ImGui::Combo(
|
|
"##video_encode_format", &video_encode_format_button_value_,
|
|
video_encode_format_items, IM_ARRAYSIZE(video_encode_format_items));
|
|
}
|
|
|
|
ImGui::Separator();
|
|
|
|
{
|
|
settings_items_offset += settings_items_padding;
|
|
ImGui::SetCursorPosY(settings_items_offset + 4);
|
|
ImGui::Text("%s", localization::enable_hardware_video_codec
|
|
[localization_language_index_]
|
|
.c_str());
|
|
|
|
if (ConfigCenter::LANGUAGE::CHINESE == localization_language_) {
|
|
ImGui::SetCursorPosX(ENABLE_HARDWARE_VIDEO_CODEC_CHECKBOX_PADDING_CN);
|
|
} else {
|
|
ImGui::SetCursorPosX(ENABLE_HARDWARE_VIDEO_CODEC_CHECKBOX_PADDING_EN);
|
|
}
|
|
ImGui::SetCursorPosY(settings_items_offset);
|
|
ImGui::Checkbox("##enable_hardware_video_codec",
|
|
&enable_hardware_video_codec_);
|
|
}
|
|
|
|
ImGui::Separator();
|
|
|
|
{
|
|
settings_items_offset += settings_items_padding;
|
|
ImGui::SetCursorPosY(settings_items_offset + 4);
|
|
ImGui::Text(
|
|
"%s",
|
|
localization::enable_turn[localization_language_index_].c_str());
|
|
|
|
if (ConfigCenter::LANGUAGE::CHINESE == localization_language_) {
|
|
ImGui::SetCursorPosX(ENABLE_TURN_CHECKBOX_PADDING_CN);
|
|
} else {
|
|
ImGui::SetCursorPosX(ENABLE_TURN_CHECKBOX_PADDING_EN);
|
|
}
|
|
ImGui::SetCursorPosY(settings_items_offset);
|
|
ImGui::Checkbox("##enable_turn", &enable_turn_);
|
|
}
|
|
|
|
ImGui::Separator();
|
|
|
|
{
|
|
settings_items_offset += settings_items_padding;
|
|
ImGui::SetCursorPosY(settings_items_offset + 4);
|
|
ImGui::Text(
|
|
"%s",
|
|
localization::enable_srtp[localization_language_index_].c_str());
|
|
|
|
if (ConfigCenter::LANGUAGE::CHINESE == localization_language_) {
|
|
ImGui::SetCursorPosX(ENABLE_SRTP_CHECKBOX_PADDING_CN);
|
|
} else {
|
|
ImGui::SetCursorPosX(ENABLE_SRTP_CHECKBOX_PADDING_EN);
|
|
}
|
|
ImGui::SetCursorPosY(settings_items_offset);
|
|
ImGui::Checkbox("##enable_srtp", &enable_srtp_);
|
|
}
|
|
|
|
ImGui::Separator();
|
|
|
|
{
|
|
settings_items_offset += settings_items_padding;
|
|
ImGui::SetCursorPosY(settings_items_offset + 1);
|
|
|
|
if (ImGui::Button(localization::self_hosted_server_config
|
|
[localization_language_index_]
|
|
.c_str())) {
|
|
show_self_hosted_server_config_window_ = true;
|
|
}
|
|
|
|
if (ConfigCenter::LANGUAGE::CHINESE == localization_language_) {
|
|
ImGui::SetCursorPosX(ENABLE_SELF_HOSTED_SERVER_CHECKBOX_PADDING_CN);
|
|
} else {
|
|
ImGui::SetCursorPosX(ENABLE_SELF_HOSTED_SERVER_CHECKBOX_PADDING_EN);
|
|
}
|
|
ImGui::SetCursorPosY(settings_items_offset);
|
|
ImGui::Checkbox("##enable_self_hosted_server",
|
|
&enable_self_hosted_server_);
|
|
}
|
|
#if _WIN32
|
|
ImGui::Separator();
|
|
|
|
{
|
|
settings_items_offset += settings_items_padding;
|
|
ImGui::SetCursorPosY(settings_items_offset + 4);
|
|
|
|
ImGui::Text("%s",
|
|
localization::minimize_to_tray[localization_language_index_]
|
|
.c_str());
|
|
|
|
if (ConfigCenter::LANGUAGE::CHINESE == localization_language_) {
|
|
ImGui::SetCursorPosX(ENABLE_MINIZE_TO_TRAY_PADDING_CN);
|
|
} else {
|
|
ImGui::SetCursorPosX(ENABLE_MINIZE_TO_TRAY_PADDING_EN);
|
|
}
|
|
ImGui::SetCursorPosY(settings_items_offset);
|
|
ImGui::Checkbox("##enable_minimize_to_tray_",
|
|
&enable_minimize_to_tray_);
|
|
}
|
|
#endif
|
|
if (stream_window_inited_) {
|
|
ImGui::EndDisabled();
|
|
}
|
|
|
|
if (ConfigCenter::LANGUAGE::CHINESE == localization_language_) {
|
|
ImGui::SetCursorPosX(SETTINGS_OK_BUTTON_PADDING_CN);
|
|
} else {
|
|
ImGui::SetCursorPosX(SETTINGS_OK_BUTTON_PADDING_EN);
|
|
}
|
|
|
|
settings_items_offset += settings_items_padding + 10;
|
|
ImGui::SetCursorPosY(settings_items_offset);
|
|
ImGui::PopStyleVar();
|
|
|
|
// OK
|
|
if (ImGui::Button(
|
|
localization::ok[localization_language_index_].c_str())) {
|
|
show_settings_window_ = false;
|
|
show_self_hosted_server_config_window_ = false;
|
|
|
|
// Language
|
|
if (language_button_value_ == 0) {
|
|
config_center_->SetLanguage(ConfigCenter::LANGUAGE::CHINESE);
|
|
} else {
|
|
config_center_->SetLanguage(ConfigCenter::LANGUAGE::ENGLISH);
|
|
}
|
|
language_button_value_last_ = language_button_value_;
|
|
localization_language_ = (ConfigCenter::LANGUAGE)language_button_value_;
|
|
localization_language_index_ = language_button_value_;
|
|
LOG_INFO("Set localization language: {}",
|
|
localization_language_index_ == 0 ? "zh" : "en");
|
|
|
|
// Video quality
|
|
if (video_quality_button_value_ == 0) {
|
|
config_center_->SetVideoQuality(ConfigCenter::VIDEO_QUALITY::HIGH);
|
|
} else if (video_quality_button_value_ == 1) {
|
|
config_center_->SetVideoQuality(ConfigCenter::VIDEO_QUALITY::MEDIUM);
|
|
} else {
|
|
config_center_->SetVideoQuality(ConfigCenter::VIDEO_QUALITY::LOW);
|
|
}
|
|
video_quality_button_value_last_ = video_quality_button_value_;
|
|
|
|
// Video encode format
|
|
if (video_encode_format_button_value_ == 0) {
|
|
config_center_->SetVideoEncodeFormat(
|
|
ConfigCenter::VIDEO_ENCODE_FORMAT::H264);
|
|
} else if (video_encode_format_button_value_ == 1) {
|
|
config_center_->SetVideoEncodeFormat(
|
|
ConfigCenter::VIDEO_ENCODE_FORMAT::AV1);
|
|
}
|
|
video_encode_format_button_value_last_ =
|
|
video_encode_format_button_value_;
|
|
|
|
// Hardware video codec
|
|
if (enable_hardware_video_codec_) {
|
|
config_center_->SetHardwareVideoCodec(true);
|
|
} else {
|
|
config_center_->SetHardwareVideoCodec(false);
|
|
}
|
|
enable_hardware_video_codec_last_ = enable_hardware_video_codec_;
|
|
|
|
// TURN mode
|
|
if (enable_turn_) {
|
|
config_center_->SetTurn(true);
|
|
} else {
|
|
config_center_->SetTurn(false);
|
|
}
|
|
enable_turn_last_ = enable_turn_;
|
|
|
|
// SRTP
|
|
if (enable_srtp_) {
|
|
config_center_->SetSrtp(true);
|
|
} else {
|
|
config_center_->SetSrtp(false);
|
|
}
|
|
enable_srtp_last_ = enable_srtp_;
|
|
|
|
if (enable_self_hosted_server_) {
|
|
config_center_->SetSelfHosted(true);
|
|
} else {
|
|
config_center_->SetSelfHosted(false);
|
|
}
|
|
|
|
settings_window_pos_reset_ = true;
|
|
|
|
// Recreate peer instance
|
|
LoadSettingsFromCacheFile();
|
|
|
|
// Recreate peer instance
|
|
if (!stream_window_inited_) {
|
|
LOG_INFO("Recreate peer instance");
|
|
CleanupPeers();
|
|
CreateConnectionPeer();
|
|
}
|
|
}
|
|
|
|
ImGui::SameLine();
|
|
// Cancel
|
|
if (ImGui::Button(
|
|
localization::cancel[localization_language_index_].c_str())) {
|
|
show_settings_window_ = false;
|
|
show_self_hosted_server_config_window_ = false;
|
|
|
|
if (language_button_value_ != language_button_value_last_) {
|
|
language_button_value_ = language_button_value_last_;
|
|
}
|
|
|
|
if (video_quality_button_value_ != video_quality_button_value_last_) {
|
|
video_quality_button_value_ = video_quality_button_value_last_;
|
|
}
|
|
|
|
if (video_encode_format_button_value_ !=
|
|
video_encode_format_button_value_last_) {
|
|
video_encode_format_button_value_ =
|
|
video_encode_format_button_value_last_;
|
|
}
|
|
|
|
if (enable_hardware_video_codec_ != enable_hardware_video_codec_last_) {
|
|
enable_hardware_video_codec_ = enable_hardware_video_codec_last_;
|
|
}
|
|
|
|
if (enable_turn_ != enable_turn_last_) {
|
|
enable_turn_ = enable_turn_last_;
|
|
}
|
|
|
|
settings_window_pos_reset_ = true;
|
|
}
|
|
ImGui::SetWindowFontScale(1.0f);
|
|
ImGui::SetWindowFontScale(0.5f);
|
|
ImGui::End();
|
|
ImGui::PopStyleVar(2);
|
|
ImGui::PopStyleColor();
|
|
ImGui::SetWindowFontScale(1.0f);
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
} |