Skip to content

Commit

Permalink
Use 75% editor scale on small displays automatically
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
Calinou committed Nov 16, 2020
1 parent a7d610d commit c1a65e5
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 29 deletions.
53 changes: 29 additions & 24 deletions editor/editor_node.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5565,46 +5565,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(DisplayServer::get_singleton()->screen_get_max_scale());
#else
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
} 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;
}
}

Expand Down
3 changes: 2 additions & 1 deletion editor/editor_themes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -441,7 +441,8 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {

// Highlighted tabs and border width
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 margin_size_extra = default_margin_size + CLAMP(border_size, 0, 3);
Expand Down
20 changes: 16 additions & 4 deletions editor/project_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2348,12 +2348,24 @@ 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(DisplayServer::get_singleton()->screen_get_max_scale());
#else
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
} break;

Expand All @@ -2375,9 +2387,9 @@ ProjectManager::ProjectManager() {
case 6:
editor_set_scale(2.0);
break;
default: {
default:
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
Expand Down

0 comments on commit c1a65e5

Please sign in to comment.