@@ -228,49 +228,44 @@ 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;
239- _shape_item (i);
237+ const Item &item = items[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);
239+ _shape_item (i);
244240
245- item_size. width += items[i]. indent * theme_cache. indent ;
241+ icon_max_w = MAX ( _get_item_icon_size (i). width , icon_max_w) ;
246242
247- if (items[i] .checkable_type && !items[i] .separator ) {
243+ if (item .checkable_type && !item .separator ) {
248244 has_check = true ;
249245 }
250246
251- item_size.width += items[i].text_buf ->get_size ().x ;
252- item_size.height += theme_cache.v_separation ;
253-
254- 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 ;
247+ if (item.accel != Key::NONE || (item.shortcut .is_valid () && item.shortcut ->has_valid_event ())) {
248+ int accel_w = theme_cache.h_separation * 2 + item.accel_text_buf ->get_size ().x ;
257249 accel_max_w = MAX (accel_w, accel_max_w);
258250 }
259251
260- if (items[i].submenu ) {
261- item_size.width += theme_cache.submenu ->get_width ();
252+ real_t body_w = item.indent * theme_cache.indent + item.text_buf ->get_size ().x ;
253+ if (item.submenu ) {
254+ body_w += theme_cache.submenu ->get_width ();
262255 }
256+ body_max_w = MAX (body_max_w, body_w);
263257
264- max_w = MAX (max_w, item_size.width );
265-
266- minsize.height += item_size.height ;
258+ minsize.height += _get_item_height (i) + theme_cache.v_separation ;
267259 }
268260
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;
261+ minsize.width += theme_cache.item_start_padding + body_max_w + accel_max_w + theme_cache.item_end_padding ;
271262
263+ if (icon_max_w > 0 ) {
264+ minsize.width += icon_max_w + theme_cache.h_separation ;
265+ }
272266 if (has_check) {
273- minsize.width += check_w;
267+ int check_w = MAX (theme_cache.checked ->get_width (), theme_cache.radio_checked ->get_width ());
268+ minsize.width += check_w + theme_cache.h_separation ;
274269 }
275270
276271 if (is_inside_tree ()) {
0 commit comments