annotate dwt/graphics/Image.d @ 255:5a30aa9820f3

removed tango.stdc.stringz imports and allow null for arrays and string arguments.
author Frank Benoit <benoit@tionex.de>
date Sun, 15 Jun 2008 22:32:20 +0200
parents ce446666f5a2
children c0d810de7093
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
72
5899e0b43e5d porting notice
Frank Benoit <benoit@tionex.de>
parents: 71
diff changeset
1 /*******************************************************************************
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2 * Copyright (c) 2000, 2007 IBM Corporation and others.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
72
5899e0b43e5d porting notice
Frank Benoit <benoit@tionex.de>
parents: 71
diff changeset
10 * Port to the D programming language:
5899e0b43e5d porting notice
Frank Benoit <benoit@tionex.de>
parents: 71
diff changeset
11 * Frank Benoit <benoit@tionex.de>
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 *******************************************************************************/
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13 module dwt.graphics.Image;
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15 import dwt.internal.Converter;
19
Frank Benoit <benoit@tionex.de>
parents: 18
diff changeset
16 import dwt.internal.cairo.Cairo;
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17 import dwt.internal.gtk.OS;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
18 import dwt.DWT;
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
19 import dwt.DWTException;
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20 import dwt.graphics.Color;
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21 import dwt.graphics.Device;
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22 import dwt.graphics.Drawable;
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23 import dwt.graphics.GC;
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24 import dwt.graphics.GCData;
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 import dwt.graphics.ImageData;
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 import dwt.graphics.PaletteData;
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27 import dwt.graphics.RGB;
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28 import dwt.graphics.Rectangle;
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29 import dwt.graphics.Resource;
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31 import dwt.dwthelper.InputStream;
200
08789b28bdf3 import dwt.dwthelper.utils now explicit
Frank Benoit <benoit@tionex.de>
parents: 150
diff changeset
32 import dwt.dwthelper.utils;
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34 import tango.text.convert.Format;
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35 import tango.stdc.string;
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37 /**
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38 * Instances of this class are graphics which have been prepared
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39 * for display on a specific device. That is, they are ready
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40 * to paint using methods such as <code>GC.drawImage()</code>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41 * and display on widgets with, for example, <code>Button.setImage()</code>.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 * <p>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
43 * If loaded from a file format that supports it, an
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44 * <code>Image</code> may have transparency, meaning that certain
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45 * pixels are specified as being transparent when drawn. Examples
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 * of file formats that support transparency are GIF and PNG.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 * </p><p>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48 * There are two primary ways to use <code>Images</code>.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 * The first is to load a graphic file from disk and create an
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50 * <code>Image</code> from it. This is done using an <code>Image</code>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 * constructor, for example:
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52 * <pre>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 * Image i = new Image(device, "C:\\graphic.bmp");
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54 * </pre>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 * A graphic file may contain a color table specifying which
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56 * colors the image was intended to possess. In the above example,
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57 * these colors will be mapped to the closest available color in
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
58 * DWT. It is possible to get more control over the mapping of
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59 * colors as the image is being created, using code of the form:
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60 * <pre>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61 * ImageData data = new ImageData("C:\\graphic.bmp");
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62 * RGB[] rgbs = data.getRGBs();
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
63 * // At this point, rgbs contains specifications of all
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64 * // the colors contained within this image. You may
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65 * // allocate as many of these colors as you wish by
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66 * // using the Color constructor Color(RGB), then
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 * // create the image:
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
68 * Image i = new Image(device, data);
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69 * </pre>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70 * <p>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71 * Applications which require even greater control over the image
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72 * loading process should use the support provided in class
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73 * <code>ImageLoader</code>.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74 * </p><p>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75 * Application code must explicitly invoke the <code>Image.dispose()</code>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76 * method to release the operating system resources managed by each instance
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77 * when those instances are no longer required.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78 * </p>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80 * @see Color
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81 * @see ImageData
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82 * @see ImageLoader
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 */
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 public final class Image : Resource, Drawable {
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
85 alias Resource.init_ init_;
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
86 /**
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 * specifies whether the receiver is a bitmap or an icon
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
88 * (one of <code>DWT.BITMAP</code>, <code>DWT.ICON</code>)
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
89 * <p>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
90 * <b>IMPORTANT:</b> This field is <em>not</em> part of the DWT
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 * public API. It is marked public only so that it can be shared
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
92 * within the packages provided by DWT. It is not available on all
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
93 * platforms and should never be accessed from application code.
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 * </p>
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 */
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
96 public int type;
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97
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
98 /**
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
99 * The handle to the OS pixmap resource.
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 * (Warning: This field is platform dependent)
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 * <p>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
102 * <b>IMPORTANT:</b> This field is <em>not</em> part of the DWT
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
103 * public API. It is marked public only so that it can be shared
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
104 * within the packages provided by DWT. It is not available on all
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
105 * platforms and should never be accessed from application code.
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 * </p>
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 */
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 public GdkDrawable* pixmap;
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109
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
110 /**
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
111 * The handle to the OS mask resource.
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 * (Warning: This field is platform dependent)
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
113 * <p>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
114 * <b>IMPORTANT:</b> This field is <em>not</em> part of the DWT
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 * public API. It is marked public only so that it can be shared
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
116 * within the packages provided by DWT. It is not available on all
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
117 * platforms and should never be accessed from application code.
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 * </p>
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
119 */
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
120 public GdkDrawable* mask;
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
121
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
122 cairo_surface_t* surface;
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123 cairo_surface_t* surfaceData;
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
124
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
125 /**
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 * specifies the transparent pixel
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 */
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
128 int transparentPixel = -1;
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
129
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
130 /**
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
131 * The GC the image is currently selected in.
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
132 */
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 GC memGC;
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
134
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
135 /**
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 * The alpha data of the 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
137 */
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 byte[] alphaData;
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
139
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
140 /**
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 * The global alpha value to be used for every pixel.
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 */
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 int alpha = -1;
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
144
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
145 /**
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 * The width of the 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
147 */
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 int width = -1;
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
149
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
150 /**
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 * The height of the 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
152 */
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 int height = -1;
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
154
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
155 /**
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 * Specifies the default scanline padding.
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 */
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 static const int DEFAULT_SCANLINE_PAD = 4;
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
159
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
160 this(Device device) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
161 super(device);
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
162 }
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
163
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
164 /**
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
165 * Constructs an empty instance of this class with the
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
166 * specified width and height. The result may be drawn upon
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
167 * by creating a GC and using any of its drawing operations,
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
168 * as shown in the following example:
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
169 * <pre>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
170 * Image i = new Image(device, width, height);
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
171 * GC gc = new GC(i);
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
172 * gc.drawRectangle(0, 0, 50, 50);
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
173 * gc.dispose();
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
174 * </pre>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
175 * <p>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
176 * Note: Some platforms may have a limitation on the size
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
177 * of image that can be created (size depends on width, height,
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
178 * and depth). For example, Windows 95, 98, and ME do not allow
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
179 * images larger than 16M.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
180 * </p>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
181 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
182 * @param device the device on which to create the image
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
183 * @param width the width of the new image
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
184 * @param height the height of the new image
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
185 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
186 * @exception IllegalArgumentException <ul>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
187 * <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
188 * <li>ERROR_INVALID_ARGUMENT - if either the width or height is negative or zero</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
189 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
190 * @exception DWTError <ul>
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
191 * <li>ERROR_NO_HANDLES if a handle could not be obtained for image creation</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
192 * </ul>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
193 */
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
194 public this(Device device, int width, int height) {
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
195 super(device);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
196 init_(width, height);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
197 init_();
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
198 }
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
199
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
200 /**
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
201 * Constructs a new instance of this class based on the
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
202 * provided image, with an appearance that varies depending
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
203 * on the value of the flag. The possible flag values are:
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
204 * <dl>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
205 * <dt><b>IMAGE_COPY</b></dt>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
206 * <dd>the result is an identical copy of srcImage</dd>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
207 * <dt><b>IMAGE_DISABLE</b></dt>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
208 * <dd>the result is a copy of srcImage which has a <em>disabled</em> look</dd>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
209 * <dt><b>IMAGE_GRAY</b></dt>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
210 * <dd>the result is a copy of srcImage which has a <em>gray scale</em> look</dd>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
211 * </dl>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
212 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
213 * @param device the device on which to create the image
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
214 * @param srcImage the image to use as the source
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
215 * @param flag the style, either <code>IMAGE_COPY</code>, <code>IMAGE_DISABLE</code> or <code>IMAGE_GRAY</code>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
216 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
217 * @exception IllegalArgumentException <ul>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
218 * <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
219 * <li>ERROR_NULL_ARGUMENT - if srcImage is null</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
220 * <li>ERROR_INVALID_ARGUMENT - if the flag is not one of <code>IMAGE_COPY</code>, <code>IMAGE_DISABLE</code> or <code>IMAGE_GRAY</code></li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
221 * <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
222 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
223 * @exception DWTException <ul>
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
224 * <li>ERROR_INVALID_IMAGE - if the image is not a bitmap or an icon, or is otherwise in an invalid state</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
225 * <li>ERROR_UNSUPPORTED_DEPTH - if the depth of the image is not supported</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
226 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
227 * @exception DWTError <ul>
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
228 * <li>ERROR_NO_HANDLES if a handle could not be obtained for image creation</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
229 * </ul>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
230 */
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
231 public this(Device device, Image srcImage, int flag) {
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
232 super(device);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
233 if (srcImage is null) DWT.error(DWT.ERROR_NULL_ARGUMENT);
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
234 if (srcImage.isDisposed()) DWT.error(DWT.ERROR_INVALID_ARGUMENT);
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
235 switch (flag) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
236 case DWT.IMAGE_COPY:
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
237 case DWT.IMAGE_DISABLE:
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
238 case DWT.IMAGE_GRAY:
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
239 break;
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 default:
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
241 DWT.error(DWT.ERROR_INVALID_ARGUMENT);
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 }
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
243 device = this.device;
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
244 this.type = srcImage.type;
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
245
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
246 /* Get source image size */
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 int w, h;
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 OS.gdk_drawable_get_size(srcImage.pixmap, &w, &h);
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 int width = w;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
250 int height = h;
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
251
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
252 /* Copy the mask */
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
253 if ((srcImage.type is DWT.ICON && srcImage.mask !is null ) || srcImage.transparentPixel !is -1) {
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
254 /* Generate the mask if necessary. */
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
255 if (srcImage.transparentPixel !is -1) srcImage.createMask();
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
256 //PORTING_FIXME cast
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
257 GdkDrawable* mask = cast(GdkDrawable*) OS.gdk_pixmap_new( null, width, height, 1);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
258 if (mask is null ) DWT.error(DWT.ERROR_NO_HANDLES);
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
259 auto gdkGC = OS.gdk_gc_new(mask);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
260 if (gdkGC is null) DWT.error(DWT.ERROR_NO_HANDLES);
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
261 OS.gdk_draw_drawable(mask, gdkGC, srcImage.mask, 0, 0, 0, 0, width, 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
262 OS.g_object_unref(gdkGC);
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 this.mask = mask;
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 /* Destroy the image mask if the there is a GC created on the image */
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
265 if (srcImage.transparentPixel !is -1 && srcImage.memGC !is null) srcImage.destroyMask();
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
266 }
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
267
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 /* Copy transparent pixel and alpha data */
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
269 if (flag !is DWT.IMAGE_DISABLE) transparentPixel = srcImage.transparentPixel;
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
270 alpha = srcImage.alpha;
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
271 if (srcImage.alphaData !is null) {
25
fc2b263b8a3f Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents: 19
diff changeset
272 alphaData = new byte[srcImage.alphaData.length];
fc2b263b8a3f Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents: 19
diff changeset
273 System.arraycopy(srcImage.alphaData, 0, alphaData, 0, alphaData.length);
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
274 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
275 createAlphaMask(width, height);
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
276
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
277 /* Create the new pixmap */
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 auto pixmap = cast(GdkDrawable*) OS.gdk_pixmap_new (cast(GdkDrawable*)OS.GDK_ROOT_PARENT(), width, height, -1);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
279 if (pixmap is null) DWT.error(DWT.ERROR_NO_HANDLES);
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
280 auto gdkGC = OS.gdk_gc_new(pixmap);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
281 if (gdkGC is null) DWT.error(DWT.ERROR_NO_HANDLES);
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 this.pixmap = pixmap;
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
283
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
284 if (flag is DWT.IMAGE_COPY) {
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
285 OS.gdk_draw_drawable(pixmap, gdkGC, srcImage.pixmap, 0, 0, 0, 0, width, 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
286 OS.g_object_unref(gdkGC);
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
287 } else {
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
288
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
289 /* Retrieve the source pixmap data */
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
290 auto pixbuf = OS.gdk_pixbuf_new(OS.GDK_COLORSPACE_RGB, false, 8, width, height);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
291 if (pixbuf is null) DWT.error(DWT.ERROR_NO_HANDLES);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
292 auto colormap = OS.gdk_colormap_get_system();
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
293 OS.gdk_pixbuf_get_from_drawable(pixbuf, srcImage.pixmap, colormap, 0, 0, 0, 0, width, height);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
294 int stride = OS.gdk_pixbuf_get_rowstride(pixbuf);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
295 auto pixels = OS.gdk_pixbuf_get_pixels(pixbuf);
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
296
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
297 /* Apply transformation */
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
298 switch (flag) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
299 case DWT.IMAGE_DISABLE: {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
300 Color zeroColor = device.getSystemColor(DWT.COLOR_WIDGET_NORMAL_SHADOW);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
301 RGB zeroRGB = zeroColor.getRGB();
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
302 byte zeroRed = cast(byte)zeroRGB.red;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
303 byte zeroGreen = cast(byte)zeroRGB.green;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
304 byte zeroBlue = cast(byte)zeroRGB.blue;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
305 Color oneColor = device.getSystemColor(DWT.COLOR_WIDGET_BACKGROUND);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
306 RGB oneRGB = oneColor.getRGB();
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
307 byte oneRed = cast(byte)oneRGB.red;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
308 byte oneGreen = cast(byte)oneRGB.green;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
309 byte oneBlue = cast(byte)oneRGB.blue;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
310 byte[] line = new byte[stride];
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
311 for (int y=0; y<height; y++) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
312 memmove(line.ptr, pixels + (y * stride), stride);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
313 for (int x=0; x<width; x++) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
314 int offset = x*3;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
315 int red = line[offset] & 0xFF;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
316 int green = line[offset+1] & 0xFF;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
317 int blue = line[offset+2] & 0xFF;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
318 int intensity = red * red + green * green + blue * blue;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
319 if (intensity < 98304) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
320 line[offset] = zeroRed;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
321 line[offset+1] = zeroGreen;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
322 line[offset+2] = zeroBlue;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
323 } else {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
324 line[offset] = oneRed;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
325 line[offset+1] = oneGreen;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
326 line[offset+2] = oneBlue;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
327 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
328 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
329 memmove(pixels + (y * stride), line.ptr, stride);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
330 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
331 break;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
332 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
333 case DWT.IMAGE_GRAY: {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
334 byte[] line = new byte[stride];
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
335 for (int y=0; y<height; y++) {
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
336 memmove(line.ptr, pixels + (y * stride), stride);
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
337 for (int x=0; x<width; x++) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
338 int offset = x*3;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
339 int red = line[offset] & 0xFF;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
340 int green = line[offset+1] & 0xFF;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
341 int blue = line[offset+2] & 0xFF;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
342 byte intensity = cast(byte)((red+red+green+green+green+green+green+blue) >> 3);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
343 line[offset] = line[offset+1] = line[offset+2] = intensity;
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
344 }
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
345 memmove(pixels + (y * stride), line.ptr, stride);
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
346 }
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
347 break;
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
348 }
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
349 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
350 }
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
351
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
352 /* Copy data back to destination pixmap */
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
353 OS.gdk_pixbuf_render_to_drawable(pixbuf, pixmap, gdkGC, 0, 0, 0, 0, width, height, OS.GDK_RGB_DITHER_NORMAL, 0, 0);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
354
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
355 /* Free resources */
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
356 OS.g_object_unref(pixbuf);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
357 OS.g_object_unref(gdkGC);
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
358 }
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
359 init_();
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
360 }
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
361
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
362 /**
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
363 * Constructs an empty instance of this class with the
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
364 * width and height of the specified rectangle. The result
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
365 * may be drawn upon by creating a GC and using any of its
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
366 * drawing operations, as shown in the following example:
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
367 * <pre>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
368 * Image i = new Image(device, boundsRectangle);
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
369 * GC gc = new GC(i);
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
370 * gc.drawRectangle(0, 0, 50, 50);
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
371 * gc.dispose();
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
372 * </pre>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
373 * <p>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
374 * Note: Some platforms may have a limitation on the size
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
375 * of image that can be created (size depends on width, height,
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
376 * and depth). For example, Windows 95, 98, and ME do not allow
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
377 * images larger than 16M.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
378 * </p>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
379 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
380 * @param device the device on which to create the image
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
381 * @param bounds a rectangle specifying the image's width and height (must not be null)
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
382 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
383 * @exception IllegalArgumentException <ul>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
384 * <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
385 * <li>ERROR_NULL_ARGUMENT - if the bounds rectangle is null</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
386 * <li>ERROR_INVALID_ARGUMENT - if either the rectangle's width or height is negative</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
387 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
388 * @exception DWTError <ul>
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
389 * <li>ERROR_NO_HANDLES if a handle could not be obtained for image creation</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
390 * </ul>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
391 */
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
392 public this(Device device, Rectangle bounds) {
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
393 super(device);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
394 if (bounds is null) DWT.error(DWT.ERROR_NULL_ARGUMENT);
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
395 init_(bounds.width, bounds.height);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
396 init_();
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
397 }
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
398
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
399 /**
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
400 * Constructs an instance of this class from the given
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
401 * <code>ImageData</code>.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
402 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
403 * @param device the device on which to create the image
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
404 * @param data the image data to create the image from (must not be null)
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
405 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
406 * @exception IllegalArgumentException <ul>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
407 * <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
408 * <li>ERROR_NULL_ARGUMENT - if the image data is null</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
409 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
410 * @exception DWTException <ul>
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
411 * <li>ERROR_UNSUPPORTED_DEPTH - if the depth of the ImageData is not supported</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
412 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
413 * @exception DWTError <ul>
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
414 * <li>ERROR_NO_HANDLES if a handle could not be obtained for image creation</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
415 * </ul>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
416 */
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
417 public this(Device device, ImageData data) {
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
418 super(device);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
419 init_(data);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
420 init_();
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
421 }
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
422
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
423 /**
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
424 * Constructs an instance of this class, whose type is
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
425 * <code>DWT.ICON</code>, from the two given <code>ImageData</code>
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
426 * objects. The two images must be the same size. Pixel transparency
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
427 * in either image will be ignored.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
428 * <p>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
429 * The mask image should contain white wherever the icon is to be visible,
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
430 * and black wherever the icon is to be transparent. In addition,
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
431 * the source image should contain black wherever the icon is to be
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
432 * transparent.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
433 * </p>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
434 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
435 * @param device the device on which to create the icon
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
436 * @param source the color data for the icon
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
437 * @param mask the mask data for the icon
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
438 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
439 * @exception IllegalArgumentException <ul>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
440 * <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
441 * <li>ERROR_NULL_ARGUMENT - if either the source or mask is null </li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
442 * <li>ERROR_INVALID_ARGUMENT - if source and mask are different sizes</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
443 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
444 * @exception DWTError <ul>
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
445 * <li>ERROR_NO_HANDLES if a handle could not be obtained for image creation</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
446 * </ul>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
447 */
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
448 public this(Device device, ImageData source, ImageData mask) {
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
449 super(device);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
450 if (source is null) DWT.error(DWT.ERROR_NULL_ARGUMENT);
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
451 if (mask is null) DWT.error(DWT.ERROR_NULL_ARGUMENT);
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
452 if (source.width !is mask.width || source.height !is mask.height) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
453 DWT.error(DWT.ERROR_INVALID_ARGUMENT);
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
454 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
455 mask = ImageData.convertMask (mask);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
456 ImageData image = new ImageData(source.width, source.height, source.depth, source.palette, source.scanlinePad, source.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
457 image.maskPad = 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
458 image.maskData = mask.data;
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
459 init_(image);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
460 init_();
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
461 }
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
462
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
463 /**
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
464 * Constructs an instance of this class by loading its representation
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
465 * from the specified input stream. Throws an error if an error
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
466 * occurs while loading the image, or if the result is an image
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
467 * of an unsupported type. Application code is still responsible
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
468 * for closing the input stream.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
469 * <p>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
470 * This constructor is provided for convenience when loading a single
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
471 * image only. If the stream contains multiple images, only the first
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
472 * one will be loaded. To load multiple images, use
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
473 * <code>ImageLoader.load()</code>.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
474 * </p><p>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
475 * This constructor may be used to load a resource as follows:
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
476 * </p>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
477 * <pre>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
478 * static Image loadImage (Display display, Class clazz, String string) {
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
479 * InputStream stream = clazz.getResourceAsStream (string);
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
480 * if (stream is null) return null;
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
481 * Image image = null;
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
482 * try {
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
483 * image = new Image (display, stream);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
484 * } catch (DWTException ex) {
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
485 * } finally {
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
486 * try {
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
487 * stream.close ();
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
488 * } catch (IOException ex) {}
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
489 * }
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
490 * return image;
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
491 * }
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
492 * </pre>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
493 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
494 * @param device the device on which to create the image
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
495 * @param stream the input stream to load the image from
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
496 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
497 * @exception IllegalArgumentException <ul>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
498 * <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
499 * <li>ERROR_NULL_ARGUMENT - if the stream is null</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
500 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
501 * @exception DWTException <ul>
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
502 * <li>ERROR_IO - if an IO error occurs while reading from the stream</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
503 * <li>ERROR_INVALID_IMAGE - if the image stream contains invalid data </li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
504 * <li>ERROR_UNSUPPORTED_DEPTH - if the image stream describes an image with an unsupported depth</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
505 * <li>ERROR_UNSUPPORTED_FORMAT - if the image stream contains an unrecognized format</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
506 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
507 * @exception DWTError <ul>
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
508 * <li>ERROR_NO_HANDLES if a handle could not be obtained for image creation</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
509 * </ul>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
510 */
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
511 public this(Device device, InputStream stream) {
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
512 super(device);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
513 init_(new ImageData(stream));
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
514 init_();
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
515 }
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
516
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
517 /**
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
518 * Constructs an instance of this class by loading its representation
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
519 * from the file with the specified name. Throws an error if an error
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
520 * occurs while loading the image, or if the result is an image
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
521 * of an unsupported type.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
522 * <p>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
523 * This constructor is provided for convenience when loading
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
524 * a single image only. If the specified file contains
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
525 * multiple images, only the first one will be used.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
526 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
527 * @param device the device on which to create the image
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
528 * @param filename the name of the file to load the image from
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
529 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
530 * @exception IllegalArgumentException <ul>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
531 * <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
532 * <li>ERROR_NULL_ARGUMENT - if the file name is null</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
533 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
534 * @exception DWTException <ul>
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
535 * <li>ERROR_IO - if an IO error occurs while reading from the file</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
536 * <li>ERROR_INVALID_IMAGE - if the image file contains invalid data </li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
537 * <li>ERROR_UNSUPPORTED_DEPTH - if the image file describes an image with an unsupported depth</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
538 * <li>ERROR_UNSUPPORTED_FORMAT - if the image file contains an unrecognized format</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
539 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
540 * @exception DWTError <ul>
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
541 * <li>ERROR_NO_HANDLES if a handle could not be obtained for image creation</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
542 * </ul>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
543 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 216
diff changeset
544 public this(Device device, String filename) {
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
545 super(device);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
546 if (filename is null) DWT.error(DWT.ERROR_NULL_ARGUMENT);
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
547 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
548 int length = filename.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
549 auto pixbuf = OS.gdk_pixbuf_new_from_file(toStringz(filename), 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
550 if (pixbuf !is 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
551 bool hasAlpha = cast(bool)OS.gdk_pixbuf_get_has_alpha(pixbuf);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
552 if (hasAlpha) {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
553 /*
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
554 * Bug in GTK. Depending on the image (seems to affect images that have
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
555 * some degree of transparency all over the image), gdk_pixbuff_render_pixmap_and_mask()
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
556 * will return a corrupt pixmap. To avoid this, read in and store the alpha channel 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
557 * for the image and then set it to 0xFF to prevent any possible corruption from
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
558 * gdk_pixbuff_render_pixmap_and_mask().
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
559 */
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
560 int width = OS.gdk_pixbuf_get_width(pixbuf);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
561 int height = OS.gdk_pixbuf_get_height(pixbuf);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
562 int stride = OS.gdk_pixbuf_get_rowstride(pixbuf);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
563 auto pixels = OS.gdk_pixbuf_get_pixels(pixbuf);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
564 byte[] line = new byte[stride];
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
565 alphaData = new byte[width * 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
566 for (int y = 0; y < height; y++) {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
567 memmove(line.ptr, pixels + (y * stride), stride);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
568 for (int x = 0; x < width; x++) {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
569 alphaData[y*width+x] = line[x*4 + 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
570 line[x*4 + 3] = cast(byte) 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
571 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
572 memmove(pixels + (y * stride), line.ptr, stride);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
573 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
574 createAlphaMask(width, 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
575 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
576 GdkPixmap* pixmap_return;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
577 OS.gdk_pixbuf_render_pixmap_and_mask(pixbuf, &pixmap_return, null, 0);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
578 this.type = DWT.BITMAP;
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
579 this.pixmap = cast(GdkDrawable*)pixmap_return;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
580 if (pixmap is null) DWT.error(DWT.ERROR_NO_HANDLES);
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
581 OS.g_object_unref (pixbuf);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
582 return;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
583 }
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
584 } catch (DWTException e) {}
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
585 init_(new ImageData(filename));
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
586 init_();
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
587 }
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
588
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
589 void createAlphaMask (int width, int height) {
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
590 if (device.useXRender && (alpha !is -1 || alphaData !is null)) {
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
591 mask = cast(GdkDrawable*)OS.gdk_pixmap_new(null, alpha !is -1 ? 1 : width, alpha !is -1 ? 1 : height, 8);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
592 if (mask is null) DWT.error(DWT.ERROR_NO_HANDLES);
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
593 auto gc = OS.gdk_gc_new(mask);
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
594 if (alpha !is -1) {
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
595 GdkColor* color = new GdkColor();
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
596 color.pixel = (alpha & 0xFF) << 8 | (alpha & 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
597 OS.gdk_gc_set_foreground(gc, color);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
598 OS.gdk_draw_rectangle(mask, gc, 1, 0, 0, 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
599 } 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
600 GdkImage* imagePtr = OS.gdk_drawable_get_image(mask, 0, 0, width, height);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
601 if (imagePtr is null) DWT.error(DWT.ERROR_NO_HANDLES);
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
602 GdkImage* gdkImage = new GdkImage();
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
603 *gdkImage = *imagePtr;
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
604 if (gdkImage.bpl is width) {
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
605 memmove(gdkImage.mem, alphaData.ptr, alphaData.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
606 } 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
607 byte[] line = new byte[gdkImage.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
608 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: 19
diff changeset
609 System.arraycopy(alphaData, width * y, line, 0, width);
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
610 memmove(gdkImage.mem + (gdkImage.bpl * y), line.ptr, gdkImage.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
611 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
612 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
613 OS.gdk_draw_image(mask, gc, imagePtr, 0, 0, 0, 0, width, 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
614 OS.g_object_unref(imagePtr);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
615 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
616 OS.g_object_unref(gc);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
617 }
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
618 }
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
619
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
620 /**
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
621 * Create the receiver's mask if necessary.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
622 */
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
623 void createMask() {
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
624 if (mask !is null ) return;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
625 mask = createMask(getImageData(), false);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
626 if (mask is null ) DWT.error(DWT.ERROR_NO_HANDLES);
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
627 }
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
628
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
629 GdkDrawable* createMask(ImageData image, bool copy) {
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
630 ImageData mask = image.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
631 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
632 byte[] maskData = copy ? new byte[data.length] : 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
633 for (int i = 0; i < maskData.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
634 byte s = data[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
635 maskData[i] = cast(byte)(((s & 0x80) >> 7) | ((s & 0x40) >> 5) |
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
636 ((s & 0x20) >> 3) | ((s & 0x10) >> 1) | ((s & 0x08) << 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
637 ((s & 0x04) << 3) | ((s & 0x02) << 5) | ((s & 0x01) << 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
638 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
639 maskData = ImageData.convertPad(maskData, mask.width, mask.height, mask.depth, mask.scanlinePad, 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
640 return cast(GdkDrawable*)OS.gdk_bitmap_create_from_data(null, cast(char*)maskData.ptr, mask.width, mask.height);
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
641 }
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
642
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
643 void createSurface() {
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
644 if (surface !is null ) return;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
645 /* Generate the mask if necessary. */
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
646 if (transparentPixel !is -1) createMask();
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
647 int w, h;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
648 OS.gdk_drawable_get_size(pixmap, &w, &h);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
649 int width = w, height = h;
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
650 if (mask !is null || alpha !is -1 || alphaData !is null) {
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
651 auto pixbuf = OS.gdk_pixbuf_new( OS.GDK_COLORSPACE_RGB, true, 8, width, height);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
652 if (pixbuf is null) DWT.error(DWT.ERROR_NO_HANDLES);
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
653 auto colormap = OS.gdk_colormap_get_system();
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
654 OS.gdk_pixbuf_get_from_drawable(pixbuf, pixmap, colormap, 0, 0, 0, 0, width, 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
655 int stride = OS.gdk_pixbuf_get_rowstride(pixbuf);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
656 auto pixels = OS.gdk_pixbuf_get_pixels(pixbuf);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
657 byte[] line = new byte[stride];
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
658 if (mask !is null && OS.gdk_drawable_get_depth(mask) is 1) {
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
659 auto maskPixbuf = OS.gdk_pixbuf_new(OS.GDK_COLORSPACE_RGB, false, 8, width, height);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
660 if (maskPixbuf is null) DWT.error(DWT.ERROR_NO_HANDLES);
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
661 OS.gdk_pixbuf_get_from_drawable(maskPixbuf, mask, null, 0, 0, 0, 0, width, 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
662 int maskStride = OS.gdk_pixbuf_get_rowstride(maskPixbuf);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
663 auto maskPixels = OS.gdk_pixbuf_get_pixels(maskPixbuf);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
664 byte[] maskLine = new byte[maskStride];
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
665 auto offset = pixels, maskOffset = maskPixels;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
666 for (int y=0; y<height; y++) {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
667 memmove(line.ptr, offset, stride);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
668 memmove(maskLine.ptr, maskOffset, maskStride);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
669 for (int x=0, offset1=0; x<width; x++, offset1 += 4) {
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
670 if (maskLine[x * 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
671 line[offset1 + 0] = line[offset1 + 1] = line[offset1 + 2] = line[offset1 + 3] = 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
672 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
673 byte temp = line[offset1];
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
674 line[offset1] = line[offset1 + 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
675 line[offset1 + 2] = temp;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
676 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
677 memmove(offset, line.ptr, stride);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
678 offset += stride;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
679 maskOffset += maskStride;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
680 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
681 OS.g_object_unref(maskPixbuf);
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
682 } else if (alpha !is -1) {
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
683 auto offset = pixels;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
684 for (int y=0; y<height; y++) {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
685 memmove(line.ptr, offset, stride);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
686 for (int x=0, offset1=0; x<width; x++, offset1 += 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
687 line[offset1+3] = cast(byte)alpha;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
688 /* pre-multiplied alpha */
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
689 int r = ((line[offset1 + 0] & 0xFF) * alpha) + 128;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
690 r = (r + (r >> 8)) >> 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
691 int g = ((line[offset1 + 1] & 0xFF) * alpha) + 128;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
692 g = (g + (g >> 8)) >> 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
693 int b = ((line[offset1 + 2] & 0xFF) * alpha) + 128;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
694 b = (b + (b >> 8)) >> 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
695 line[offset1 + 0] = cast(byte)b;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
696 line[offset1 + 1] = cast(byte)g;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
697 line[offset1 + 2] = cast(byte)r;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
698 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
699 memmove(offset, line.ptr, stride);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
700 offset += stride;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
701 }
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
702 } else if (alphaData !is null) {
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
703 auto offset = pixels;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
704 for (int y = 0; y < h; y++) {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
705 memmove (line.ptr, offset, stride);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
706 for (int x=0, offset1=0; x<width; x++, offset1 += 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
707 int alpha = alphaData [y*w+x] & 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
708 line[offset1+3] = cast(byte)alpha;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
709 /* pre-multiplied alpha */
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
710 int r = ((line[offset1 + 0] & 0xFF) * alpha) + 128;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
711 r = (r + (r >> 8)) >> 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
712 int g = ((line[offset1 + 1] & 0xFF) * alpha) + 128;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
713 g = (g + (g >> 8)) >> 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
714 int b = ((line[offset1 + 2] & 0xFF) * alpha) + 128;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
715 b = (b + (b >> 8)) >> 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
716 line[offset1 + 0] = cast(byte)b;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
717 line[offset1 + 1] = cast(byte)g;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
718 line[offset1 + 2] = cast(byte)r;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
719 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
720 memmove (offset, line.ptr, stride);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
721 offset += stride;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
722 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
723 } 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
724 auto offset = pixels;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
725 for (int y = 0; y < h; y++) {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
726 memmove (line.ptr, offset, stride);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
727 for (int x=0, offset1=0; x<width; x++, offset1 += 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
728 line[offset1+3] = cast(byte)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
729 byte temp = line[offset1];
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
730 line[offset1] = line[offset1 + 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
731 line[offset1 + 2] = temp;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
732 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
733 memmove (offset, line.ptr, stride);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
734 offset += stride;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
735 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
736 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
737 surfaceData = cast(cairo_surface_t*) OS.g_malloc(stride * 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
738 memmove(surfaceData, pixels, stride * 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
739 surface = Cairo.cairo_image_surface_create_for_data(cast(char*)surfaceData, Cairo.CAIRO_FORMAT_ARGB32, width, height, stride);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
740 OS.g_object_unref(pixbuf);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
741 } 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
742 auto xDisplay = OS.GDK_DISPLAY();
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
743 auto xDrawable = OS.GDK_PIXMAP_XID(pixmap);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
744 auto xVisual = OS.gdk_x11_visual_get_xvisual(OS.gdk_visual_get_system());
19
Frank Benoit <benoit@tionex.de>
parents: 18
diff changeset
745 // PORTING_FIXME cast and types not good
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
746 surface = Cairo.cairo_xlib_surface_create(cast(void*)xDisplay, xDrawable, xVisual, width, 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
747 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
748 /* Destroy the image mask if the there is a GC created on the image */
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
749 if (transparentPixel !is -1 && memGC !is null) destroyMask();
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
750 }
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
751
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
752 /**
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
753 * Destroy the receiver's mask if it exists.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
754 */
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
755 void destroyMask() {
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
756 if (mask is null) return;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
757 OS.g_object_unref(mask);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
758 mask = null;
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
759 }
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
760
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
761 void destroy() {
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
762 if (memGC !is null) memGC.dispose();
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
763 if (pixmap !is null) OS.g_object_unref(pixmap);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
764 if (mask !is null) OS.g_object_unref(mask);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
765 if (surface !is null) Cairo.cairo_surface_destroy(surface);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
766 if (surfaceData !is null) OS.g_free(surfaceData);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
767 surfaceData = null;
19
Frank Benoit <benoit@tionex.de>
parents: 18
diff changeset
768 surface = null;
Frank Benoit <benoit@tionex.de>
parents: 18
diff changeset
769 pixmap = null;
Frank Benoit <benoit@tionex.de>
parents: 18
diff changeset
770 mask = null;
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
771 memGC = null;
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
772 }
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
773
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
774 /**
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
775 * Compares the argument to the receiver, and returns true
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
776 * if they represent the <em>same</em> object using a class
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
777 * specific comparison.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
778 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
779 * @param object the object to compare with this object
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
780 * @return <code>true</code> if the object is the same as this object and <code>false</code> otherwise
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
781 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
782 * @see #hashCode
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
783 */
150
f2e04420fd6c reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
784 public override int opEquals (Object object) {
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
785 if (object is this) return true;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
786 if ( auto image = cast(Image)object ){
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
787 return device is image.device && pixmap is image.pixmap;
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
788 }
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
789 return false;
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
790 }
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
791
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
792 /**
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
793 * Returns the color to which to map the transparent pixel, or null if
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
794 * the receiver has no transparent pixel.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
795 * <p>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
796 * There are certain uses of Images that do not support transparency
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
797 * (for example, setting an image into a button or label). In these cases,
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
798 * it may be desired to simulate transparency by using the background
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
799 * color of the widget to paint the transparent pixels of the image.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
800 * Use this method to check which color will be used in these cases
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
801 * in place of transparency. This value may be set with setBackground().
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
802 * <p>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
803 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
804 * @return the background color of the image, or null if there is no transparency in the image
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
805 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
806 * @exception DWTException <ul>
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
807 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
808 * </ul>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
809 */
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
810 public Color getBackground() {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
811 if (isDisposed()) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED);
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
812 if (transparentPixel is -1) return null;
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
813 //NOT DONE
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
814 return null;
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
815 }
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
816
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
817 /**
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
818 * Returns the bounds of the receiver. The rectangle will always
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
819 * have x and y values of 0, and the width and height of the
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
820 * image.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
821 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
822 * @return a rectangle specifying the image's bounds
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
823 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
824 * @exception DWTException <ul>
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
825 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
826 * <li>ERROR_INVALID_IMAGE - if the image is not a bitmap or an icon</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
827 * </ul>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
828 */
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
829 public Rectangle getBounds() {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
830 if (isDisposed()) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED);
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
831 if (width !is -1 && height !is -1) {
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
832 return new Rectangle(0, 0, width, 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
833 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
834 int w; int h;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
835 OS.gdk_drawable_get_size(pixmap, &w, &h);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
836 return new Rectangle(0, 0, width = w, height = h);
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
837 }
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
838
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
839 /**
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
840 * Returns an <code>ImageData</code> based on the receiver
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
841 * Modifications made to this <code>ImageData</code> will not
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
842 * affect the Image.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
843 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
844 * @return an <code>ImageData</code> containing the image's data and attributes
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
845 *
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
846 * @exception DWTException <ul>
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
847 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
848 * <li>ERROR_INVALID_IMAGE - if the image is not a bitmap or an icon</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
849 * </ul>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
850 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
851 * @see ImageData
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
852 */
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
853 public ImageData getImageData() {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
854 if (isDisposed()) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED);
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
855
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
856 int w, h;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
857 OS.gdk_drawable_get_size(pixmap, &w, &h);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
858 int width = w, height = h;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
859 auto pixbuf = OS.gdk_pixbuf_new(OS.GDK_COLORSPACE_RGB, false, 8, width, height);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
860 if (pixbuf is null) DWT.error(DWT.ERROR_NO_HANDLES);
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
861 auto colormap = OS.gdk_colormap_get_system();
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
862 OS.gdk_pixbuf_get_from_drawable(pixbuf, pixmap, colormap, 0, 0, 0, 0, width, 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
863 int stride = OS.gdk_pixbuf_get_rowstride(pixbuf);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
864 auto pixels = OS.gdk_pixbuf_get_pixels(pixbuf);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
865 byte[] srcData = new byte[stride * 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
866 memmove(srcData.ptr, pixels, srcData.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
867 OS.g_object_unref(pixbuf);
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
868
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
869 PaletteData palette = new PaletteData(0xFF0000, 0xFF00, 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
870 ImageData data = new ImageData(width, height, 24, 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
871 data.data = srcData;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
872 data.bytesPerLine = stride;
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
873
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
874 if (transparentPixel is -1 && type is DWT.ICON && mask !is null) {
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
875 /* Get the icon 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
876 auto gdkImagePtr = OS.gdk_drawable_get_image(mask, 0, 0, width, height);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
877 if (gdkImagePtr is null) DWT.error(DWT.ERROR_NO_HANDLES);
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
878 GdkImage* gdkImage = new GdkImage();
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
879 memmove(gdkImage, gdkImagePtr, GdkImage.sizeof );
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
880 byte[] maskData = new byte[gdkImage.bpl * gdkImage.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
881 memmove(maskData.ptr, gdkImage.mem, 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
882 OS.g_object_unref(gdkImagePtr);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
883 int maskPad;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
884 for (maskPad = 1; maskPad < 128; maskPad++) {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
885 int bpl = (((width + 7) / 8) + (maskPad - 1)) / maskPad * maskPad;
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
886 if (gdkImage.bpl is bpl) break;
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
887 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
888 /* Make mask scanline pad equals to 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
889 data.maskPad = 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
890 maskData = ImageData.convertPad(maskData, width, height, 1, maskPad, data.maskPad);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
891 /* Bit swap the mask data if necessary */
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
892 if (gdkImage.byte_order is OS.GDK_LSB_FIRST) {
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
893 for (int i = 0; i < maskData.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
894 byte b = maskData[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
895 maskData[i] = cast(byte)(((b & 0x01) << 7) | ((b & 0x02) << 5) |
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
896 ((b & 0x04) << 3) | ((b & 0x08) << 1) | ((b & 0x10) >> 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
897 ((b & 0x20) >> 3) | ((b & 0x40) >> 5) | ((b & 0x80) >> 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
898 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
899 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
900 data.maskData = 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
901 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
902 data.transparentPixel = transparentPixel;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
903 data.alpha = alpha;
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
904 if (alpha is -1 && alphaData !is null) {
25
fc2b263b8a3f Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents: 19
diff changeset
905 data.alphaData = new byte[alphaData.length];
fc2b263b8a3f Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents: 19
diff changeset
906 System.arraycopy(alphaData, 0, data.alphaData, 0, alphaData.length);
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
907 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
908 return data;
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
909 }
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
910
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
911 /**
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
912 * Invokes platform specific functionality to allocate a new image.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
913 * <p>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
914 * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
915 * API for <code>Image</code>. It is marked public only so that it
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
916 * can be shared within the packages provided by DWT. It is not
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
917 * available on all platforms, and should never be called from
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
918 * application code.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
919 * </p>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
920 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
921 * @param device the device on which to allocate the color
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
922 * @param type the type of the image (<code>DWT.BITMAP</code> or <code>DWT.ICON</code>)
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
923 * @param pixmap the OS handle for the image
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
924 * @param mask the OS handle for the image mask
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
925 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
926 * @private
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
927 */
92
ddb19cb18d2e package dnd
Frank Benoit <benoit@tionex.de>
parents: 72
diff changeset
928 public static Image gtk_new(Device device, int type, GdkDrawable* pixmap, GdkDrawable* mask) {
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
929 Image image = new Image(device);
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
930 image.type = type;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
931 image.pixmap = cast(GdkDrawable*)pixmap;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
932 image.mask = cast(GdkDrawable*)mask;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
933 return image;
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
934 }
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
935
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
936 /**
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
937 * Returns an integer hash code for the receiver. Any two
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
938 * objects that return <code>true</code> when passed to
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
939 * <code>equals</code> must return the same value for this
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
940 * method.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
941 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
942 * @return the receiver's hash
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
943 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
944 * @see #equals
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
945 */
150
f2e04420fd6c reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
946 public override hash_t toHash () {
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
947 return cast(hash_t)/*64*/pixmap;
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
948 }
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
949
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
950 void init_(int width, int height) {
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
951 if (width <= 0 || height <= 0) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
952 DWT.error (DWT.ERROR_INVALID_ARGUMENT);
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
953 }
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
954 this.type = DWT.BITMAP;
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
955
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
956 /* Create the pixmap */
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
957 this.pixmap = cast(GdkDrawable*) OS.gdk_pixmap_new(cast(GdkDrawable*)OS.GDK_ROOT_PARENT(), width, height, -1);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
958 if (pixmap is null) DWT.error(DWT.ERROR_NO_HANDLES);
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
959 /* Fill the bitmap with white */
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
960 GdkColor* white = new GdkColor();
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
961 white.red = 0xFFFF;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
962 white.green = 0xFFFF;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
963 white.blue = 0xFFFF;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
964 auto colormap = OS.gdk_colormap_get_system();
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
965 OS.gdk_colormap_alloc_color(colormap, white, true, true);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
966 auto gdkGC = OS.gdk_gc_new(pixmap);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
967 OS.gdk_gc_set_foreground(gdkGC, white);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
968 OS.gdk_draw_rectangle(pixmap, gdkGC, 1, 0, 0, width, 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
969 OS.g_object_unref(gdkGC);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
970 OS.gdk_colormap_free_colors(colormap, white, 1);
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
971 }
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
972
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
973 void init_(ImageData image) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
974 if (image is null) DWT.error(DWT.ERROR_NULL_ARGUMENT);
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
975 int width = image.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
976 int height = image.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
977 PaletteData palette = image.palette;
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
978 if (!(((image.depth is 1 || image.depth is 2 || image.depth is 4 || image.depth is 8) && !palette.isDirect) ||
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
979 ((image.depth is 8) || (image.depth is 16 || image.depth is 24 || image.depth is 32) && palette.isDirect)))
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
980 DWT.error (DWT.ERROR_UNSUPPORTED_DEPTH);
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
981 auto pixbuf = OS.gdk_pixbuf_new( OS.GDK_COLORSPACE_RGB, false, 8, width, height);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
982 if (pixbuf is null) DWT.error(DWT.ERROR_NO_HANDLES);
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
983 int stride = OS.gdk_pixbuf_get_rowstride(pixbuf);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
984 auto data = OS.gdk_pixbuf_get_pixels(pixbuf);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
985 byte[] buffer = image.data;
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
986 if (!palette.isDirect || image.depth !is 24 || stride !is image.bytesPerLine || palette.redMask !is 0xFF0000 || palette.greenMask !is 0xFF00 || palette.blueMask !is 0xFF) {
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
987 buffer = new byte[stride * 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
988 if (palette.isDirect) {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
989 ImageData.blit(ImageData.BLIT_SRC,
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
990 image.data, image.depth, image.bytesPerLine, image.getByteOrder(), 0, 0, width, height, palette.redMask, palette.greenMask, palette.blueMask,
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
991 ImageData.ALPHA_OPAQUE, null, 0, 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
992 buffer, 24, stride, ImageData.MSB_FIRST, 0, 0, width, height, 0xFF0000, 0xFF00, 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
993 false, 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
994 } 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
995 RGB[] rgbs = palette.getRGBs();
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
996 int length = rgbs.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
997 byte[] srcReds = new byte[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
998 byte[] srcGreens = new byte[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
999 byte[] srcBlues = new byte[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
1000 for (int i = 0; i < rgbs.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
1001 RGB rgb = rgbs[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
1002 if (rgb is null) continue;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
1003 srcReds[i] = cast(byte)rgb.red;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
1004 srcGreens[i] = cast(byte)rgb.green;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
1005 srcBlues[i] = cast(byte)rgb.blue;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
1006 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
1007 ImageData.blit(ImageData.BLIT_SRC,
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
1008 image.data, image.depth, image.bytesPerLine, image.getByteOrder(), 0, 0, width, height, srcReds, srcGreens, srcBlues,
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
1009 ImageData.ALPHA_OPAQUE, null, 0, 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
1010 buffer, 24, stride, ImageData.MSB_FIRST, 0, 0, width, height, 0xFF0000, 0xFF00, 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
1011 false, 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
1012 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
1013 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
1014 memmove(data, buffer.ptr, stride * 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
1015 auto pixmap = cast(GdkDrawable*) OS.gdk_pixmap_new (cast(GdkDrawable*) OS.GDK_ROOT_PARENT(), width, height, -1);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
1016 if (pixmap is null) DWT.error(DWT.ERROR_NO_HANDLES);
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
1017 auto gdkGC = OS.gdk_gc_new(pixmap);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
1018 if (gdkGC is null) DWT.error(DWT.ERROR_NO_HANDLES);
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
1019 OS.gdk_pixbuf_render_to_drawable(pixbuf, pixmap, gdkGC, 0, 0, 0, 0, width, height, OS.GDK_RGB_DITHER_NORMAL, 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
1020 OS.g_object_unref(gdkGC);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
1021 OS.g_object_unref(pixbuf);
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1022
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
1023 bool isIcon = image.getTransparencyType() is DWT.TRANSPARENCY_MASK;
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
1024 if (isIcon || image.transparentPixel !is -1) {
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
1025 if (image.transparentPixel !is -1) {
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
1026 RGB rgb = 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
1027 if (palette.isDirect) {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
1028 rgb = palette.getRGB(image.transparentPixel);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
1029 } 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
1030 if (image.transparentPixel < palette.colors.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
1031 rgb = palette.getRGB(image.transparentPixel);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
1032 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
1033 }
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
1034 if (rgb !is null) {
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
1035 transparentPixel = rgb.red << 16 | rgb.green << 8 | rgb.blue;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
1036 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
1037 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
1038 auto mask = createMask(image, isIcon);
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
1039 if (mask is null) DWT.error(DWT.ERROR_NO_HANDLES);
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
1040 this.mask = mask;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
1041 if (isIcon) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
1042 this.type = DWT.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
1043 } else {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
1044 this.type = DWT.BITMAP;
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
1045 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
1046 } else {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
1047 this.type = DWT.BITMAP;
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
1048 this.mask = 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
1049 this.alpha = image.alpha;
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
1050 if (image.alpha is -1 && image.alphaData !is null) {
25
fc2b263b8a3f Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents: 19
diff changeset
1051 this.alphaData = new byte[image.alphaData.length];
fc2b263b8a3f Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents: 19
diff changeset
1052 System.arraycopy(image.alphaData, 0, this.alphaData, 0, alphaData.length);
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
1053 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
1054 createAlphaMask(width, 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
1055 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
1056 this.pixmap = pixmap;
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1057 }
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1058
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1059 /**
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1060 * Invokes platform specific functionality to allocate a new GC handle.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1061 * <p>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1062 * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1063 * API for <code>Image</code>. It is marked public only so that it
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
1064 * can be shared within the packages provided by DWT. It is not
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1065 * available on all platforms, and should never be called from
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1066 * application code.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1067 * </p>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1068 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1069 * @param data the platform specific GC data
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1070 * @return the platform specific GC handle
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1071 */
19
Frank Benoit <benoit@tionex.de>
parents: 18
diff changeset
1072 public GdkGC* internal_new_GC (GCData data) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
1073 if (pixmap is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED);
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
1074 if (type !is DWT.BITMAP || memGC !is null) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
1075 DWT.error(DWT.ERROR_INVALID_ARGUMENT);
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
1076 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
1077 auto gdkGC = OS.gdk_gc_new(pixmap);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
1078 if (data !is null) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
1079 int mask = DWT.LEFT_TO_RIGHT | DWT.RIGHT_TO_LEFT;
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
1080 if ((data.style & mask) is 0) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
1081 data.style |= DWT.LEFT_TO_RIGHT;
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1082 } else {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1083 if ((data.style & DWT.RIGHT_TO_LEFT) !is 0) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1084 data.style |= DWT.MIRRORED;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1085 }
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
1086 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
1087 data.device = device;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
1088 data.drawable = pixmap;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
1089 data.background = device.COLOR_WHITE.handle;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
1090 data.foreground = device.COLOR_BLACK.handle;
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
1091 data.font = device.systemFont;
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
1092 data.image = this;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
1093 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
1094 return gdkGC;
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1095 }
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1096
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1097 /**
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1098 * Invokes platform specific functionality to dispose a GC handle.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1099 * <p>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1100 * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1101 * API for <code>Image</code>. It is marked public only so that it
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
1102 * can be shared within the packages provided by DWT. It is not
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1103 * available on all platforms, and should never be called from
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1104 * application code.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1105 * </p>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1106 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1107 * @param hDC the platform specific GC handle
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1108 * @param data the platform specific GC data
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1109 */
19
Frank Benoit <benoit@tionex.de>
parents: 18
diff changeset
1110 public void internal_dispose_GC ( GdkGC* gdkGC, GCData 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
1111 OS.g_object_unref(gdkGC);
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1112 }
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1113
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1114 /**
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1115 * Returns <code>true</code> if the image has been disposed,
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1116 * and <code>false</code> otherwise.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1117 * <p>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1118 * This method gets the dispose state for the image.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1119 * When an image has been disposed, it is an error to
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1120 * invoke any other method using the image.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1121 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1122 * @return <code>true</code> when the image is disposed and <code>false</code> otherwise
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1123 */
150
f2e04420fd6c reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
1124 public override bool isDisposed() {
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
1125 return pixmap is null;
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1126 }
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1127
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1128 /**
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1129 * Sets the color to which to map the transparent pixel.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1130 * <p>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1131 * There are certain uses of <code>Images</code> that do not support
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1132 * transparency (for example, setting an image into a button or label).
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1133 * In these cases, it may be desired to simulate transparency by using
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1134 * the background color of the widget to paint the transparent pixels
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1135 * of the image. This method specifies the color that will be used in
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1136 * these cases. For example:
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1137 * <pre>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1138 * Button b = new Button();
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1139 * image.setBackground(b.getBackground());
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1140 * b.setImage(image);
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1141 * </pre>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1142 * </p><p>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1143 * The image may be modified by this operation (in effect, the
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1144 * transparent regions may be filled with the supplied color). Hence
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1145 * this operation is not reversible and it is not legal to call
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1146 * this function twice or with a null argument.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1147 * </p><p>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1148 * This method has no effect if the receiver does not have a transparent
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1149 * pixel value.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1150 * </p>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1151 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1152 * @param color the color to use when a transparent pixel is specified
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1153 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1154 * @exception IllegalArgumentException <ul>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1155 * <li>ERROR_NULL_ARGUMENT - if the color is null</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1156 * <li>ERROR_INVALID_ARGUMENT - if the color has been disposed</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1157 * </ul>
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
1158 * @exception DWTException <ul>
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1159 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1160 * </ul>
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1161 */
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1162 public void setBackground(Color color) {
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
1163 if (isDisposed()) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED);
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
1164 if (color is null) DWT.error(DWT.ERROR_NULL_ARGUMENT);
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
1165 if (color.isDisposed()) DWT.error(DWT.ERROR_INVALID_ARGUMENT);
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 92
diff changeset
1166 if (transparentPixel is -1) return;
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
1167 //NOT DONE
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1168 }
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1169
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1170 /**
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1171 * Returns a string containing a concise, human-readable
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1172 * description of the receiver.
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1173 *
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1174 * @return a string representation of the receiver
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1175 */
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 216
diff changeset
1176 public override String toString () {
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
1177 if (isDisposed()) return "Image {*DISPOSED*}";
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
1178 return Format( "Image {{{}}", pixmap);
18
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1179 }
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1180
92223a4ecca7 start of image port
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1181 }
150
f2e04420fd6c reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
1182