@Override
		public void paintIcon(Component c, Graphics g, int x, int y) {
			baseIcon.paintIcon(c, g, x, y);

			if (!(g instanceof Graphics2D)) {
				return; // shouldn't happen
			}

			g.setColor(Colors.FOREGROUND);
			int iconWidth = baseIcon.getIconWidth();
			int iconHeight = baseIcon.getIconHeight();
			int insetsPadding = insets.left + insets.right; // the insets of the left icon and the arrow (between the two)
			int leftSidePadding = ARROW_PADDING / 2; // half of the padding for the left
			int oddSizeOffset = 0; // we may have an odd number length for the arrow
			if (ARROW_WIDTH % 2 == 0) {
				// a starting even width will end up giving us an odd number of pixels, which
				// throws off the padding around the arrow (different number of pixels in padding
				// on each side of the arrow)...so handle it
				oddSizeOffset = 1;
			}
			leftSidePadding = leftSidePadding - oddSizeOffset;
			int paintArrowXOffset = x + iconWidth + insetsPadding + leftSidePadding;
			int paintArrowYOffset = y + (iconHeight / 2) - ARROW_HEIGHT;

			int arrowStartX = paintArrowXOffset;
			int arrowEndX = paintArrowXOffset + ARROW_WIDTH;
			int arrowMiddleX = paintArrowXOffset + (ARROW_WIDTH / 2);

			int arrowStartY = paintArrowYOffset;
			int arrowEndY = arrowStartY;
			int arrowMiddleY = arrowStartY + ARROW_HEIGHT;

			int[] xPoints = { arrowStartX, arrowEndX, arrowMiddleX };
			int[] yPoints = { arrowStartY, arrowEndY, arrowMiddleY };

			Graphics2D graphics2D = (Graphics2D) g;
			graphics2D.drawPolygon(xPoints, yPoints, 3);
			graphics2D.fillPolygon(xPoints, yPoints, 3);
		}
Show a popup containing all the actions below the button

@return the popup menu that was shown
Ghidra/Framework/Docking/src/main/java/docking/menu/MultipleActionDockingToolbarButton.java