mirror of
https://github.com/kunkundi/crossdesk.git
synced 2026-04-06 10:01:43 +08:00
[fix] fix DPI scaling issues
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
#include "rd_log.h"
|
||||
#include "render.h"
|
||||
|
||||
#define BUTTON_PADDING 36.0f
|
||||
#define BUTTON_PADDING 36.0f * dpi_scale_
|
||||
#define NEW_VERSION_ICON_RENDER_TIME_INTERVAL 2000
|
||||
|
||||
namespace crossdesk {
|
||||
@@ -11,7 +11,6 @@ int Render::TitleBar(bool main_window) {
|
||||
ImGui::PushStyleColor(ImGuiCol_MenuBarBg, ImVec4(1.0f, 1.0f, 1.0f, 0.0f));
|
||||
ImGui::PushStyleColor(ImGuiCol_ChildBg, ImVec4(1.0f, 1.0f, 1.0f, 1.0f));
|
||||
ImGui::SetNextWindowPos(ImVec2(0, 0), ImGuiCond_Always);
|
||||
ImGui::SetWindowFontScale(0.8f);
|
||||
ImGui::BeginChild(
|
||||
main_window ? "MainTitleBar" : "StreamTitleBar",
|
||||
ImVec2(main_window ? main_window_width_ : stream_window_width_,
|
||||
@@ -19,23 +18,24 @@ int Render::TitleBar(bool main_window) {
|
||||
ImGuiChildFlags_Border,
|
||||
ImGuiWindowFlags_MenuBar | ImGuiWindowFlags_NoDecoration |
|
||||
ImGuiWindowFlags_NoBringToFrontOnFocus);
|
||||
ImGui::SetWindowFontScale(1.0f);
|
||||
|
||||
ImGui::PopStyleColor();
|
||||
|
||||
ImDrawList* draw_list = ImGui::GetWindowDrawList();
|
||||
if (ImGui::BeginMenuBar()) {
|
||||
ImGui::SetWindowFontScale(0.8f);
|
||||
ImGui::SetCursorPosX(
|
||||
(main_window ? main_window_width_ : stream_window_width_) -
|
||||
(BUTTON_PADDING * 3 - 3));
|
||||
(BUTTON_PADDING * 3 - 3.0f * dpi_scale_));
|
||||
ImGui::PushStyleColor(ImGuiCol_HeaderHovered, ImVec4(0, 0, 0, 0.1f));
|
||||
ImGui::PushStyleColor(ImGuiCol_HeaderActive,
|
||||
ImVec4(1.0f, 1.0f, 1.0f, 1.0f));
|
||||
if (main_window) {
|
||||
float bar_pos_x = ImGui::GetCursorPosX() + 6;
|
||||
float bar_pos_y = ImGui::GetCursorPosY() + 15;
|
||||
float bar_pos_x = ImGui::GetCursorPosX() + 6 * dpi_scale_;
|
||||
float bar_pos_y = ImGui::GetCursorPosY() + 15 * dpi_scale_;
|
||||
std::string menu_button = " "; // ICON_FA_BARS;
|
||||
if (ImGui::BeginMenu(menu_button.c_str())) {
|
||||
ImGui::SetWindowFontScale(0.5f);
|
||||
ImGui::SetWindowFontScale(0.6f);
|
||||
if (ImGui::MenuItem(
|
||||
localization::settings[localization_language_index_].c_str())) {
|
||||
show_settings_window_ = true;
|
||||
@@ -77,7 +77,7 @@ int Render::TitleBar(bool main_window) {
|
||||
|
||||
if (update_available_ && ImGui::IsItemHovered()) {
|
||||
ImGui::BeginTooltip();
|
||||
ImGui::SetWindowFontScale(0.5f);
|
||||
ImGui::SetWindowFontScale(0.5f * dpi_scale_);
|
||||
std::string new_version_available_str =
|
||||
localization::new_version_available
|
||||
[localization_language_index_] +
|
||||
@@ -87,13 +87,12 @@ int Render::TitleBar(bool main_window) {
|
||||
ImGui::EndTooltip();
|
||||
}
|
||||
|
||||
ImGui::SetWindowFontScale(1.0f);
|
||||
ImGui::EndMenu();
|
||||
} else {
|
||||
show_new_version_icon_in_menu_ = true;
|
||||
}
|
||||
|
||||
float menu_bar_line_size = 15.0f;
|
||||
float menu_bar_line_size = 15.0f * dpi_scale_;
|
||||
draw_list->AddLine(ImVec2(bar_pos_x, bar_pos_y - 6),
|
||||
ImVec2(bar_pos_x + menu_bar_line_size, bar_pos_y - 6),
|
||||
IM_COL32(0, 0, 0, 255));
|
||||
@@ -136,6 +135,8 @@ int Render::TitleBar(bool main_window) {
|
||||
SelfHostedServerWindow();
|
||||
AboutWindow();
|
||||
}
|
||||
} else {
|
||||
ImGui::SetWindowFontScale(1.2f);
|
||||
}
|
||||
|
||||
ImGui::PopStyleColor(2);
|
||||
@@ -148,15 +149,15 @@ int Render::TitleBar(bool main_window) {
|
||||
ImGui::PushStyleColor(ImGuiCol_ButtonActive,
|
||||
ImVec4(1.0f, 1.0f, 1.0f, 1.0f));
|
||||
|
||||
float minimize_pos_x = ImGui::GetCursorPosX() + 12;
|
||||
float minimize_pos_y = ImGui::GetCursorPosY() + 15;
|
||||
float minimize_pos_x = ImGui::GetCursorPosX() + 12.0f * dpi_scale_;
|
||||
float minimize_pos_y = ImGui::GetCursorPosY() + 15.0f * dpi_scale_;
|
||||
std::string window_minimize_button = "##minimize"; // ICON_FA_MINUS;
|
||||
if (ImGui::Button(window_minimize_button.c_str(),
|
||||
ImVec2(BUTTON_PADDING, 30))) {
|
||||
ImVec2(BUTTON_PADDING, 30.0f * dpi_scale_))) {
|
||||
SDL_MinimizeWindow(main_window ? main_window_ : stream_window_);
|
||||
}
|
||||
draw_list->AddLine(ImVec2(minimize_pos_x, minimize_pos_y),
|
||||
ImVec2(minimize_pos_x + 12, minimize_pos_y),
|
||||
ImVec2(minimize_pos_x + 12 * dpi_scale_, minimize_pos_y),
|
||||
IM_COL32(0, 0, 0, 255));
|
||||
ImGui::PopStyleColor(2);
|
||||
|
||||
@@ -167,33 +168,36 @@ int Render::TitleBar(bool main_window) {
|
||||
ImVec4(1.0f, 1.0f, 1.0f, 1.0f));
|
||||
|
||||
if (window_maximized_) {
|
||||
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;
|
||||
float pos_x_top = ImGui::GetCursorPosX() + 11 * dpi_scale_;
|
||||
float pos_y_top = ImGui::GetCursorPosY() + 11 * dpi_scale_;
|
||||
float pos_x_bottom = ImGui::GetCursorPosX() + 13 * dpi_scale_;
|
||||
float pos_y_bottom = ImGui::GetCursorPosY() + 9 * dpi_scale_;
|
||||
std::string window_restore_button =
|
||||
"##restore"; // ICON_FA_WINDOW_RESTORE;
|
||||
if (ImGui::Button(window_restore_button.c_str(),
|
||||
ImVec2(BUTTON_PADDING, 30))) {
|
||||
ImVec2(BUTTON_PADDING, 30.0f * dpi_scale_))) {
|
||||
SDL_RestoreWindow(stream_window_);
|
||||
window_maximized_ = false;
|
||||
}
|
||||
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_top, pos_y_top),
|
||||
ImVec2(pos_x_top + 12 * dpi_scale_, pos_y_top + 12 * dpi_scale_),
|
||||
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),
|
||||
ImVec2(pos_x_bottom + 12 * dpi_scale_,
|
||||
pos_y_bottom + 12 * dpi_scale_),
|
||||
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));
|
||||
draw_list->AddRectFilled(
|
||||
ImVec2(pos_x_top + 1 * dpi_scale_, pos_y_top + 1 * dpi_scale_),
|
||||
ImVec2(pos_x_top + 11 * dpi_scale_, pos_y_top + 11 * dpi_scale_),
|
||||
IM_COL32(255, 255, 255, 255));
|
||||
} else {
|
||||
float maximize_pos_x = ImGui::GetCursorPosX() + 12;
|
||||
float maximize_pos_y = ImGui::GetCursorPosY() + 10;
|
||||
float maximize_pos_x = ImGui::GetCursorPosX() + 12 * dpi_scale_;
|
||||
float maximize_pos_y = ImGui::GetCursorPosY() + 10 * dpi_scale_;
|
||||
std::string window_maximize_button =
|
||||
"##maximize"; // ICON_FA_SQUARE_FULL;
|
||||
if (ImGui::Button(window_maximize_button.c_str(),
|
||||
ImVec2(BUTTON_PADDING, 30))) {
|
||||
ImVec2(BUTTON_PADDING, 30.0f * dpi_scale_))) {
|
||||
SDL_MaximizeWindow(stream_window_);
|
||||
window_maximized_ = !window_maximized_;
|
||||
}
|
||||
@@ -210,11 +214,12 @@ int Render::TitleBar(bool main_window) {
|
||||
ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(1.0f, 0, 0, 1.0f));
|
||||
ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(1.0f, 0, 0, 0.5f));
|
||||
|
||||
float xmark_pos_x = ImGui::GetCursorPosX() + 18;
|
||||
float xmark_pos_y = ImGui::GetCursorPosY() + 16;
|
||||
float xmark_size = 12.0f;
|
||||
float xmark_pos_x = ImGui::GetCursorPosX() + 18 * dpi_scale_;
|
||||
float xmark_pos_y = ImGui::GetCursorPosY() + 16 * dpi_scale_;
|
||||
float xmark_size = 12.0f * dpi_scale_;
|
||||
std::string close_button = "##xmark"; // ICON_FA_XMARK;
|
||||
if (ImGui::Button(close_button.c_str(), ImVec2(BUTTON_PADDING, 30))) {
|
||||
if (ImGui::Button(close_button.c_str(),
|
||||
ImVec2(BUTTON_PADDING, 30.0f * dpi_scale_))) {
|
||||
#if _WIN32
|
||||
if (enable_minimize_to_tray_) {
|
||||
tray_->MinimizeToTray();
|
||||
|
||||
Reference in New Issue
Block a user