@Override
		public void paint(GGlassPane glassPane, Graphics graphics) {
			//
			// Update the size of the component, based upon the percent of completion
			//
			Graphics2D g2d = (Graphics2D) graphics;

			// 
			// Move the component to the update location, based upon the percent of completion
			//	
			Rectangle defaultBounds = component.getBounds();
			defaultBounds =
				SwingUtilities.convertRectangle(component.getParent(), defaultBounds, glassPane);
			Point endPoint = defaultBounds.getLocation();
			int distanceX = endPoint.x - startPoint.x;
			int distanceY = endPoint.y - startPoint.y;
			double currentX = endPoint.x - (distanceX * (1 - percentComplete));
			double currentY = endPoint.y - (distanceY * (1 - percentComplete));

			int scaledWidth = (int) (defaultBounds.width * percentComplete);
			int scaledHeight = (int) (defaultBounds.height * percentComplete);

			// gains opacity as it gets closer to the end; capped at the given percentage
			float opacity = (float) Math.min(.65, percentComplete);
			Composite originalComposite = g2d.getComposite();
			AlphaComposite alphaComposite = AlphaComposite.getInstance(
				AlphaComposite.SrcOver.getRule(), opacity);
			g2d.setComposite(alphaComposite);

			// 
			// Calculate the position of the image.   At 100% we want to be in the center of
			// the display; at 0% we want to be at our default location
			// 
			g2d.drawImage(image, (int) currentX, (int) currentY, scaledWidth, scaledHeight, null);

			g2d.setComposite(originalComposite);
		}
Returns the {@link GGlassPane} for the given component

@param c the component
@return the glass pane
Ghidra/Framework/Docking/src/main/java/docking/util/AnimationUtils.java