public @Nullable HighlightedRegion findRegionByX(int x) {
    FontMetrics defFontMetrics = getFontMetrics(getFont());

    int width = getTextOffset();
    if (width > x) return null;

    if (!myText.isEmpty() && !myHighlightedRegions.isEmpty()) {
      int endIndex = 0;
      for (HighlightedRegion hRegion : myHighlightedRegions) {
        width += getStringWidth(myText.substring(endIndex, hRegion.startOffset), defFontMetrics);
        endIndex = hRegion.endOffset;
        if (width > x) return null;

        String text = getRegionText(hRegion);
        Font regFont = getFont().deriveFont(hRegion.textAttributes.getFontType());
        FontMetrics fontMetrics = getFontMetrics(regFont);

        width += getStringWidth(text, fontMetrics);
        if (width > x) return hRegion;
      }
    }
    return null;
  }
public @Nullable HighlightedRegion findRegionByX(int x)