private boolean validate(DropTargetDragEvent event) {
      JComponent component = getComponent(event);
      if (component == null) {
        return false;
      }

      Point location = new Point(this.screen);
      SwingUtilities.convertPointFromScreen(location, component);

      Rectangle bounds = component.getVisibleRect();
      // mouse out of a component
      if (!bounds.contains(location.x, location.y)) {
        return false;
      }

      int margin = (int)(5 * sysScale(component));
      int deltaX = getDelta(3, margin, location.x, bounds.x, bounds.x + bounds.width);
      int deltaY = getDelta(5, margin, location.y, bounds.y, bounds.y + bounds.height);
      if (deltaX != 0 || deltaY != 0) {
        LOG.debug("SmoothAutoScroller delta X:", deltaX, " Y:", deltaY);
        bounds.x += deltaX;
        bounds.y += deltaY;
        SwingUtilities.convertPointToScreen(location, component);
        component.scrollRectToVisible(bounds);
        SwingUtilities.convertPointFromScreen(location, component);
      }
      DropTarget target = component.getDropTarget();
      if (target != null && !location.equals(event.getLocation())) {
        LOG.debug("SmoothAutoScroller simulates dragOver");
        target.dragOver(
          new DropTargetDragEvent(
            event.getDropTargetContext(),
            location,
            event.getDropAction(),
            event.getSourceActions())
        );
      }
      return true;
    }
private boolean validate(DropTargetDragEvent event)