@@ -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