Bug 493455 - fix padding of alpha data in manual test snippet

Alpha data should never be padded (i.e. padding is always 1 byte).

Change-Id: Ifbc6fbbc4a4dc174cc483cecfb64b558c4e10b8a
Reviewed-on: https://git.eclipse.org/r/c/platform/eclipse.platform.swt/+/190741
Tested-by: Andrey Loskutov <loskutov@gmx.de>
Reviewed-by: Andrey Loskutov <loskutov@gmx.de>
diff --git a/tests/org.eclipse.swt.tests/ManualTests/org/eclipse/swt/tests/manual/SnippetDrawAlphaTwoPass.java b/tests/org.eclipse.swt.tests/ManualTests/org/eclipse/swt/tests/manual/SnippetDrawAlphaTwoPass.java
index bd0e037..9e21d13 100644
--- a/tests/org.eclipse.swt.tests/ManualTests/org/eclipse/swt/tests/manual/SnippetDrawAlphaTwoPass.java
+++ b/tests/org.eclipse.swt.tests/ManualTests/org/eclipse/swt/tests/manual/SnippetDrawAlphaTwoPass.java
@@ -77,7 +77,7 @@
 		ImageData imageMaskData = null;
 
 		if (imageData.getTransparencyType() == SWT.TRANSPARENCY_ALPHA) {
-			imageMaskData = new ImageData(width, height, 8, ALPHA_PALETTE, imageData.scanlinePad, imageData.alphaData);
+			imageMaskData = new ImageData(width, height, 8, ALPHA_PALETTE, 1, imageData.alphaData);
 		} else if (imageData.getTransparencyType() == SWT.TRANSPARENCY_PIXEL || imageData.getTransparencyType() == SWT.TRANSPARENCY_MASK) {
 			ImageData transparencyMaskData = imageData.getTransparencyMask();
 			imageMaskData = new ImageData(width, height, 1, BW_PALETTE, transparencyMaskData.scanlinePad, transparencyMaskData.data);
@@ -127,7 +127,12 @@
 				scaledResult.maskPad = scaledResultMaskData.scanlinePad;
 				scaledResult.maskData = scaledResultMaskData.data;
 			} else {
-				scaledResult.alphaData = scaledResultMaskData.data;
+				byte[] alphaData = scaledResultMaskData.data;
+				if (scaledResultMaskData.scanlinePad != 1) {
+					alphaData = convertPad(scaledResultMaskData.data, scaledResultMaskData.width, scaledResultMaskData.height,
+							scaledResultMaskData.depth, scaledResultMaskData.scanlinePad, 1);
+				}
+				scaledResult.alphaData = alphaData;
 			}
 		}
 
@@ -135,4 +140,20 @@
 		resultMask.dispose();
 		return scaledResult;
 	}
+
+	// copied from ImageData.convertPad as it is not accessible outside the org.eclipse.swt package
+	private static byte[] convertPad(byte[] data, int width, int height, int depth, int pad, int newPad) {
+		if (pad == newPad) return data;
+		int stride = (width * depth + 7) / 8;
+		int bpl = (stride + (pad - 1)) / pad * pad;
+		int newBpl = (stride + (newPad - 1)) / newPad * newPad;
+		byte[] newData = new byte[height * newBpl];
+		int srcIndex = 0, destIndex = 0;
+		for (int y = 0; y < height; y++) {
+			System.arraycopy(data, srcIndex, newData, destIndex, stride);
+			srcIndex += bpl;
+			destIndex += newBpl;
+		}
+		return newData;
+	}
 }
\ No newline at end of file