comparison org.eclipse.ui.forms/src/org/eclipse/ui/internal/forms/widgets/ImageSegment.d @ 12:bc29606a740c

Added dwt-addons in original directory structure of eclipse.org
author Frank Benoit <benoit@tionex.de>
date Sat, 14 Mar 2009 18:23:29 +0100
parents
children dbfb303e8fb0
comparison
equal deleted inserted replaced
11:43904fec5dca 12:bc29606a740c
1 /*******************************************************************************
2 * Copyright (c) 2000, 2005 IBM Corporation and others.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
7 *
8 * Contributors:
9 * IBM Corporation - initial API and implementation
10 * Port to the D programming language:
11 * Frank Benoit <benoit@tionex.de>
12 *******************************************************************************/
13 module org.eclipse.ui.internal.forms.widgets.ImageSegment;
14
15 import org.eclipse.ui.internal.forms.widgets.ObjectSegment;
16 import org.eclipse.ui.internal.forms.widgets.SelectionData;
17 import org.eclipse.ui.internal.forms.widgets.FormUtil;
18
19 import org.eclipse.swt.graphics.Color;
20 import org.eclipse.swt.graphics.GC;
21 import org.eclipse.swt.graphics.Image;
22 import org.eclipse.swt.graphics.Point;
23 import org.eclipse.swt.graphics.Rectangle;
24
25 import java.lang.all;
26 import java.util.Set;
27
28 /**
29 * @version 1.0
30 * @author
31 */
32 public class ImageSegment : ObjectSegment {
33 public static const String SEL_IMAGE_PREFIX = "isel."; //$NON-NLS-1$
34
35 public Image getImage(Hashtable objectTable) {
36 return getImage(getObjectId(), objectTable);
37 }
38
39 private Image getImage(String key, Hashtable objectTable) {
40 if (key is null)
41 return null;
42 Object obj = objectTable.get(key);
43 if (obj is null)
44 return null;
45 if ( auto image = cast(Image)obj )
46 return image;
47 return null;
48 }
49
50 private Image getSelectedImage(Hashtable objectTable, SelectionData selData) {
51 String key = SEL_IMAGE_PREFIX ~ getObjectId();
52 Image image = getImage(key, objectTable);
53 if (image is null) {
54 image = FormUtil.createAlphaMashImage(selData.display, getImage(objectTable));
55 if (image !is null)
56 objectTable.put(key, image);
57 }
58 return image;
59 }
60 /*
61 private String getSelectedImageId() {
62 if (getObjectId() is null)
63 return null;
64 return SEL_IMAGE_PREFIX + getObjectId();
65 }
66 */
67
68 public void paint(GC gc, bool hover, Hashtable resourceTable, bool selected, SelectionData selData, Rectangle repaintRegion) {
69 Image image = getImage(resourceTable);
70 int iwidth = 0;
71 int iheight = 0;
72 if (image !is null) {
73 Rectangle rect = image.getBounds();
74 iwidth = rect.width + (isSelectable()?2:0);
75 iheight = rect.height + (isSelectable()?2:0);
76 } else
77 return;
78 Rectangle bounds = getBounds();
79 int ix = bounds.x+(isSelectable()?1:0);
80 int iy = bounds.y+(isSelectable()?1:0);
81
82 if (selData !is null) {
83 int leftOffset = selData.getLeftOffset(bounds.height);
84 int rightOffset = selData.getRightOffset(bounds.height);
85 bool firstRow = selData.isFirstSelectionRow(bounds.y,
86 bounds.height);
87 bool lastRow = selData.isLastSelectionRow(bounds.y,
88 bounds.height);
89 bool selectedRow = selData
90 .isSelectedRow(bounds.y, bounds.height);
91 if (selectedRow) {
92 if ((firstRow && leftOffset > ix) ||
93 (lastRow && rightOffset < ix + iwidth/2)) {
94 drawClipImage(gc, image, ix, iy, repaintRegion);
95 }
96 else {
97 Color savedBg = gc.getBackground();
98 gc.setBackground(selData.bg);
99 int sx = ix;
100 int sy = iy;
101 if (repaintRegion !is null) {
102 sx -= repaintRegion.x;
103 sy -= repaintRegion.y;
104 }
105 gc.fillRectangle(sx, sy, iwidth, iheight);
106 Image selImage = getSelectedImage(resourceTable, selData);
107 gc.drawImage(selImage, sx, sy);
108 gc.setBackground(savedBg);
109 }
110 }
111 else
112 drawClipImage(gc, image, ix, iy, repaintRegion);
113 } else
114 drawClipImage(gc, image, ix, iy, repaintRegion);
115 if (selected) {
116 int fx = bounds.x;
117 int fy = bounds.y;
118 if (repaintRegion !is null) {
119 fx -= repaintRegion.x;
120 fy -= repaintRegion.y;
121 }
122 Color fg = gc.getForeground();
123 gc.setForeground(gc.getBackground());
124 // Clean up to avoid canceling out XOR if it is already
125 // selected.
126 gc.drawRectangle(bounds.x, bounds.y, bounds.width - 1,
127 bounds.height - 1);
128 gc.setForeground(fg);
129 gc.drawFocus(fx, fy, bounds.width, bounds.height);
130 }
131 }
132 private void drawClipImage(GC gc, Image image, int ix, int iy, Rectangle repaintRegion) {
133 if (repaintRegion !is null) {
134 ix -= repaintRegion.x;
135 iy -= repaintRegion.y;
136 }
137 gc.drawImage(image, ix, iy);
138 }
139
140 protected Point getObjectSize(Hashtable resourceTable, int wHint) {
141 Image image = getImage(resourceTable);
142 if (image is null)
143 return new Point(0, 0);
144 Rectangle ibounds = image.getBounds();
145 return new Point(ibounds.width, ibounds.height);
146 }
147 }