Use 75% editor scale on small displays automatically

This also makes borders always display in the editor theme,
even if the editor scale is below 100%. Otherwise, "focus" outlines
would vanish when using an editor scale below 100%,
which harms usability.
This commit is contained in:
Hugo Locurcio 2020-11-17 11:17:41 +01:00
parent d0a5ef9c7a
commit fc5e60f4cc
No known key found for this signature in database
GPG key ID: 39E8F8BE30B0A49C
3 changed files with 65 additions and 36 deletions

View file

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

View file

@ -445,7 +445,8 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
// Highlighted tabs and border width
Color tab_color = highlight_tabs ? base_color.linear_interpolate(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 margin_size_extra = default_margin_size + CLAMP(border_size, 0, 3);

View file

@ -2415,25 +2415,48 @@ ProjectManager::ProjectManager() {
switch (display_scale) {
case 0: {
// Try applying a suitable display scale automatically
// Try applying a suitable display scale automatically.
#ifdef OSX_ENABLED
editor_set_scale(OS::get_singleton()->get_screen_max_scale());
#else
const int screen = OS::get_singleton()->get_current_screen();
editor_set_scale(OS::get_singleton()->get_screen_dpi(screen) >= 192 && OS::get_singleton()->get_screen_size(screen).x > 2000 ? 2.0 : 1.0);
float scale;
if (OS::get_singleton()->get_screen_dpi(screen) >= 192 && OS::get_singleton()->get_screen_size(screen).y >= 1400) {
// hiDPI display.
scale = 2.0;
} else if (OS::get_singleton()->get_screen_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
} break;
case 1: editor_set_scale(0.75); break;
case 2: editor_set_scale(1.0); break;
case 3: editor_set_scale(1.25); break;
case 4: editor_set_scale(1.5); break;
case 5: editor_set_scale(1.75); break;
case 6: editor_set_scale(2.0); break;
default: {
case 1:
editor_set_scale(0.75);
break;
case 2:
editor_set_scale(1.0);
break;
case 3:
editor_set_scale(1.25);
break;
case 4:
editor_set_scale(1.5);
break;
case 5:
editor_set_scale(1.75);
break;
case 6:
editor_set_scale(2.0);
break;
default:
editor_set_scale(custom_display_scale);
} break;
break;
}
// Define a minimum window size to prevent UI elements from overlapping or being cut off