annotate dwtx/novocode/ScaledImage.d @ 190:df4e66472aff

novocode line endings, indention
author Frank Benoit <benoit@tionex.de>
date Sun, 26 Oct 2008 15:04:41 +0100
parents e3780acbbf80
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
190
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
1 /*******************************************************************************
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
2 * Copyright (c) 2004 Stefan Zeiger and others.
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
3 * All rights reserved. This program and the accompanying materials
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
5 * which accompanies this distribution, and is available at
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
6 * http://www.novocode.com/legal/epl-v10.html
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
7 *
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
8 * Contributors:
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
9 * Stefan Zeiger (szeiger@novocode.com) - initial API and implementation
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
10 * IBM Corporation - original SWT CLabel implementation on which this class is based
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
11 *******************************************************************************/
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
12
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
13 module dwtx.novocode.ScaledImage;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
14
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
15 import dwt.DWT;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
16 import dwt.graphics.Color;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
17 import dwt.graphics.GC;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
18 import dwt.graphics.Image;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
19 import dwt.graphics.Point;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
20 import dwt.graphics.Rectangle;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
21 import dwt.widgets.Canvas;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
22 import dwt.widgets.Composite;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
23 import dwt.widgets.Event;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
24 import dwt.widgets.Listener;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
25
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
26
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
27 /**
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
28 * An image / gradient component. Under development.
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
29 *
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
30 * @author Stefan Zeiger (szeiger@novocode.com)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
31 * @since Mar 21, 2005
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
32 * @version $Id: ScaledImage.java 346 2005-07-11 20:15:57 +0000 (Mon, 11 Jul 2005) szeiger $
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
33 */
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
34
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
35 class ScaledImage : Canvas
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
36 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
37 private const Rectangle DEFAULT_BOUNDS;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
38
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
39 public static const int IMAGE_PLACEMENT_STRETCH = 0;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
40 public static const int IMAGE_PLACEMENT_TILE = 1;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
41
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
42 private Image image;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
43
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
44 private Color[] gradientColors;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
45
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
46 private int[] gradientPercents;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
47
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
48 private bool gradientVertical;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
49
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
50 private int imagePlacement = IMAGE_PLACEMENT_STRETCH;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
51
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
52
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
53 this(Composite parent, int style)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
54 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
55 super(parent, style | DWT.NO_BACKGROUND);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
56 this.DEFAULT_BOUNDS = new Rectangle(0, 0, 32, 32);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
57
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
58 addListener(DWT.Paint, dgListener(&onPaint));
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
59 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
60
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
61
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
62 private void onPaint(Event event)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
63 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
64 Rectangle rect = getClientArea();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
65 GC gc = event.gc;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
66 if(image is null
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
67 || image.getImageData().getTransparencyType() !is DWT.TRANSPARENCY_NONE)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
68 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
69
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
70 if(gradientColors !is null)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
71 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
72 // draw a gradient behind the text
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
73 Color oldBackground = gc.getBackground();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
74 if(gradientColors.length is 1)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
75 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
76 if(gradientColors[0] !is null) gc.setBackground(gradientColors[0]);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
77 gc.fillRectangle(0, 0, rect.width, rect.height);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
78 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
79 else
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
80 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
81 Color oldForeground = gc.getForeground();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
82 Color lastColor = gradientColors[0];
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
83 if(lastColor is null) lastColor = oldBackground;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
84 int pos = 0;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
85 for(int i = 0; i < gradientPercents.length; ++i)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
86 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
87 gc.setForeground(lastColor);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
88 lastColor = gradientColors[i + 1];
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
89 if(lastColor is null) lastColor = oldBackground;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
90 gc.setBackground(lastColor);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
91 if(gradientVertical)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
92 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
93 int gradientHeight = (gradientPercents[i] * rect.height / 100)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
94 - pos;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
95 gc.fillGradientRectangle(0, pos, rect.width, gradientHeight,
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
96 true);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
97 pos += gradientHeight;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
98 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
99 else
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
100 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
101 int gradientWidth = (gradientPercents[i] * rect.width / 100)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
102 - pos;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
103 gc.fillGradientRectangle(pos, 0, gradientWidth, rect.height,
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
104 false);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
105 pos += gradientWidth;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
106 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
107 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
108 if(gradientVertical && pos < rect.height)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
109 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
110 gc.setBackground(getBackground());
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
111 gc.fillRectangle(0, pos, rect.width, rect.height - pos);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
112 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
113 if(!gradientVertical && pos < rect.width)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
114 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
115 gc.setBackground(getBackground());
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
116 gc.fillRectangle(pos, 0, rect.width - pos, rect.height);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
117 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
118 gc.setForeground(oldForeground);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
119 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
120 gc.setBackground(oldBackground);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
121 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
122 else
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
123 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
124 if((getStyle() & DWT.NO_BACKGROUND) !is 0)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
125 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
126 gc.setBackground(getBackground());
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
127 gc.fillRectangle(rect);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
128 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
129 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
130
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
131 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
132 if(image !is null)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
133 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
134 Rectangle ib = image.getBounds();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
135 if(imagePlacement is IMAGE_PLACEMENT_TILE)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
136 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
137 int maxStartX = rect.x + rect.width;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
138 int maxStartY = rect.y + rect.height;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
139 for(int x = rect.x; x < maxStartX; x += ib.width)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
140 for(int y = rect.y; y < maxStartY; y += ib.height)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
141 event.gc.drawImage(image, x, y);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
142 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
143 else // IMAGE_PLACEMENT_STRETCH
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
144 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
145 event.gc.drawImage(image, ib.x, ib.y, ib.width, ib.height, rect.x,
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
146 rect.y, rect.width, rect.height);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
147 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
148 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
149 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
150
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
151
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
152 public void setImage(Image image)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
153 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
154 this.image = image;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
155 redraw();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
156 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
157
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
158
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
159 public void setImagePlacement(int imagePlacement)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
160 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
161 this.imagePlacement = imagePlacement;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
162 redraw();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
163 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
164
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
165
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
166 public Point computeSize(int wHint, int hHint, bool changed)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
167 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
168 checkWidget();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
169 Rectangle ib = image !is null ? image.getBounds() : DEFAULT_BOUNDS;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
170 if(wHint == DWT.DEFAULT) wHint = ib.width;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
171 if(hHint == DWT.DEFAULT) hHint = ib.height;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
172 return new Point(wHint, hHint);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
173 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
174
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
175
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
176 public void setBackground(Color color)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
177 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
178 super.setBackground(color);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
179 // Are these settings the same as before?
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
180 if(color !is null && gradientColors is null && gradientPercents is null)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
181 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
182 Color background = getBackground();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
183 if(color is background)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
184 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
185 return;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
186 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
187 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
188 gradientColors = null;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
189 gradientPercents = null;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
190 redraw();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
191 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
192
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
193
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
194 public void setBackground(Color[] colors, int[] percents)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
195 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
196 setBackground(colors, percents, false);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
197 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
198
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
199
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
200 public void setBackground(Color[] colors, int[] percents, bool vertical)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
201 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
202 checkWidget();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
203 if(colors !is null)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
204 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
205 if(percents is null || percents.length !is colors.length - 1)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
206 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
207 DWT.error(DWT.ERROR_INVALID_ARGUMENT);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
208 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
209 if(getDisplay().getDepth() < 15)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
210 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
211 // Don't use gradients on low color displays
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
212 colors = [ colors[colors.length - 1] ];
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
213 percents = [];
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
214 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
215 for(int i = 0; i < percents.length; i++)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
216 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
217 if(percents[i] < 0 || percents[i] > 100)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
218 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
219 DWT.error(DWT.ERROR_INVALID_ARGUMENT);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
220 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
221 if(i > 0 && percents[i] < percents[i - 1])
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
222 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
223 DWT.error(DWT.ERROR_INVALID_ARGUMENT);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
224 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
225 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
226 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
227
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
228 // Are these settings the same as before?
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
229 Color background = getBackground();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
230 if((gradientColors !is null) && (colors !is null)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
231 && (gradientColors.length is colors.length))
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
232 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
233 bool same = false;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
234 for(int i = 0; i < gradientColors.length; i++)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
235 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
236 same = (gradientColors[i] is colors[i])
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
237 || ((gradientColors[i] is null) && (colors[i] is background))
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
238 || ((gradientColors[i] is background) && (colors[i] is null));
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
239 if(!same) break;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
240 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
241 if(same)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
242 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
243 for(int i = 0; i < gradientPercents.length; i++)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
244 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
245 same = gradientPercents[i] is percents[i];
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
246 if(!same) break;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
247 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
248 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
249 if(same && this.gradientVertical is vertical) return;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
250 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
251 // Store the new settings
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
252 if(colors is null)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
253 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
254 gradientColors = null;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
255 gradientPercents = null;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
256 gradientVertical = false;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
257 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
258 else
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
259 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
260 gradientColors = new Color[colors.length];
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
261 for(int i = 0; i < colors.length; ++i)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
262 gradientColors[i] = (colors[i] !is null) ? colors[i] : background;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
263 gradientPercents = new int[percents.length];
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
264 for(int i = 0; i < percents.length; ++i)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
265 gradientPercents[i] = percents[i];
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
266 gradientVertical = vertical;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
267 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
268 // Refresh with the new settings
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
269 redraw();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
270 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
271 }