| 247 | } |
| 248 | |
| 249 | EditorRun::WindowPlacement EditorRun::get_window_placement() { |
| 250 | WindowPlacement placement = WindowPlacement(); |
| 251 | placement.screen = EDITOR_GET("run/window_placement/screen"); |
| 252 | if (placement.screen == -5) { |
| 253 | // Same as editor |
| 254 | placement.screen = DisplayServer::get_singleton()->window_get_current_screen(); |
| 255 | } else if (placement.screen == -4) { |
| 256 | // Previous monitor (wrap to the other end if needed) |
| 257 | placement.screen = Math::wrapi( |
| 258 | DisplayServer::get_singleton()->window_get_current_screen() - 1, |
| 259 | 0, |
| 260 | DisplayServer::get_singleton()->get_screen_count()); |
| 261 | } else if (placement.screen == -3) { |
| 262 | // Next monitor (wrap to the other end if needed) |
| 263 | placement.screen = Math::wrapi( |
| 264 | DisplayServer::get_singleton()->window_get_current_screen() + 1, |
| 265 | 0, |
| 266 | DisplayServer::get_singleton()->get_screen_count()); |
| 267 | } else if (placement.screen == -2) { |
| 268 | // Primary screen |
| 269 | placement.screen = DisplayServer::get_singleton()->get_primary_screen(); |
| 270 | } |
| 271 | |
| 272 | placement.size.x = GLOBAL_GET("display/window/size/viewport_width"); |
| 273 | placement.size.y = GLOBAL_GET("display/window/size/viewport_height"); |
| 274 | |
| 275 | Size2 desired_size; |
| 276 | desired_size.x = GLOBAL_GET("display/window/size/window_width_override"); |
| 277 | desired_size.y = GLOBAL_GET("display/window/size/window_height_override"); |
| 278 | if (desired_size.x > 0 && desired_size.y > 0) { |
| 279 | placement.size = desired_size; |
| 280 | } |
| 281 | |
| 282 | Rect2 screen_rect = DisplayServer::get_singleton()->screen_get_usable_rect(placement.screen); |
| 283 | |
| 284 | int window_placement = EDITOR_GET("run/window_placement/rect"); |
| 285 | if (screen_rect != Rect2()) { |
| 286 | if (DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_HIDPI)) { |
| 287 | bool hidpi_proj = GLOBAL_GET("display/window/dpi/allow_hidpi"); |
| 288 | int display_scale = 1; |
| 289 | |
| 290 | if (OS::get_singleton()->is_hidpi_allowed()) { |
| 291 | if (hidpi_proj) { |
| 292 | display_scale = 1; // Both editor and project runs in hiDPI mode, do not scale. |
| 293 | } else { |
| 294 | display_scale = DisplayServer::get_singleton()->screen_get_max_scale(); // Editor is in hiDPI mode, project is not, scale down. |
| 295 | } |
| 296 | } else { |
| 297 | if (hidpi_proj) { |
| 298 | display_scale = (1.f / DisplayServer::get_singleton()->screen_get_max_scale()); // Editor is not in hiDPI mode, project is, scale up. |
| 299 | } else { |
| 300 | display_scale = 1; // Both editor and project runs in lowDPI mode, do not scale. |
| 301 | } |
| 302 | } |
| 303 | screen_rect.position /= display_scale; |
| 304 | screen_rect.size /= display_scale; |
| 305 | } |
| 306 |
nothing calls this directly
no test coverage detected