Bug 125651 [Forms] Wrapped hyperlinks cause artifacts in FormText
There seems to be an off-by-one error in the FormText widget between images and text. See the example below and the corresponding screenshot: final FormText text = formToolkit.createFormText(parent, false/*no links so not a concern*/); text.setForeground(formColors.getColor(DataEntryFormColors.FORM_ELEMENT_FOREGROUND)); text.setBackground(formColors.getColor(DataEntryFormColors.FORM_LABEL_BACKGROUND)); text.setWhitespaceNormalized(false/*don't remove whitespace*/); text.setText("<form><p><img href=\"addNewLabel\"/> <img href=\"deleteLabel\"/>This is a really really really long line to test the wrapping of text. This is a really really really long line to test the wrapping of text. This is a really really really long line to test the wrapping of text.</p></form>", true/*parse tags*/, false/*no links so no concern*/); text.setImage("addNewLabel", addNewLabelImage); text.setImage("deleteLabel", deleteLabelImage); This widget is within a form using TableWrapLayout. (SWT 3.2M4)
bundles/org.eclipse.ui.forms/src/org/eclipse/ui/internal/forms/widgets/TextSegment.java
locator.leading = 0;
				newLine = true;
			}
			int width = extent.x;
			if (isSelectable())
				width += 1;
			locator.x += width;
			locator.width = locator.x;
			locator.rowHeight = Math.max(locator.rowHeight, extent.y);
			locator.leading = Math.max(locator.leading, fm.getLeading());
			return newLine;
		}
		computeTextFragments(gc);
		int width = 0;
		Point lineExtent = new Point(0, 0);
		for (int i = 0; i < textFragments.length; i++) {
			TextFragment textFragment = textFragments[i];
			int currentExtent = locator.x + lineExtent.x;
			
			if (isSelectable())
				currentExtent += 1;
			
			
			if ((i != 0 || locator.x > locator.getStartX() + (isSelectable() ? 1 : 0)) && currentExtent + textFragment.length > wHint) {
				
				int lineWidth = currentExtent;
				locator.rowHeight = Math.max(locator.rowHeight, lineExtent.y);
				locator.leading = Math.max(locator.leading, fm.getLeading());
				if (computeHeightOnly)
					locator.collectHeights();