private void doCalloutReference(final Rectangle area, int callCount) {

		if (callCount > MAX_CALLOUT_RETRIES) {
			// this probably can't happen, but we don't want to keep calling this method
			// forever.
			return;
		}

		WindowPresentation windowPresentation = getWindowPresentation();
		Window helpWindow = windowPresentation.getHelpWindow();
		Container contentPane = null;
		if (helpWindow instanceof JDialog) {
			contentPane = ((JDialog) helpWindow).getContentPane();
		}
		else {
			contentPane = ((JFrame) helpWindow).getContentPane();
		}

		JScrollPane scrollPane = getScrollPane(htmlEditorPane);
		JViewport viewport = scrollPane.getViewport();
		Point viewPosition = viewport.getViewPosition();

		final int numberOfCalls = callCount + 1;
		if (viewPosition.x == 0 && viewPosition.y == 0) {

			//
			// Unusual Code: Not yet rendered!  Try again.
			//
			Swing.runLater(() -> doCalloutReference(area, numberOfCalls));

			return;
		}

		//
		// The area of the HTML content is absolute inside of the entire document.
		// However, the user is viewing the document inside of a scroll pane.  So, we
		// want the offset of the element within the viewer, not the absolute position.
		//
		area.y -= viewPosition.y;

		//
		// Update the coordinates to be relative to the content pane, which is where we
		// are doing the painting.
		//
		Rectangle relativeArea = SwingUtilities.convertRectangle(scrollPane, area, contentPane);
		Shape star = new StarShape(relativeArea.getLocation());

		Animator animator =
			AnimationUtils.createPaintingAnimator(helpWindow, new LocationHintPainter(star));
		if (animator == null) {
			return;
		}

		lastAnimator = animator;
		lastAnimator.addTarget(new TimingTargetAdapter() {
			@Override
			public void end() {
				lastAnimator = null;
			}
		});
	}
This method exists to address the threaded timing nature of how the help system loads
help pages and when the UI is adjusted in response to those changes.
<p>
Note: this method will call itself if the view is not yet updated for the requested
      model change.  In that case, this method will call itself again later.  This may
      need to happen more than once.  However, we will only try a few times and
      then just give up.

@param area the area to call out
@param callCount the number of times this method has already been called
Ghidra/Framework/Docking/src/main/java/docking/help/DockingHelpBroker.java