annotate user/region_shell.d @ 141:c311768f1afa

more ignores
author Frank Benoit <benoit@tionex.de>
date Thu, 07 Aug 2008 17:22:14 +0200
parents a57305009edb
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
42
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1 module user.region_shell;// image attached: region.gif
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2 import dwt.DWT;
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 import dwt.widgets.Display;
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 import dwt.widgets.Shell;
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 import dwt.widgets.Button;
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 import dwt.widgets.Listener;
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 import dwt.widgets.Event;
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
10 import dwt.layout.GridLayout;
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
11
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 import dwt.dwthelper.ByteArrayInputStream;
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14 import dwt.graphics.Image;
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15 import dwt.graphics.ImageData;
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16 import dwt.graphics.Region;
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17 import dwt.graphics.Point;
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18 import dwt.graphics.Rectangle;
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
19
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20 import tango.io.Stdout;
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22 class RegionShell: Shell
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23 {
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24 this(Display display, int style, Image image, bool moveable = true)
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 {
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 super(display, style);
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28 setShellRegion(image, moveable);
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29 }
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31 this(Display display, Image image, bool moveable = true)
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32 {
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33 this(display, DWT.NO_TRIM, image, moveable);
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34 }
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36 private void setShellRegion(Image image, bool moveable)
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37 {
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38 Region region = new Region();
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39 ImageData imageData = image.getImageData();
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41 if (imageData.alphaData != null)
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 {
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
43 Rectangle pixel = new Rectangle(0, 0, 1, 1);
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45 for (int y = 0; y < imageData.height; y++)
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 {
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 for (int x = 0; x < imageData.width; x++)
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48 {
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 if (imageData.getAlpha(x, y) == 255)
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50 {
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 pixel.x = imageData.x + x;
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52 pixel.y = imageData.y + y;
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54 region.add(pixel);
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 }
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56 }
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57 }
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58 }
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59 else
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60 {
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61 ImageData mask = imageData.getTransparencyMask();
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62 Rectangle pixel = new Rectangle(0, 0, 1, 1);
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
63 for (int y = 0; y < mask.height; y++)
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64 {
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65 for (int x = 0; x < mask.width; x++)
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66 {
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 if (mask.getPixel(x, y) != 0)
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
68 {
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69 pixel.x = imageData.x + x;
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70 pixel.y = imageData.y + y;
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72 region.add(pixel);
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73 }
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74 }
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75 }
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76 }
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78 this.setRegion(region);
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79 this.setSize(imageData.x + imageData.width, imageData.y + imageData.height);
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81 if (moveable)
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82 {
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 setMoveable();
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 }
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
85 }
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87 private Shell getCurrent()
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88 {
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89 return this;
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90 }
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92 private void setMoveable()
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93 {
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94 Listener l = new class Listener {
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95 Point origin;
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97 public void handleEvent(Event e) {
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98 switch (e.type) {
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99 case DWT.MouseDown:
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100 origin = new Point(e.x, e.y);
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101 break;
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102 case DWT.MouseUp:
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103 origin = null;
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104 break;
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105 case DWT.MouseMove:
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106 if (origin !is null) {
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
107 Point p = display.map(getCurrent(), null, e.x, e.y);
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108 getCurrent.setLocation(p.x - origin.x, p.y - origin.y);
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109 }
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110 break;
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111 }
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
112 }
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113 };
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115 this.addListener(DWT.MouseDown, l);
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116 this.addListener(DWT.MouseUp, l);
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117 this.addListener(DWT.MouseMove, l);
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118 }
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 }
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
120
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
121 void main()
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
122 {
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123 Display display = new Display();
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
124 Image image = new Image(display, new ImageData(new ByteArrayInputStream(cast(byte[]) import("region_shell.gif"))));
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
125 RegionShell shell = new RegionShell(display, image);
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
126
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
127 Button closeBtn = new Button(shell, DWT.PUSH);
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
128 closeBtn.setText("Close");
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
129 closeBtn.addListener(DWT.Selection, new class Listener {
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
130 public void handleEvent(Event e) {
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
131 shell.close();
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
132 }
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
133 });
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
134
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
135 shell.setLayout(new GridLayout());
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
136 shell.setBackgroundImage(image);
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
137 shell.open();
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
138
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
139 while (!shell.isDisposed())
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
140 {
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
141 if (!display.readAndDispatch())
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
142 {
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
143 display.sleep();
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
144 }
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
145 }
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
146
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
147 image.dispose();
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
148 display.dispose();
a57305009edb region_shell
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
149 }