float (@NotNull Font font, boolean mainTextOnly) { float result = 0; int baseSize = font.getSize(); boolean wasSmaller = false; for (int i = 0; i < myFragments.size(); i++) { ColoredFragment fragment = myFragments.get(i); SimpleTextAttributes attributes = fragment.attributes; boolean isSmaller = attributes.isSmaller(); if (font.getStyle() != attributes.getFontStyle() || isSmaller != wasSmaller) { // derive font only if it is necessary font = deriveFont(font, attributes.getFontStyle(), isSmaller ? UIUtil.getFontSize(UIUtil.FontSize.SMALL) : baseSize); } wasSmaller = isSmaller; result += computeStringWidth(fragment, i, font); final int fixedWidth = fragment.padding; if (fixedWidth > 0 && result < fixedWidth) { result = fixedWidth; } if (mainTextOnly && myMainTextLastIndex >= 0 && i == myMainTextLastIndex) break; } return result; }