Browse Source

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

Use 75% editor scale on small displays automatically
Rémi Verschelde 4 years ago
parent
commit
d191ffe647
3 changed files with 47 additions and 29 deletions
  1. 29 24
      editor/editor_node.cpp
  2. 2 1
      editor/editor_themes.cpp
  3. 16 4
      editor/project_manager.cpp

+ 29 - 24
editor/editor_node.cpp

@@ -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;
-
-			case 2: {
+				break;
+			case 2:
 				editor_set_scale(1.0);
 				editor_set_scale(1.0);
-			} break;
-
-			case 3: {
+				break;
+			case 3:
 				editor_set_scale(1.25);
 				editor_set_scale(1.25);
-			} break;
-
-			case 4: {
+				break;
+			case 4:
 				editor_set_scale(1.5);
 				editor_set_scale(1.5);
-			} break;
-
-			case 5: {
+				break;
+			case 5:
 				editor_set_scale(1.75);
 				editor_set_scale(1.75);
-			} break;
-
-			case 6: {
+				break;
+			case 6:
 				editor_set_scale(2.0);
 				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;
 		}
 		}
 	}
 	}
 
 

+ 2 - 1
editor/editor_themes.cpp

@@ -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);

+ 16 - 4
editor/project_manager.cpp

@@ -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