Enhancements and fixes for PopupMenu's submenus.
This commit is contained in:
parent
e3fd61b638
commit
dc80a29dc5
1 changed files with 18 additions and 19 deletions
|
@ -42,24 +42,6 @@ String PopupMenu::_get_accel_text(int p_item) const {
|
||||||
else if (items[p_item].accel)
|
else if (items[p_item].accel)
|
||||||
return keycode_get_string(items[p_item].accel);
|
return keycode_get_string(items[p_item].accel);
|
||||||
return String();
|
return String();
|
||||||
|
|
||||||
/*
|
|
||||||
String atxt;
|
|
||||||
if (p_accel&KEY_MASK_SHIFT)
|
|
||||||
atxt+="Shift+";
|
|
||||||
if (p_accel&KEY_MASK_ALT)
|
|
||||||
atxt+="Alt+";
|
|
||||||
if (p_accel&KEY_MASK_CTRL)
|
|
||||||
atxt+="Ctrl+";
|
|
||||||
if (p_accel&KEY_MASK_META)
|
|
||||||
atxt+="Meta+";
|
|
||||||
|
|
||||||
p_accel&=KEY_CODE_MASK;
|
|
||||||
|
|
||||||
atxt+=String::chr(p_accel).to_upper();
|
|
||||||
|
|
||||||
return atxt;
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Size2 PopupMenu::get_minimum_size() const {
|
Size2 PopupMenu::get_minimum_size() const {
|
||||||
|
@ -136,7 +118,6 @@ int PopupMenu::_get_mouse_over(const Point2 &p_over) const {
|
||||||
|
|
||||||
Ref<Font> font = get_font("font");
|
Ref<Font> font = get_font("font");
|
||||||
int vseparation = get_constant("vseparation");
|
int vseparation = get_constant("vseparation");
|
||||||
//int hseparation = get_constant("hseparation");
|
|
||||||
float font_h = font->get_height();
|
float font_h = font->get_height();
|
||||||
|
|
||||||
for (int i = 0; i < items.size(); i++) {
|
for (int i = 0; i < items.size(); i++) {
|
||||||
|
@ -230,6 +211,11 @@ void PopupMenu::_gui_input(const Ref<InputEvent> &p_event) {
|
||||||
|
|
||||||
mouse_over = i;
|
mouse_over = i;
|
||||||
update();
|
update();
|
||||||
|
|
||||||
|
if (items[i].submenu != "" && submenu_over != i) {
|
||||||
|
submenu_over = i;
|
||||||
|
submenu_timer->start();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -245,6 +231,11 @@ void PopupMenu::_gui_input(const Ref<InputEvent> &p_event) {
|
||||||
|
|
||||||
mouse_over = i;
|
mouse_over = i;
|
||||||
update();
|
update();
|
||||||
|
|
||||||
|
if (items[i].submenu != "" && submenu_over != i) {
|
||||||
|
submenu_over = i;
|
||||||
|
submenu_timer->start();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -500,6 +491,13 @@ void PopupMenu::_notification(int p_what) {
|
||||||
} break;
|
} break;
|
||||||
case NOTIFICATION_MOUSE_EXIT: {
|
case NOTIFICATION_MOUSE_EXIT: {
|
||||||
|
|
||||||
|
if (mouse_over >= 0 && (items[mouse_over].submenu == "" || submenu_over != -1)) {
|
||||||
|
mouse_over = -1;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
case NOTIFICATION_POPUP_HIDE: {
|
||||||
|
|
||||||
if (mouse_over >= 0) {
|
if (mouse_over >= 0) {
|
||||||
mouse_over = -1;
|
mouse_over = -1;
|
||||||
update();
|
update();
|
||||||
|
@ -1217,6 +1215,7 @@ void PopupMenu::set_invalidate_click_until_motion() {
|
||||||
PopupMenu::PopupMenu() {
|
PopupMenu::PopupMenu() {
|
||||||
|
|
||||||
mouse_over = -1;
|
mouse_over = -1;
|
||||||
|
submenu_over = -1;
|
||||||
|
|
||||||
set_focus_mode(FOCUS_ALL);
|
set_focus_mode(FOCUS_ALL);
|
||||||
set_as_toplevel(true);
|
set_as_toplevel(true);
|
||||||
|
|
Loading…
Reference in a new issue