annotate dwt/internal/image/WinICOFileFormat.d @ 240:ce446666f5a2

Update to SWT 3.4M7
author Frank Benoit <benoit@tionex.de>
date Mon, 12 May 2008 19:13:01 +0200
parents 08789b28bdf3
children c0d810de7093
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
152
17f8449522fd overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
1 /*******************************************************************************
13
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2 * Copyright (c) 2000, 2006 IBM Corporation and others.
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
108
0f12f6bb9739 author notice
Frank Benoit <benoit@tionex.de>
parents: 71
diff changeset
10 * Port to the D programming language:
0f12f6bb9739 author notice
Frank Benoit <benoit@tionex.de>
parents: 71
diff changeset
11 * Frank Benoit <benoit@tionex.de>
13
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 *******************************************************************************/
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13 module dwt.internal.image.WinICOFileFormat;
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14
200
08789b28bdf3 import dwt.dwthelper.utils now explicit
Frank Benoit <benoit@tionex.de>
parents: 152
diff changeset
15 import dwt.internal.image.FileFormat;
08789b28bdf3 import dwt.dwthelper.utils now explicit
Frank Benoit <benoit@tionex.de>
parents: 152
diff changeset
16 import dwt.graphics.PaletteData;
13
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17 import dwt.internal.image.WinBMPFileFormat;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
18 import dwt.DWT;
200
08789b28bdf3 import dwt.dwthelper.utils now explicit
Frank Benoit <benoit@tionex.de>
parents: 152
diff changeset
19 import dwt.dwthelper.utils;
13
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21 import tango.core.Exception;
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
23 public final class WinICOFileFormat : FileFormat {
13
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 byte[] bitInvertData(byte[] data, int startIndex, int endIndex) {
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
26 // Destructively bit invert data in the given byte array.
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
27 for (int i = startIndex; i < endIndex; i++) {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
28 data[i] = cast(byte)(255 - data[i - startIndex]);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
29 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
30 return data;
13
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31 }
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33 static final byte[] convertPad(byte[] data, int width, int height, int depth, int pad, int newPad) {
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
34 if (pad is newPad) return data;
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
35 int stride = (width * depth + 7) / 8;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
36 int bpl = (stride + (pad - 1)) / pad * pad;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
37 int newBpl = (stride + (newPad - 1)) / newPad * newPad;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
38 byte[] newData = new byte[height * newBpl];
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
39 int srcIndex = 0, destIndex = 0;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
40 for (int y = 0; y < height; y++) {
25
fc2b263b8a3f Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents: 13
diff changeset
41 System.arraycopy(data, srcIndex, newData, destIndex, newBpl);
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
42 srcIndex += bpl;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
43 destIndex += newBpl;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
44 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
45 return newData;
13
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 }
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 /**
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48 * Answer the size in bytes of the file representation of the given
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 * icon
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50 */
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 int iconSize(ImageData i) {
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
52 int shapeDataStride = (i.width * i.depth + 31) / 32 * 4;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
53 int maskDataStride = (i.width + 31) / 32 * 4;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
54 int dataSize = (shapeDataStride + maskDataStride) * i.height;
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
55 int paletteSize = i.palette.colors !is null ? i.palette.colors.length * 4 : 0;
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
56 return WinBMPFileFormat.BMPHeaderFixedSize + paletteSize + dataSize;
13
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57 }
152
17f8449522fd overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
58 override bool isFileFormat(LEDataInputStream stream) {
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
59 try {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
60 byte[] header = new byte[4];
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
61 stream.read(header);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
62 stream.unread(header);
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
63 return header[0] is 0 && header[1] is 0 && header[2] is 1 && header[3] is 0;
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
64 } catch (Exception e) {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
65 return false;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
66 }
13
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 }
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
68 bool isValidIcon(ImageData i) {
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
69 switch (i.depth) {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
70 case 1:
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
71 case 4:
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
72 case 8:
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
73 if (i.palette.isDirect) return false;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
74 int size = i.palette.colors.length;
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
75 return size is 2 || size is 16 || size is 32 || size is 256;
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
76 case 24:
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
77 case 32:
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
78 return i.palette.isDirect;
55
93981635e709 Checked and inserted missing default switch cases.
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
79 default:
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
80 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
81 return false;
13
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82 }
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 int loadFileHeader(LEDataInputStream byteStream) {
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
84 int[] fileHeader = new int[3];
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
85 try {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
86 fileHeader[0] = byteStream.readShort();
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
87 fileHeader[1] = byteStream.readShort();
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
88 fileHeader[2] = byteStream.readShort();
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
89 } catch (IOException e) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
90 DWT.error(DWT.ERROR_IO, e);
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
91 }
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
92 if ((fileHeader[0] !is 0) || (fileHeader[1] !is 1))
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
93 DWT.error(DWT.ERROR_INVALID_IMAGE);
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
94 int numIcons = fileHeader[2];
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
95 if (numIcons <= 0)
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
96 DWT.error(DWT.ERROR_INVALID_IMAGE);
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
97 return numIcons;
13
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98 }
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99 int loadFileHeader(LEDataInputStream byteStream, bool hasHeader) {
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
100 int[] fileHeader = new int[3];
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
101 try {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
102 if (hasHeader) {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
103 fileHeader[0] = byteStream.readShort();
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
104 fileHeader[1] = byteStream.readShort();
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
105 } else {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
106 fileHeader[0] = 0;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
107 fileHeader[1] = 1;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
108 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
109 fileHeader[2] = byteStream.readShort();
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
110 } catch (IOException e) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
111 DWT.error(DWT.ERROR_IO, e);
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
112 }
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
113 if ((fileHeader[0] !is 0) || (fileHeader[1] !is 1))
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
114 DWT.error(DWT.ERROR_INVALID_IMAGE);
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
115 int numIcons = fileHeader[2];
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
116 if (numIcons <= 0)
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
117 DWT.error(DWT.ERROR_INVALID_IMAGE);
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
118 return numIcons;
13
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 }
152
17f8449522fd overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
120 override ImageData[] loadFromByteStream() {
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
121 int numIcons = loadFileHeader(inputStream);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
122 int[][] headers = loadIconHeaders(numIcons);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
123 ImageData[] icons = new ImageData[headers.length];
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
124 for (int i = 0; i < icons.length; i++) {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
125 icons[i] = loadIcon(headers[i]);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
126 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
127 return icons;
13
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
128 }
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
129 /**
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
130 * Load one icon from the byte stream.
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
131 */
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
132 ImageData loadIcon(int[] iconHeader) {
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
133 byte[] infoHeader = loadInfoHeader(iconHeader);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
134 WinBMPFileFormat bmpFormat = new WinBMPFileFormat();
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
135 bmpFormat.inputStream = inputStream;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
136 PaletteData palette = bmpFormat.loadPalette(infoHeader);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
137 byte[] shapeData = bmpFormat.loadData(infoHeader);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
138 int width = (infoHeader[4] & 0xFF) | ((infoHeader[5] & 0xFF) << 8) | ((infoHeader[6] & 0xFF) << 16) | ((infoHeader[7] & 0xFF) << 24);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
139 int height = (infoHeader[8] & 0xFF) | ((infoHeader[9] & 0xFF) << 8) | ((infoHeader[10] & 0xFF) << 16) | ((infoHeader[11] & 0xFF) << 24);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
140 if (height < 0) height = -height;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
141 int depth = (infoHeader[14] & 0xFF) | ((infoHeader[15] & 0xFF) << 8);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
142 infoHeader[14] = 1;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
143 infoHeader[15] = 0;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
144 byte[] maskData = bmpFormat.loadData(infoHeader);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
145 maskData = convertPad(maskData, width, height, 1, 4, 2);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
146 bitInvertData(maskData, 0, maskData.length);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
147 return ImageData.internal_new(
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
148 width,
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
149 height,
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
150 depth,
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
151 palette,
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
152 4,
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
153 shapeData,
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
154 2,
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
155 maskData,
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
156 null,
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
157 -1,
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
158 -1,
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
159 DWT.IMAGE_ICO,
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
160 0,
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
161 0,
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
162 0,
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
163 0);
13
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
164 }
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
165 int[][] loadIconHeaders(int numIcons) {
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
166 int[][] headers = new int[][]( numIcons, 7 );
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
167 try {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
168 for (int i = 0; i < numIcons; i++) {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
169 headers[i][0] = inputStream.read();
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
170 headers[i][1] = inputStream.read();
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
171 headers[i][2] = inputStream.readShort();
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
172 headers[i][3] = inputStream.readShort();
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
173 headers[i][4] = inputStream.readShort();
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
174 headers[i][5] = inputStream.readInt();
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
175 headers[i][6] = inputStream.readInt();
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
176 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
177 } catch (IOException e) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
178 DWT.error(DWT.ERROR_IO, e);
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
179 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
180 return headers;
13
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
181 }
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
182 byte[] loadInfoHeader(int[] iconHeader) {
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
183 int width = iconHeader[0];
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
184 int height = iconHeader[1];
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
185 int numColors = iconHeader[2]; // the number of colors is in the low byte, but the high byte must be 0
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
186 if (numColors is 0) numColors = 256; // this is specified: '00' represents '256' (0x100) colors
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
187 if ((numColors !is 2) && (numColors !is 8) && (numColors !is 16) &&
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
188 (numColors !is 32) && (numColors !is 256))
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
189 DWT.error(DWT.ERROR_INVALID_IMAGE);
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
190 if (inputStream.getPosition() < iconHeader[6]) {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
191 // Seek to the specified offset
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
192 try {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
193 inputStream.skip(iconHeader[6] - inputStream.getPosition());
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
194 } catch (IOException e) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
195 DWT.error(DWT.ERROR_IO, e);
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
196 return null;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
197 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
198 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
199 byte[] infoHeader = new byte[WinBMPFileFormat.BMPHeaderFixedSize];
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
200 try {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
201 inputStream.read(infoHeader);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
202 } catch (IOException e) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
203 DWT.error(DWT.ERROR_IO, e);
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
204 }
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
205 if (((infoHeader[12] & 0xFF) | ((infoHeader[13] & 0xFF) << 8)) !is 1)
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
206 DWT.error(DWT.ERROR_INVALID_IMAGE);
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
207 int infoWidth = (infoHeader[4] & 0xFF) | ((infoHeader[5] & 0xFF) << 8) | ((infoHeader[6] & 0xFF) << 16) | ((infoHeader[7] & 0xFF) << 24);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
208 int infoHeight = (infoHeader[8] & 0xFF) | ((infoHeader[9] & 0xFF) << 8) | ((infoHeader[10] & 0xFF) << 16) | ((infoHeader[11] & 0xFF) << 24);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
209 int bitCount = (infoHeader[14] & 0xFF) | ((infoHeader[15] & 0xFF) << 8);
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
210 if (height is infoHeight && bitCount is 1) height /= 2;
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
211 if (!((width is infoWidth) && (height * 2 is infoHeight) &&
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
212 (bitCount is 1 || bitCount is 4 || bitCount is 8 || bitCount is 24 || bitCount is 32)))
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
213 DWT.error(DWT.ERROR_INVALID_IMAGE);
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
214 infoHeader[8] = cast(byte)(height & 0xFF);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
215 infoHeader[9] = cast(byte)((height >> 8) & 0xFF);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
216 infoHeader[10] = cast(byte)((height >> 16) & 0xFF);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
217 infoHeader[11] = cast(byte)((height >> 24) & 0xFF);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
218 return infoHeader;
13
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
219 }
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
220 /**
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
221 * Unload a single icon
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
222 */
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
223 void unloadIcon(ImageData icon) {
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
224 int sizeImage = (((icon.width * icon.depth + 31) / 32 * 4) +
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
225 ((icon.width + 31) / 32 * 4)) * icon.height;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
226 try {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
227 outputStream.writeInt(WinBMPFileFormat.BMPHeaderFixedSize);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
228 outputStream.writeInt(icon.width);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
229 outputStream.writeInt(icon.height * 2);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
230 outputStream.writeShort(1);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
231 outputStream.writeShort(cast(short)icon.depth);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
232 outputStream.writeInt(0);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
233 outputStream.writeInt(sizeImage);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
234 outputStream.writeInt(0);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
235 outputStream.writeInt(0);
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
236 outputStream.writeInt(icon.palette.colors !is null ? icon.palette.colors.length : 0);
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
237 outputStream.writeInt(0);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
238 } catch (IOException e) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
239 DWT.error(DWT.ERROR_IO, e);
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
240 }
13
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
241
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
242 byte[] rgbs = WinBMPFileFormat.paletteToBytes(icon.palette);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
243 try {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
244 outputStream.write(rgbs);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
245 } catch (IOException e) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
246 DWT.error(DWT.ERROR_IO, e);
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
247 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
248 unloadShapeData(icon);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
249 unloadMaskData(icon);
13
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
250 }
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
251 /**
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
252 * Unload the icon header for the given icon, calculating the offset.
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
253 */
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
254 void unloadIconHeader(ImageData i) {
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
255 int headerSize = 16;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
256 int offset = headerSize + 6;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
257 int iconSize = iconSize(i);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
258 try {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
259 outputStream.write(i.width);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
260 outputStream.write(i.height);
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
261 outputStream.writeShort(i.palette.colors !is null ? i.palette.colors.length : 0);
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
262 outputStream.writeShort(0);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
263 outputStream.writeShort(0);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
264 outputStream.writeInt(iconSize);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
265 outputStream.writeInt(offset);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
266 } catch (IOException e) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
267 DWT.error(DWT.ERROR_IO, e);
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
268 }
13
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
269 }
152
17f8449522fd overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
270 override void unloadIntoByteStream(ImageLoader loader) {
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
271 /* We do not currently support writing multi-image ico,
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
272 * so we use the first image data in the loader's array. */
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
273 ImageData image = loader.data[0];
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
274 if (!isValidIcon(image))
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
275 DWT.error(DWT.ERROR_INVALID_IMAGE);
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
276 try {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
277 outputStream.writeShort(0);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
278 outputStream.writeShort(1);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
279 outputStream.writeShort(1);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
280 } catch (IOException e) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
281 DWT.error(DWT.ERROR_IO, e);
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
282 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
283 unloadIconHeader(image);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
284 unloadIcon(image);
13
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
285 }
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
286 /**
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
287 * Unload the mask data for an icon. The data is flipped vertically
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
288 * and inverted.
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
289 */
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
290 void unloadMaskData(ImageData icon) {
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
291 ImageData mask = icon.getTransparencyMask();
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
292 int bpl = (icon.width + 7) / 8;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
293 int pad = mask.scanlinePad;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
294 int srcBpl = (bpl + pad - 1) / pad * pad;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
295 int destBpl = (bpl + 3) / 4 * 4;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
296 byte[] buf = new byte[destBpl];
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
297 int offset = (icon.height - 1) * srcBpl;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
298 byte[] data = mask.data;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
299 try {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
300 for (int i = 0; i < icon.height; i++) {
25
fc2b263b8a3f Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents: 13
diff changeset
301 System.arraycopy(data, offset, buf, 0, bpl);
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
302 bitInvertData(buf, 0, bpl);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
303 outputStream.write(buf, 0, destBpl);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
304 offset -= srcBpl;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
305 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
306 } catch (IOException e) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
307 DWT.error(DWT.ERROR_IO, e);
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
308 }
13
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
309 }
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
310 /**
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
311 * Unload the shape data for an icon. The data is flipped vertically.
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
312 */
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
313 void unloadShapeData(ImageData icon) {
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
314 int bpl = (icon.width * icon.depth + 7) / 8;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
315 int pad = icon.scanlinePad;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
316 int srcBpl = (bpl + pad - 1) / pad * pad;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
317 int destBpl = (bpl + 3) / 4 * 4;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
318 byte[] buf = new byte[destBpl];
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
319 int offset = (icon.height - 1) * srcBpl;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
320 byte[] data = icon.data;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
321 try {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
322 for (int i = 0; i < icon.height; i++) {
25
fc2b263b8a3f Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents: 13
diff changeset
323 System.arraycopy(data, offset, buf, 0, bpl);
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
324 outputStream.write(buf, 0, destBpl);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
325 offset -= srcBpl;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
326 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
327 } catch (IOException e) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
328 DWT.error(DWT.ERROR_IO, e);
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
329 }
13
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
330 }
3d9bbe0a83a0 FileFormats
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
331 }