MCPcopy Create free account
hub / github.com/Redot-Engine/redot-engine / get_window_placement

Method get_window_placement

editor/run/editor_run.cpp:249–341  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

247}
248
249EditorRun::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

Callers

nothing calls this directly

Calls 11

WindowPlacementClass · 0.85
wrapiFunction · 0.85
is_hidpi_allowedMethod · 0.80
Rect2Class · 0.50
get_screen_countMethod · 0.45
get_primary_screenMethod · 0.45
has_featureMethod · 0.45
screen_get_max_scaleMethod · 0.45
floorMethod · 0.45

Tested by

no test coverage detected