Mercurial > projects > dwt-addons
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 |
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 } |