@DirtyUI
    @Override
    public void stateChanged(ChangeEvent event) {
      ReadAction.run(() -> {
        Rectangle viewRect = getVisibleArea();
        VisibleAreaEvent visibleAreaEvent = new VisibleAreaEvent(supplier.getEditor(), myLastViewRect, viewRect);
        if (!viewportPositioned && viewRect.height > 0) {
          viewportPositioned = true;
          if (adjustVerticalOffsetIfNecessary()) {
            return;
          }
        }
        myLastViewRect = viewRect;
        for (VisibleAreaListener listener : visibleAreaListeners) {
          listener.visibleAreaChanged(visibleAreaEvent);
        }
      });
    }
@DirtyUI
    @Override
    public void stateChanged(ChangeEvent event)