| 398 | // ScreenSelect |
| 399 | |
| 400 | void ScreenSelect::_build_advanced_menu() { |
| 401 | // Clear old screen list. |
| 402 | while (screen_list->get_child_count(false) > 0) { |
| 403 | Node *child = screen_list->get_child(0); |
| 404 | screen_list->remove_child(child); |
| 405 | child->queue_free(); |
| 406 | } |
| 407 | |
| 408 | // Populate screen list. |
| 409 | const real_t height = real_t(get_theme_font_size(SceneStringName(font_size))) * 1.5; |
| 410 | |
| 411 | int current_screen = get_window()->get_current_screen(); |
| 412 | for (int i = 0; i < DisplayServer::get_singleton()->get_screen_count(); i++) { |
| 413 | Button *button = memnew(Button); |
| 414 | |
| 415 | Size2 screen_size = Size2(DisplayServer::get_singleton()->screen_get_size(i)); |
| 416 | Size2 button_size = Size2(height * (screen_size.x / screen_size.y), height); |
| 417 | button->set_custom_minimum_size(button_size); |
| 418 | screen_list->add_child(button); |
| 419 | |
| 420 | button->set_text(itos(i)); |
| 421 | button->set_text_alignment(HORIZONTAL_ALIGNMENT_CENTER); |
| 422 | button->set_tooltip_text(vformat(TTR("Make this panel floating in the screen %d."), i)); |
| 423 | |
| 424 | if (i == current_screen) { |
| 425 | Color accent_color = get_theme_color("accent_color", EditorStringName(Editor)); |
| 426 | button->add_theme_color_override(SceneStringName(font_color), accent_color); |
| 427 | } |
| 428 | |
| 429 | button->connect(SceneStringName(pressed), callable_mp(this, &ScreenSelect::_emit_screen_signal).bind(i)); |
| 430 | button->connect(SceneStringName(pressed), callable_mp(static_cast<BaseButton *>(this), &ScreenSelect::set_pressed).bind(false)); |
| 431 | button->connect(SceneStringName(pressed), callable_mp(static_cast<Window *>(popup), &Popup::hide)); |
| 432 | } |
| 433 | } |
| 434 | |
| 435 | void ScreenSelect::_emit_screen_signal(int p_screen_idx) { |
| 436 | if (!is_disabled()) { |
nothing calls this directly
no test coverage detected