diff options
author | Hugo Locurcio <hugo.locurcio@hugo.pro> | 2021-05-09 23:33:45 +0200 |
---|---|---|
committer | Hugo Locurcio <hugo.locurcio@hugo.pro> | 2021-05-09 23:35:24 +0200 |
commit | 728fa3ff71361f527e0bf18c46cf9152ec5a3d6d (patch) | |
tree | b419f73e4d54eb9d402f0049f6ba924e3ee61f29 | |
parent | 6e3f47983cabb5f162eaec075d810f717985beda (diff) |
Handle portrait mode monitors in the automatic editor scale detection
Using the smallest dimension of the width and height makes it possible
to support both landscape and portrait monitors.
-rw-r--r-- | editor/editor_node.cpp | 8 | ||||
-rw-r--r-- | editor/editor_settings.cpp | 8 | ||||
-rw-r--r-- | editor/project_manager.cpp | 8 |
3 files changed, 15 insertions, 9 deletions
diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index 7aed5b2b7f..7917af94d1 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -5684,15 +5684,17 @@ EditorNode::EditorNode() { editor_set_scale(DisplayServer::get_singleton()->screen_get_max_scale()); #else const int screen = DisplayServer::get_singleton()->window_get_current_screen(); + // Use the smallest dimension to use a correct display scale on portait displays. + const int smallest_dimension = MIN(DisplayServer::get_singleton()->screen_get_size(screen).x, DisplayServer::get_singleton()->screen_get_size(screen).y); float scale; - if (DisplayServer::get_singleton()->screen_get_dpi(screen) >= 192 && DisplayServer::get_singleton()->screen_get_size(screen).y >= 1400) { + if (DisplayServer::get_singleton()->screen_get_dpi(screen) >= 192 && smallest_dimension >= 1400) { // hiDPI display. scale = 2.0; - } else if (DisplayServer::get_singleton()->screen_get_size(screen).y >= 1700) { + } else if (smallest_dimension >= 1700) { // Likely a hiDPI display, but we aren't certain due to the returned DPI. // Use an intermediate scale to handle this situation. scale = 1.5; - } else if (DisplayServer::get_singleton()->screen_get_size(screen).y <= 800) { + } else if (smallest_dimension <= 800) { // Small loDPI display. Use a smaller display scale so that editor elements fit more easily. // Icons won't look great, but this is better than having editor elements overflow from its window. scale = 0.75; diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index aba14df812..00987262de 100644 --- a/editor/editor_settings.cpp +++ b/editor/editor_settings.cpp @@ -379,15 +379,17 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { float scale = DisplayServer::get_singleton()->screen_get_max_scale(); #else const int screen = DisplayServer::get_singleton()->window_get_current_screen(); + // Use the smallest dimension to use a correct display scale on portait displays. + const int smallest_dimension = MIN(DisplayServer::get_singleton()->screen_get_size(screen).x, DisplayServer::get_singleton()->screen_get_size(screen).y); float scale; - if (DisplayServer::get_singleton()->screen_get_dpi(screen) >= 192 && DisplayServer::get_singleton()->screen_get_size(screen).y >= 1400) { + if (DisplayServer::get_singleton()->screen_get_dpi(screen) >= 192 && smallest_dimension >= 1400) { // hiDPI display. scale = 2.0; - } else if (DisplayServer::get_singleton()->screen_get_size(screen).y >= 1700) { + } else if (smallest_dimension <= 1700) { // Likely a hiDPI display, but we aren't certain due to the returned DPI. // Use an intermediate scale to handle this situation. scale = 1.5; - } else if (DisplayServer::get_singleton()->screen_get_size(screen).y <= 800) { + } else if (smallest_dimension <= 800) { // Small loDPI display. Use a smaller display scale so that editor elements fit more easily. // Icons won't look great, but this is better than having editor elements overflow from its window. scale = 0.75; diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp index 2b75144ac7..7cbae44f6d 100644 --- a/editor/project_manager.cpp +++ b/editor/project_manager.cpp @@ -2403,15 +2403,17 @@ ProjectManager::ProjectManager() { editor_set_scale(DisplayServer::get_singleton()->screen_get_max_scale()); #else const int screen = DisplayServer::get_singleton()->window_get_current_screen(); + // Use the smallest dimension to use a correct display scale on portait displays. + const int smallest_dimension = MIN(DisplayServer::get_singleton()->screen_get_size(screen).x, DisplayServer::get_singleton()->screen_get_size(screen).y); float scale; - if (DisplayServer::get_singleton()->screen_get_dpi(screen) >= 192 && DisplayServer::get_singleton()->screen_get_size(screen).y >= 1400) { + if (DisplayServer::get_singleton()->screen_get_dpi(screen) >= 192 && smallest_dimension >= 1400) { // hiDPI display. scale = 2.0; - } else if (DisplayServer::get_singleton()->screen_get_size(screen).y >= 1700) { + } else if (smallest_dimension >= 1700) { // Likely a hiDPI display, but we aren't certain due to the returned DPI. // Use an intermediate scale to handle this situation. scale = 1.5; - } else if (DisplayServer::get_singleton()->screen_get_size(screen).y <= 800) { + } else if (smallest_dimension <= 800) { // Small loDPI display. Use a smaller display scale so that editor elements fit more easily. // Icons won't look great, but this is better than having editor elements overflow from its window. scale = 0.75; |