@@ -104,99 +104,16 @@ Error EditorRun::run(const String &p_scene, const String &p_write_movie, const V
104
104
}
105
105
}
106
106
107
- int screen = EDITOR_GET (" run/window_placement/screen" );
108
- if (screen == -5 ) {
109
- // Same as editor
110
- screen = DisplayServer::get_singleton ()->window_get_current_screen ();
111
- } else if (screen == -4 ) {
112
- // Previous monitor (wrap to the other end if needed)
113
- screen = Math::wrapi (
114
- DisplayServer::get_singleton ()->window_get_current_screen () - 1 ,
115
- 0 ,
116
- DisplayServer::get_singleton ()->get_screen_count ());
117
- } else if (screen == -3 ) {
118
- // Next monitor (wrap to the other end if needed)
119
- screen = Math::wrapi (
120
- DisplayServer::get_singleton ()->window_get_current_screen () + 1 ,
121
- 0 ,
122
- DisplayServer::get_singleton ()->get_screen_count ());
107
+ WindowPlacement window_placement = get_window_placement ();
108
+ if (window_placement.position != Point2i (INT_MAX, INT_MAX)) {
109
+ args.push_back (" --position" );
110
+ args.push_back (itos (window_placement.position .x ) + " ," + itos (window_placement.position .y ));
123
111
}
124
112
125
- Rect2 screen_rect = DisplayServer::get_singleton ()->screen_get_usable_rect (screen);
126
-
127
- int window_placement = EDITOR_GET (" run/window_placement/rect" );
128
- if (screen_rect != Rect2 ()) {
129
- Size2 window_size;
130
- window_size.x = GLOBAL_GET (" display/window/size/viewport_width" );
131
- window_size.y = GLOBAL_GET (" display/window/size/viewport_height" );
132
-
133
- Size2 desired_size;
134
- desired_size.x = GLOBAL_GET (" display/window/size/window_width_override" );
135
- desired_size.y = GLOBAL_GET (" display/window/size/window_height_override" );
136
- if (desired_size.x > 0 && desired_size.y > 0 ) {
137
- window_size = desired_size;
138
- }
139
-
140
- if (DisplayServer::get_singleton ()->has_feature (DisplayServer::FEATURE_HIDPI)) {
141
- bool hidpi_proj = GLOBAL_GET (" display/window/dpi/allow_hidpi" );
142
- int display_scale = 1 ;
143
-
144
- if (OS::get_singleton ()->is_hidpi_allowed ()) {
145
- if (hidpi_proj) {
146
- display_scale = 1 ; // Both editor and project runs in hiDPI mode, do not scale.
147
- } else {
148
- display_scale = DisplayServer::get_singleton ()->screen_get_max_scale (); // Editor is in hiDPI mode, project is not, scale down.
149
- }
150
- } else {
151
- if (hidpi_proj) {
152
- display_scale = (1 .f / DisplayServer::get_singleton ()->screen_get_max_scale ()); // Editor is not in hiDPI mode, project is, scale up.
153
- } else {
154
- display_scale = 1 ; // Both editor and project runs in lowDPI mode, do not scale.
155
- }
156
- }
157
- screen_rect.position /= display_scale;
158
- screen_rect.size /= display_scale;
159
- }
160
-
161
- switch (window_placement) {
162
- case 0 : { // top left
163
- args.push_back (" --position" );
164
- args.push_back (itos (screen_rect.position .x ) + " ," + itos (screen_rect.position .y ));
165
- } break ;
166
- case 1 : { // centered
167
- Vector2 pos = (screen_rect.position ) + ((screen_rect.size - window_size) / 2 ).floor ();
168
- args.push_back (" --position" );
169
- args.push_back (itos (pos.x ) + " ," + itos (pos.y ));
170
- } break ;
171
- case 2 : { // custom pos
172
- Vector2 pos = EDITOR_GET (" run/window_placement/rect_custom_position" );
173
- pos += screen_rect.position ;
174
- args.push_back (" --position" );
175
- args.push_back (itos (pos.x ) + " ," + itos (pos.y ));
176
- } break ;
177
- case 3 : { // force maximized
178
- Vector2 pos = screen_rect.position + screen_rect.size / 2 ;
179
- args.push_back (" --position" );
180
- args.push_back (itos (pos.x ) + " ," + itos (pos.y ));
181
- args.push_back (" --maximized" );
182
- } break ;
183
- case 4 : { // force fullscreen
184
- Vector2 pos = screen_rect.position + screen_rect.size / 2 ;
185
- args.push_back (" --position" );
186
- args.push_back (itos (pos.x ) + " ," + itos (pos.y ));
187
- args.push_back (" --fullscreen" );
188
- } break ;
189
- }
190
- } else {
191
- // Unable to get screen info, skip setting position.
192
- switch (window_placement) {
193
- case 3 : { // force maximized
194
- args.push_back (" --maximized" );
195
- } break ;
196
- case 4 : { // force fullscreen
197
- args.push_back (" --fullscreen" );
198
- } break ;
199
- }
113
+ if (window_placement.force_maximized ) {
114
+ args.push_back (" --maximized" );
115
+ } else if (window_placement.force_fullscreen ) {
116
+ args.push_back (" --fullscreen" );
200
117
}
201
118
202
119
List<String> breakpoints;
@@ -297,6 +214,98 @@ OS::ProcessID EditorRun::get_current_process() const {
297
214
return pids.front ()->get ();
298
215
}
299
216
217
+ EditorRun::WindowPlacement EditorRun::get_window_placement () {
218
+ WindowPlacement placement = WindowPlacement ();
219
+ placement.screen = EDITOR_GET (" run/window_placement/screen" );
220
+ if (placement.screen == -5 ) {
221
+ // Same as editor
222
+ placement.screen = DisplayServer::get_singleton ()->window_get_current_screen ();
223
+ } else if (placement.screen == -4 ) {
224
+ // Previous monitor (wrap to the other end if needed)
225
+ placement.screen = Math::wrapi (
226
+ DisplayServer::get_singleton ()->window_get_current_screen () - 1 ,
227
+ 0 ,
228
+ DisplayServer::get_singleton ()->get_screen_count ());
229
+ } else if (placement.screen == -3 ) {
230
+ // Next monitor (wrap to the other end if needed)
231
+ placement.screen = Math::wrapi (
232
+ DisplayServer::get_singleton ()->window_get_current_screen () + 1 ,
233
+ 0 ,
234
+ DisplayServer::get_singleton ()->get_screen_count ());
235
+ } else if (placement.screen == -2 ) {
236
+ // Primary screen
237
+ placement.screen = DisplayServer::get_singleton ()->get_primary_screen ();
238
+ }
239
+
240
+ placement.size .x = GLOBAL_GET (" display/window/size/viewport_width" );
241
+ placement.size .y = GLOBAL_GET (" display/window/size/viewport_height" );
242
+
243
+ Size2 desired_size;
244
+ desired_size.x = GLOBAL_GET (" display/window/size/window_width_override" );
245
+ desired_size.y = GLOBAL_GET (" display/window/size/window_height_override" );
246
+ if (desired_size.x > 0 && desired_size.y > 0 ) {
247
+ placement.size = desired_size;
248
+ }
249
+
250
+ Rect2 screen_rect = DisplayServer::get_singleton ()->screen_get_usable_rect (placement.screen );
251
+
252
+ int window_placement = EDITOR_GET (" run/window_placement/rect" );
253
+ if (screen_rect != Rect2 ()) {
254
+ if (DisplayServer::get_singleton ()->has_feature (DisplayServer::FEATURE_HIDPI)) {
255
+ bool hidpi_proj = GLOBAL_GET (" display/window/dpi/allow_hidpi" );
256
+ int display_scale = 1 ;
257
+
258
+ if (OS::get_singleton ()->is_hidpi_allowed ()) {
259
+ if (hidpi_proj) {
260
+ display_scale = 1 ; // Both editor and project runs in hiDPI mode, do not scale.
261
+ } else {
262
+ display_scale = DisplayServer::get_singleton ()->screen_get_max_scale (); // Editor is in hiDPI mode, project is not, scale down.
263
+ }
264
+ } else {
265
+ if (hidpi_proj) {
266
+ display_scale = (1 .f / DisplayServer::get_singleton ()->screen_get_max_scale ()); // Editor is not in hiDPI mode, project is, scale up.
267
+ } else {
268
+ display_scale = 1 ; // Both editor and project runs in lowDPI mode, do not scale.
269
+ }
270
+ }
271
+ screen_rect.position /= display_scale;
272
+ screen_rect.size /= display_scale;
273
+ }
274
+
275
+ switch (window_placement) {
276
+ case 0 : { // top left
277
+ placement.position = screen_rect.position ;
278
+ } break ;
279
+ case 1 : { // centered
280
+ placement.position = (screen_rect.position ) + ((screen_rect.size - placement.size ) / 2 ).floor ();
281
+ } break ;
282
+ case 2 : { // custom pos
283
+ Vector2 pos = EDITOR_GET (" run/window_placement/rect_custom_position" );
284
+ pos += screen_rect.position ;
285
+ placement.position = pos;
286
+ } break ;
287
+ case 3 : { // force maximized
288
+ placement.force_maximized = true ;
289
+ } break ;
290
+ case 4 : { // force fullscreen
291
+ placement.force_fullscreen = true ;
292
+ } break ;
293
+ }
294
+ } else {
295
+ // Unable to get screen info, skip setting position.
296
+ switch (window_placement) {
297
+ case 3 : { // force maximized
298
+ placement.force_maximized = true ;
299
+ } break ;
300
+ case 4 : { // force fullscreen
301
+ placement.force_fullscreen = true ;
302
+ } break ;
303
+ }
304
+ }
305
+
306
+ return placement;
307
+ }
308
+
300
309
EditorRun::EditorRun () {
301
310
status = STATUS_STOP;
302
311
running_scene = " " ;
0 commit comments