Skip to content

Commit 7a3093c

Browse files
committed
PopupMenu: Fix minimum size for items with icons
1 parent a6e7084 commit 7a3093c

File tree

1 file changed

+15
-22
lines changed

1 file changed

+15
-22
lines changed

scene/gui/popup_menu.cpp

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -228,49 +228,42 @@ Size2 PopupMenu::_get_contents_minimum_size() const {
228228
minsize.width += panel->get_offset(SIDE_LEFT) - panel->get_offset(SIDE_RIGHT);
229229
minsize.height += panel->get_offset(SIDE_TOP) - panel->get_offset(SIDE_BOTTOM);
230230

231-
float max_w = 0.0;
232-
float icon_w = 0.0;
233-
int check_w = MAX(theme_cache.checked->get_width(), theme_cache.radio_checked->get_width()) + theme_cache.h_separation;
234-
int accel_max_w = 0;
231+
real_t body_max_w = 0.0; // Indentation, text, and submenu arrow.
232+
real_t icon_max_w = 0.0;
233+
real_t accel_max_w = 0.0;
235234
bool has_check = false;
236235

237236
for (int i = 0; i < items.size(); i++) {
238-
Size2 item_size;
239237
_shape_item(i);
240238

241-
Size2 icon_size = _get_item_icon_size(i);
242-
item_size.height = _get_item_height(i);
243-
icon_w = MAX(icon_size.width, icon_w);
244-
245-
item_size.width += items[i].indent * theme_cache.indent;
239+
icon_max_w = MAX(_get_item_icon_size(i).width, icon_max_w);
246240

247241
if (items[i].checkable_type && !items[i].separator) {
248242
has_check = true;
249243
}
250244

251-
item_size.width += items[i].text_buf->get_size().x;
252-
item_size.height += theme_cache.v_separation;
253-
254245
if (items[i].accel != Key::NONE || (items[i].shortcut.is_valid() && items[i].shortcut->has_valid_event())) {
255-
int accel_w = theme_cache.h_separation * 2;
256-
accel_w += items[i].accel_text_buf->get_size().x;
246+
real_t accel_w = theme_cache.h_separation * 2 + items[i].accel_text_buf->get_size().x;
257247
accel_max_w = MAX(accel_w, accel_max_w);
258248
}
259249

250+
real_t body_w = items[i].indent * theme_cache.indent + items[i].text_buf->get_size().x;
260251
if (items[i].submenu) {
261-
item_size.width += theme_cache.submenu->get_width();
252+
body_w += theme_cache.submenu->get_width();
262253
}
254+
body_max_w = MAX(body_max_w, body_w);
263255

264-
max_w = MAX(max_w, item_size.width);
265-
266-
minsize.height += item_size.height;
256+
minsize.height += _get_item_height(i) + theme_cache.v_separation;
267257
}
268258

269-
int item_side_padding = theme_cache.item_start_padding + theme_cache.item_end_padding;
270-
minsize.width += max_w + icon_w + accel_max_w + item_side_padding;
259+
minsize.width += theme_cache.item_start_padding + body_max_w + accel_max_w + theme_cache.item_end_padding;
271260

261+
if (icon_max_w > 0) {
262+
minsize.width += icon_max_w + theme_cache.h_separation;
263+
}
272264
if (has_check) {
273-
minsize.width += check_w;
265+
int check_w = MAX(theme_cache.checked->get_width(), theme_cache.radio_checked->get_width());
266+
minsize.width += check_w + theme_cache.h_separation;
274267
}
275268

276269
if (is_inside_tree()) {

0 commit comments

Comments
 (0)