1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-09 12:50:35 +00:00

Merge pull request #43479 from Calinou/use-low-editor-scale-auto

Use 75% editor scale on small displays automatically
This commit is contained in:
Rémi Verschelde
2020-11-16 16:36:10 +01:00
committed by GitHub
3 changed files with 47 additions and 29 deletions

View File

@@ -5565,46 +5565,51 @@ EditorNode::EditorNode() {
{ {
int display_scale = EditorSettings::get_singleton()->get("interface/editor/display_scale"); int display_scale = EditorSettings::get_singleton()->get("interface/editor/display_scale");
float custom_display_scale = EditorSettings::get_singleton()->get("interface/editor/custom_display_scale");
switch (display_scale) { switch (display_scale) {
case 0: { case 0: {
// Try applying a suitable display scale automatically // Try applying a suitable display scale automatically.
#ifdef OSX_ENABLED #ifdef OSX_ENABLED
editor_set_scale(DisplayServer::get_singleton()->screen_get_max_scale()); editor_set_scale(DisplayServer::get_singleton()->screen_get_max_scale());
#else #else
const int screen = DisplayServer::get_singleton()->window_get_current_screen(); const int screen = DisplayServer::get_singleton()->window_get_current_screen();
editor_set_scale(DisplayServer::get_singleton()->screen_get_dpi(screen) >= 192 && DisplayServer::get_singleton()->screen_get_size(screen).x > 2000 ? 2.0 : 1.0); float scale;
if (DisplayServer::get_singleton()->screen_get_dpi(screen) >= 192 && DisplayServer::get_singleton()->screen_get_size(screen).y >= 1400) {
// hiDPI display.
scale = 2.0;
} else if (DisplayServer::get_singleton()->screen_get_size(screen).y <= 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;
} else {
scale = 1.0;
}
editor_set_scale(scale);
#endif #endif
} break; } break;
case 1: { case 1:
editor_set_scale(0.75); editor_set_scale(0.75);
} break; break;
case 2:
case 2: {
editor_set_scale(1.0); editor_set_scale(1.0);
} break; break;
case 3:
case 3: {
editor_set_scale(1.25); editor_set_scale(1.25);
} break; break;
case 4:
case 4: {
editor_set_scale(1.5); editor_set_scale(1.5);
} break; break;
case 5:
case 5: {
editor_set_scale(1.75); editor_set_scale(1.75);
} break; break;
case 6:
case 6: {
editor_set_scale(2.0); editor_set_scale(2.0);
} break; break;
default:
default: { editor_set_scale(EditorSettings::get_singleton()->get("interface/editor/custom_display_scale"));
editor_set_scale(custom_display_scale); break;
} break;
} }
} }

View File

@@ -441,7 +441,8 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
// Highlighted tabs and border width // Highlighted tabs and border width
Color tab_color = highlight_tabs ? base_color.lerp(font_color, contrast) : base_color; Color tab_color = highlight_tabs ? base_color.lerp(font_color, contrast) : base_color;
const int border_width = CLAMP(border_size, 0, 3) * EDSCALE; // Ensure borders are visible when using an editor scale below 100%.
const int border_width = CLAMP(border_size, 0, 3) * MAX(1, EDSCALE);
const int default_margin_size = 4; const int default_margin_size = 4;
const int margin_size_extra = default_margin_size + CLAMP(border_size, 0, 3); const int margin_size_extra = default_margin_size + CLAMP(border_size, 0, 3);

View File

@@ -2366,12 +2366,24 @@ ProjectManager::ProjectManager() {
switch (display_scale) { switch (display_scale) {
case 0: { case 0: {
// Try applying a suitable display scale automatically // Try applying a suitable display scale automatically.
#ifdef OSX_ENABLED #ifdef OSX_ENABLED
editor_set_scale(DisplayServer::get_singleton()->screen_get_max_scale()); editor_set_scale(DisplayServer::get_singleton()->screen_get_max_scale());
#else #else
const int screen = DisplayServer::get_singleton()->window_get_current_screen(); const int screen = DisplayServer::get_singleton()->window_get_current_screen();
editor_set_scale(DisplayServer::get_singleton()->screen_get_dpi(screen) >= 192 && DisplayServer::get_singleton()->screen_get_size(screen).x > 2000 ? 2.0 : 1.0); float scale;
if (DisplayServer::get_singleton()->screen_get_dpi(screen) >= 192 && DisplayServer::get_singleton()->screen_get_size(screen).y >= 1400) {
// hiDPI display.
scale = 2.0;
} else if (DisplayServer::get_singleton()->screen_get_size(screen).y <= 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;
} else {
scale = 1.0;
}
editor_set_scale(scale);
#endif #endif
} break; } break;
@@ -2393,9 +2405,9 @@ ProjectManager::ProjectManager() {
case 6: case 6:
editor_set_scale(2.0); editor_set_scale(2.0);
break; break;
default: { default:
editor_set_scale(EditorSettings::get_singleton()->get("interface/editor/custom_display_scale")); editor_set_scale(EditorSettings::get_singleton()->get("interface/editor/custom_display_scale"));
} break; break;
} }
// Define a minimum window size to prevent UI elements from overlapping or being cut off // Define a minimum window size to prevent UI elements from overlapping or being cut off